User manual for the vocabulary-learning Android app.
VocabTrain is a vocabulary-learning app for Android. Notes are organised into decks with two languages each, practised in seven different modes, and tracked with either a configurable level system or the FSRS-6 spaced-repetition scheduler. Optional Pro features unlock the more advanced modes, scheduler, widgets, automatic backups, and downloadable reading texts. There is no account; nothing leaves your device unless you start a sync or export.
What's in the box:
A deck pairs two languages and holds cards. Each card has a question (in language 1) and an answer (in language 2). You can swap sides per session. Decks support:
Each card has 14 base fields including question, answer, language IDs, level, optional example phrase per side, favourite flag, and timestamps; an additional 9 columns hold FSRS state (state, stability, difficulty, due date, …). The card's deck scheduler (Levels vs FSRS) is joined into queries that need it — it's not a column on the card itself.
Add a card with the + button on the deck detail screen. The translate icon (Pro) suggests a translation via ML Kit on-device. Long-click any card during practice to edit it without leaving the session.
All modes share the same conventions: enter with a list of deck IDs, an "only favourites" toggle, and an initial swap-sides flag. Each card interaction calls recordCardPracticed(mode) which drives daily goal, streak, practice history, and achievements.
Flip the card to reveal the back, then rate yourself green (got it) or red (forgot). Loads only cards below the deck's max level (so you don't drill what's already learned). A session-complete screen appears when all cards reach max level. The deck picker hides decks where every card is fully learned.
Type the answer. After submission, a comparison view shows your input next to the correct answer with a character-by-character diff so you can see exactly where you slipped.
Multiple-choice. Configurable number of answer options and an optional time limit per question. At the end of the round, a wrong-cards list lets you retry the ones you missed.
Audio-only practice with auto-advance. The Speech Mode picker (BOTH / question only / answer only) and the per-card pause duration let you tune the rhythm. No wrong-cards dialog, no local level changes — Listen is a low-stakes review mode for commuting.
A grid of randomised question and answer tiles. Tap a question, then its answer; correct pairs disappear. Played against the clock. A "view previous" mode replays each completed round with the original button states preserved (via a saver that survives rotation).
Hear the word, then type what you heard. Spelling-focused — the same character-diff feedback as Write mode.
A letter grid (8×8 to 14×14) with translations hidden in 8 directions. Drag from the start cell to the end cell. The gesture detector reads pointer events directly (not detectDragGestures) so short answers like "B1" register reliably even when the drag is just one cell. Found words get one of 20 palette colours.
Configurable 2 – 6 levels per deck. 0 = unlearned, max = learned. Cards level up on a correct answer and reset on a wrong one. The progress pie chart, deck list, and PDF export all use a consistent red → green colour gradient.
FSRS-6 (Free Spaced Repetition Scheduler). Per-deck flag — switch any deck from Levels to FSRS via the deck-edit dialog. The algorithm tracks each card's stability and difficulty, then predicts the optimal next review date. When you toggle Levels → FSRS, existing levels seed the FSRS state heuristically so you don't lose progress; the reverse is a no-op flag flip (FSRS columns stay dormant).
Review log entries (one per FSRS rating) live in a device-local review_log table that's not included in device sync — each device keeps its own learning history.
Hierarchical containers for decks (single parent per box, single box per deck — they're folders by another name). Built tree-style; you can filter the deck list by a box and its descendants via a recursive CTE behind the scenes. Empty boxes can be deleted; deleting a non-empty box cascades to children but sets deck box references to NULL (so decks aren't lost).
Tag-style, many-to-many. A deck can belong to several categories. Filter the deck list by any combination. Setting categories is transactional (delete-all + insert), so the deck always has exactly the chosen set after a save.
Favourite cards — tap the heart on any card. Every mode has an "only favourites" toggle to drill the cards you've marked.
Pinned decks — tap the pin in the deck list to keep a deck at the top regardless of sort order.
Two-stage soft delete. Archive moves a deck/card/category/language out of the main list (still restorable from the Archive screen). From the Archive, the Delete icon moves it to Trash (set is_deleted = 1, clear is_archived). Restoring from Trash brings it back to the main list — not back to the Archive.
On-device translation Pro via ML Kit. The first use of a language pair downloads a small model; subsequent translations run entirely on-device with no network round-trip. Works offline once the model is cached.
TTS — text-to-speech reads cards aloud in the appropriate language. Android TTS has no native pause, so VocabTrain queues each sentence as a separate utterance with chunk IDs. That makes pause (just stop) and resume (re-queue from the saved index) feel natural.
Every mode call to recordCardPracticed(mode) writes one row to a device-local, epoch-day-keyed practice history table and feeds:
530+ packs across 6 languages × 17 topics — Travel, Food, Animals, Sports, Business, etc. Browse and download from the Discover screen. Each download imports as a deck (subject to the card limit; warnings appear if a pack would exceed it). Catalog and pack JSON are served by djvlk.de and cached locally for 24 hours.
Graded reading at CEFR A1 through C1, in English, German, Spanish, and French. Each text plays back via TTS with auto-scroll synced to the current sentence. Texts and language list cached 24h.
Sync uses Google Nearby Connections (P2P_POINT_TO_POINT). Devices on the same Wi-Fi advertise and pair directly — no cloud, no account. Manifest exchange uses SHA-256 digests so only changed entities transfer; import order respects foreign-key dependencies (Languages → Boxes → Categories → Decks → Cards → cross-refs).
Two modes:
Card limit applies — if your card limit doesn't have room for everything the sender wants to import, sync skips the excess and surfaces a "cards skipped" warning on the completion screen.
Practice history and FSRS review logs are device-local on purpose — they don't ride sync, so each device keeps its own learning history.
Manual backup (free) — Settings → Backup. Creates a zip of the database in app-private storage; restore replaces the current database and restarts the app.
Automatic local backups Pro — daily or weekly via WorkManager. Runs when the device is charging or otherwise idle.
CSV — Settings → Import / Export. The separator is configurable (comma, semicolon, tab). Imports respect the card limit.
PDF export Pro — render any deck as a coloured PDF; level colours show at a glance which cards still need work.
Per-deck interval: daily, every 2 / 3 days, weekly, biweekly, or monthly. A daily WorkManager job checks which decks are due and posts notifications (notification ID = 10000 + deck.id). Every mode marks the deck's last-use timestamp on entry, so reminders only fire for decks you've actually fallen behind on.
Each widget extends Glance's GlanceAppWidget; tap any deck row to jump straight to the deck. Widgets re-read Pro state on every refresh — they don't have a billing client, so they consult cached Pro status (purchase OR debug override OR active trial).
Optional PIN protection (4+ digits) or biometric (fingerprint / face) via Android BiometricPrompt. PIN and biometric are mutually exclusive — enabling one disables the other.
Auto-lock — Immediate, 1 / 5 / 15 minutes, or Never. The app re-locks when backgrounded for the chosen duration.
The Settings screen organises options into:
attachBaseContext.BuildConfig.DEBUG).Pro is a single one-time in-app purchase via Google Play Billing. The 7-day free trial unlocks all Pro features without payment; no credit card and no auto-renewal — when the trial ends, Pro features simply revert until you purchase.
Pro unlocks: Quiz / Listen / Pair / Dictation / Word Search modes, FSRS scheduler, on-device translation, per-deck reminders, home screen widgets, automatic local backups, PDF export, downloadable reading texts.
Card slots. Every user starts with 50 card slots. Upgrading to Pro adds a one-time +250 bonus, raising the limit to 300. To go further, buy expansion card packs (250 / 500 / 750 / 1000) as one-time consumable purchases — each adds its slots permanently, for free and Pro users alike. The limit is enforced at create, import, and sync time.
VocabTrain does not collect, transmit, or share any personal data. There are no analytics, no third-party crash reporting, no advertising IDs.
Network use is limited to:
djvlk.de (cached 24h)Email: agrauf67@gmail.com
Anonymous feedback form: open Help & Support in the app and tap Send anonymous feedback — no email required. Your app version, Android version, and device model are attached automatically so reports arrive with useful diagnostics.
Source code: github.com/agrauf67/vocabulary-trainer
App Store: apps.apple.com/.../vocabtrain
Google Play: play.google.com/.../vocabularytrainer
Copyright © 2026 Andreas Grauf. All rights reserved.