Open source German learning app you can pip install and run locally.
Project description
Auf Deutsch
Auf Deutsch is an open source, local-first German learning app focused on self-study. It packages a FastAPI app, curated A1/A2 learning content, spaced repetition, stories, listening practice, and review tracking into a project people can install and run on their own machines.
What It Includes
- guided daily learning sessions
- spaced repetition review
- phrase packs, dialogues, grammar, stories, and listening exercises
- local SQLite progress tracking
- optional audio generation with
gTTS - a CLI entry point:
auf-deutsch
Quick Start
Install from GitHub
pip install "git+https://github.com/jrootn/auf-deutsch.git"
auf-deutsch
Install from a local checkout
git clone https://github.com/jrootn/auf-deutsch.git
cd auf-deutsch
pip install .
auf-deutsch
Contributor setup
git clone https://github.com/jrootn/auf-deutsch.git
cd auf-deutsch
python -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
pytest
auf-deutsch --skip-audio
The default app URL is http://127.0.0.1:8000.
CLI
auf-deutsch --help
auf-deutsch --no-browser
auf-deutsch --skip-audio
auf-deutsch --port 8010
auf-deutsch-validate
Data Storage
The app stores user data outside the repo:
- Linux:
~/.local/share/auf-deutsch - macOS:
~/Library/Application Support/auf-deutsch - Windows:
%LOCALAPPDATA%\auf-deutsch
Useful overrides:
AUF_DATA_DIR=/custom/pathAUF_DB_PATH=/custom/path/progress.dbAUF_SKIP_STARTUP_AUDIO=1
Dependencies
pip install . installs the runtime dependencies declared by the package:
fastapiuvicornjinja2gttsitsdangerouspython-multipart
The app works best online if you want generated pronunciation audio, because gTTS uses Google text-to-speech. The rest of the learning flow still works with --skip-audio.
Troubleshooting
If first run fails or the app starts in a restricted environment:
- try
auf-deutsch --skip-audio - set
AUF_DATA_DIR=/some/writable/path - set
AUF_DB_PATH=/some/writable/path/progress.dbif you want the database somewhere specific
The package includes a compatibility wrapper for current FastAPI/Starlette template rendering, so fresh installs should not depend on older TemplateResponse behavior.
Project Layout
src/auf_deutsch/ Python package
src/auf_deutsch/content/ Bundled learning materials
src/auf_deutsch/templates/ Server-rendered UI
src/auf_deutsch/static/ Static assets
tests/ Smoke tests
.github/workflows/ CI and PyPI release automation
GitHub Release Readiness
This repo is set up for GitHub use with:
- a standalone package layout under
src/ - a contributor install path
- CI workflow for tests and build checks
- a PyPI publish workflow using GitHub Actions trusted publishing
GitHub repository: https://github.com/jrootn/auf-deutsch
PyPI Release Readiness
The package can be built and checked locally with:
python -m build
python -m twine check dist/*
The included publish workflow expects:
- a real GitHub repository
- a PyPI project named
auf-deutsch - PyPI trusted publishing configured for that repository
Detailed release steps are in RELEASING.md.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file auf_deutsch-0.1.1.tar.gz.
File metadata
- Download URL: auf_deutsch-0.1.1.tar.gz
- Upload date:
- Size: 257.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6b7dad947d87c79490fd9782e5c220058a44e38d71226273be7f57b9c67b5b0
|
|
| MD5 |
95a6338f25f4cc1abde48eaef02a8b78
|
|
| BLAKE2b-256 |
ad20e027472ac6847259f4aaa36bb4ad0fd3f6817661f6fedb89fdd737ebde70
|
Provenance
The following attestation bundles were made for auf_deutsch-0.1.1.tar.gz:
Publisher:
publish-pypi.yml on jrootn/auf-deutsch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
auf_deutsch-0.1.1.tar.gz -
Subject digest:
b6b7dad947d87c79490fd9782e5c220058a44e38d71226273be7f57b9c67b5b0 - Sigstore transparency entry: 1259702046
- Sigstore integration time:
-
Permalink:
jrootn/auf-deutsch@50996b88a4eb9f1fe28d7a3cc4f946c1b9db328e -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/jrootn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@50996b88a4eb9f1fe28d7a3cc4f946c1b9db328e -
Trigger Event:
release
-
Statement type:
File details
Details for the file auf_deutsch-0.1.1-py3-none-any.whl.
File metadata
- Download URL: auf_deutsch-0.1.1-py3-none-any.whl
- Upload date:
- Size: 336.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40cce489e545180041c4aed11315f95bb229cf456af2c0c5ef294938f452382b
|
|
| MD5 |
f46f17d9c4f6e619b315587e07218157
|
|
| BLAKE2b-256 |
ead1bbf4699e157015d0f2983ff93c4a9659e90e1e855caf115d895679c49aa0
|
Provenance
The following attestation bundles were made for auf_deutsch-0.1.1-py3-none-any.whl:
Publisher:
publish-pypi.yml on jrootn/auf-deutsch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
auf_deutsch-0.1.1-py3-none-any.whl -
Subject digest:
40cce489e545180041c4aed11315f95bb229cf456af2c0c5ef294938f452382b - Sigstore transparency entry: 1259702134
- Sigstore integration time:
-
Permalink:
jrootn/auf-deutsch@50996b88a4eb9f1fe28d7a3cc4f946c1b9db328e -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/jrootn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@50996b88a4eb9f1fe28d7a3cc4f946c1b9db328e -
Trigger Event:
release
-
Statement type: