Skip to main content

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/path
  • AUF_DB_PATH=/custom/path/progress.db
  • AUF_SKIP_STARTUP_AUDIO=1

Dependencies

pip install . installs the runtime dependencies declared by the package:

  • fastapi
  • uvicorn
  • jinja2
  • gtts
  • itsdangerous
  • python-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.db if 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:

  1. a real GitHub repository
  2. a PyPI project named auf-deutsch
  3. PyPI trusted publishing configured for that repository

Detailed release steps are in RELEASING.md.

License

MIT

Metadata

Release files for auf-deutsch 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for auf-deutsch 0.1.1
File Size Uploaded Provenance
auf_deutsch-0.1.1.tar.gz 257.7 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for auf-deutsch 0.1.1
File Interpreter ABI Platform
auf_deutsch-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 593.7 kB

Release files / auf_deutsch-0.1.1.tar.gz

Download URL auf_deutsch-0.1.1.tar.gz
Size 257.7 kB
Tags Source
SHA-256 checksum
How to use checksums
b6b7dad947d87c79490fd9782e5c220058a44e38d71226273be7f57b9c67b5b0
BLAKE2b-256 checksum
How to use checksums
ad20e027472ac6847259f4aaa36bb4ad0fd3f6817661f6fedb89fdd737ebde70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 9, 2026.

Transparency log

Release files / auf_deutsch-0.1.1-py3-none-any.whl

Download URL auf_deutsch-0.1.1-py3-none-any.whl
Size 336.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
40cce489e545180041c4aed11315f95bb229cf456af2c0c5ef294938f452382b
BLAKE2b-256 checksum
How to use checksums
ead1bbf4699e157015d0f2983ff93c4a9659e90e1e855caf115d895679c49aa0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 9, 2026.

Transparency log

Security for auf-deutsch 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for auf_deutsch-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 9, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page