App for learning German Sign Language, built on the SignDict API. Runs entirely on-device. Progress and lists stay local.
The GitHub release provides one APK per architecture. Obtainium follows these releases automatically.
Verify the build provenance attestation:
gh attestation verify app-arm64-v8a-release.apk --repo DoPri/gebaerdenflutter pub get
dart run build_runner build
flutter runbuild_runner regenerates the database after changes to lib/db/tables.dart.
flutter analyze
flutter test
flutter test --coverage && python3 tools/coverage.py 95pre-commit install adds format, analysis, and tests to every commit.
test/ runs headless. integration_test/ requires a phone or emulator:
tools/integration.sh # Any device
tools/integration.sh emulator-5554 # Specific device
tools/integration.sh emulator-5554 integration_test/learn_test.dartThe script grants POST_NOTIFICATIONS on start to enable reminder tests. app_test.dart verifies the live signdict.org API. learn_test.dart and lists_test.dart drive the shell using seeded data.
flutter build apk --release --split-per-abi
flutter build ipaAndroid requires SDK 37 and JDK 17+.
export ANDROID_HOME="$HOME/Android/Sdk"
sdkmanager "platform-tools" "platforms;android-37" "build-tools;36.0.0"The release APK remains unsigned without ANDROID_KEYSTORE in the environment, supporting F-Droid distribution. See RELEASING.md.
The web build uses a proxy to bypass signdict.org CORS restrictions. See the "Container" section for deployment.
Every tag publishes a linux/amd64 image to ghcr:
docker run -p 8080:8080 ghcr.io/dopri/gebaerden:latestVerify the image attestation:
gh attestation verify oci://ghcr.io/dopri/gebaerden:latest --repo DoPri/gebaerdenDeploy using docker-compose.yml:
docker compose pull && docker compose up -dBuild locally:
docker compose up -d --builddocs/adr/ documents architecture decisions.
Code: see LICENSE.
Videos belong to SignDict under various CC licenses. Rights holder and license appear below every video.

