Word Hunter is a desktop reader and vocabulary-learning tool designed to help users enhance their language skills by importing texts, ebooks, subtitles, and PDFs, saving words with context, and reviewing them through flashcards and spaced repetition. The software stores all data locally, ensuring privacy and control over learning materials.
Key Features:
Import Diverse Text Formats: Supports importing various files including ebooks, subtitles, and PDFs for comprehensive vocabulary acquisition.
Flashcard System with Spaced Repetition: Utilizes effective spaced repetition to reinforce memory retention of new words.
Local Data Storage: Keeps all user data securely on the device, promoting privacy and self-control over information.
OCR Support for PDFs: Extracts text from scanned documents using local OCR capabilities without needing external services.
Available via Winget: Easily install or deploy Word Hunter using the Windows Package Manager command line.
Target Audience and Benefits:
Ideal for language learners seeking to improve vocabulary retention through contextual learning, Word Hunter offers a user-friendly interface and efficient review mechanisms. Its local-first approach ensures users maintain full control over their data, making it perfect for those prioritizing privacy and self-directed learning.
README
Word Hunter
Read real texts. Save words with context. Review them on your terms.
Word Hunter is a local-first reader and vocabulary trainer for Windows, macOS,
Linux, and Android. The Android app is called Word Hunter Pocket.
The project is built around one idea: read real texts, click words you want to
learn, keep the context, and review them later without losing control of your
data.
> [!TIP]
> New here? Install the current stable release, open a text, and click an
> unfamiliar word. No account or cloud setup is required.
Download and install
The recommended version for new users is
Word Hunter 1.0.9.
Choose your platform below. All direct downloads come from the official GitHub
Release.
Version 1.0.9 replaces background folder synchronization with explicit,
reviewable ZIP transfer packages and brings reliability, security, and UX
fixes to desktop and Android. Existing vocabulary migrates automatically.
# Linux x86_64 — project-maintained Homebrew tap
brew install --cask Ironship/wordhunter/wordhunter
# Linux — install a downloaded Flatpak bundle
flatpak install --user ./WordHunter.flatpak
# Linux — run a downloaded AppImage
chmod +x WordHunter-1.0.9-x86_64.AppImage
./WordHunter-1.0.9-x86_64.AppImage
# Debian/Ubuntu — install the downloaded DEB
sudo apt install ./word-hunter_1.0.9_amd64.deb
First launch on macOS
The DMG is signed ad hoc and is not notarized with an Apple Developer ID:
Open the DMG and drag Word Hunter to Applications.
Try to open Word Hunter once.
Open System Settings → Privacy & Security.
In Security, choose Open Anyway and confirm the launch.
First 5 minutes
Choose the language you are learning. Each language gets its own library and
vocabulary profile.
Add something to read: paste text, import a file, open a public-domain book,
or add a supported URL.
Click or tap an unfamiliar word. Save its status, translation, note, or
example sentence in the word panel.
Continue reading. Your saved words remain highlighted in context.
Open Word Base to manage vocabulary or Flashcards to review due words.
You can start locally and move data later with a ZIP transfer package from the
Export view. No account, shared folder, or background service is required.
Prerelease: none. Version 1.0.9 is the current stable release.
Upgrading an older installation
Versions older than 1.0.0 predate the current storage compatibility
baseline. Export a backup before upgrading.
Version 1.0.9 no longer reads or writes old Syncthing folders. To move
data, export a ZIP transfer package on the source device and import it on
the target.
If Android reports an incompatible signature when moving from an early 1.0.7
test APK, export a backup before uninstalling.
Uninstalling an Android app clears its local app data.
Supported learning languages
Word Hunter keeps a separate library and vocabulary profile for each learning
language:
<img src="src/web/flags/en.svg" width="24" /> English
<img src="src/web/flags/de.svg" width="24" /> German
<img src="src/web/flags/es.svg" width="24" /> Spanish
<img src="src/web/flags/it.svg" width="24" /> Italian
<img src="src/web/flags/fr.svg" width="24" /> French
<img src="src/web/flags/pl.svg" width="24" /> Polish
<img src="src/web/flags/uk.svg" width="24" /> Ukrainian
<img src="src/web/flags/ru.svg" width="24" /> Russian
<img src="src/web/flags/ja.svg" width="24" /> Japanese
<img src="src/web/flags/zh.svg" width="24" /> Chinese (Simplified)
<img src="src/web/flags/la.svg" width="24" /> Latin
<img src="src/web/flags/grc.svg" width="24" /> Ancient Greek
<img src="src/web/flags/other.svg" width="24" /> Other
A custom-language profile with configurable source and target translation codes.
Translation, TTS, catalog, and offline-model availability can vary by language
and provider. The named languages include built-in original stories and A1-B2
course books; the Other profile has none. Set its source and target language
codes under Translator & Dictionary settings before using automatic translation.
Feature tour
Themes
Settings offers Familiar, Alternative familiar, and Word Hunter Classic themes.
Familiar is the default and uses a cool blue palette. Alternative familiar uses
aubergine and orange. Both follow the system light/dark preference; Classic
preserves the previous Word Hunter appearance and also provides explicit light
and dark variants. Existing theme preferences are migrated without changing
books, vocabulary, or reading progress.
Library, Import, and OCR
The library collects imported texts, public-domain books, OCR/PDF entries, and
reading progress in one place. Desktop keeps the full import workflow visible,
including pasted text, ebooks, subtitles, and scanned PDF/OCR imports.
Desktop packages use the bundled local OCR runtime and models; users do not need
to install an OCR engine or language pack. Pocket uses Android's application and
PDF capabilities locally. Documents are not sent to a new remote OCR service.
OCR can be cancelled, and recognized page text can be corrected while reading
without replacing the original PDF or page overlay.
Encrypted, corrupt, unsupported, or empty PDFs can still be rejected. A damaged
desktop package with a missing OCR runner or model reports that packaging/runtime
problem instead of silently returning an incomplete OCR result.
Word Hunter Pocket shows the same kind of library in a phone layout. Pocket is
optimized for reading and review on Android, with a compact card list, large
touch targets, collapsible search filters, and a side import drawer for lighter
mobile imports.
"
Reader, Highlighting, and Word Panel
The reader highlights vocabulary by status directly in the text. Clicking a word
opens the word panel with status buttons, translation, notes, context, dictionary
actions, TTS, image hints, and in-text review controls.
Pocket keeps the same reading model, but changes the shape for mobile: bottom
navigation, touch selection, a compact toolbar, and a bottom sheet-style word
panel.
Word Base
Every saved word keeps its status, translation, example sentence, review data,
and source context. The word base is the maintenance view for searching,
filtering, editing, exporting, and cleaning vocabulary.
Flashcards and SRS
Flashcards use the same vocabulary records as the reader. Word Hunter supports
spaced repetition, due queues, review history, pronunciation, dictionary
actions, reverse cards, and rating buttons.
Pocket keeps flashcard review usable on a phone, with the card, answer controls,
review heatmap, and queue adapted to the narrow screen.
Graphs and Progress
The graphs view turns vocabulary history into visible progress: total cards, due
reviews, mature cards, active review cards, heatmap activity, and vocabulary
growth levels.
The same progress view is available in Pocket, so review activity and vocabulary
growth remain visible away from the desktop.
Desktop and Pocket transfers
Word Hunter is local-first. Desktop and Android can move custom texts, user
books, vocabulary, settings, progress, and imported reading materials through a
ZIP transfer package. The package includes book images, including rendered PDF
pages, so imported books remain usable in Pocket.
Desktop
Pocket
Pocket intentionally keeps heavy import work lighter than desktop. Larger
conversion and OCR work is best done on desktop, then moved to Pocket with a
full transfer package.
Exports, imports, and backups
Word Hunter does not require an account or a central server. The app stores data
locally and creates portable ZIP packages only when requested.
Export everything includes books, rendered PDF images, vocabulary,
settings, and progress.
Export words creates a smaller package containing vocabulary only.
Export to Anki remains available for flashcard workflows.
Import merges records using the updatedAt value stored inside each YAML
record; filesystem modification times are ignored.
A newer incoming word or book replaces an older local record. The local record
wins when timestamps are equal.
Every word is stored as its own YAML record, and every transferred book has a
book.yaml plus its image folder.
Android uses the system file picker for both saving and opening packages, so
Word Hunter never needs broad storage access.
Clearing local data first requires a successfully saved full transfer package.
For contributors
End users do not need any of the tools below. This section is for contributors
who want to validate or package the application from source.
Requirements
Rust 1.88 or newer with Cargo.
Node.js 22 or newer for frontend and packaging validation tests.
npm dependencies installed with npm ci for CSS checks and the TypeScript build.
Tauri 2 native prerequisites for the desktop platform being built.
PowerShell when using the bundled scripts\build.bat helper on Windows.
Android SDK, NDK, and JDK for Android Pocket builds.
Apple Silicon macOS for the DMG build.
Python 3 and curl when refreshing or checking Flatpak Cargo sources.
OCR runtime/model assets only when preparing desktop OCR support.
Common commands
Install the pinned validation dependencies after checkout:
npm ci --ignore-scripts --no-audit --no-fund
Then run the full repository gate:
./scripts/validate.sh
It runs git diff --check, JSON/i18n parsing, Stylelint, a deterministic
TypeScript frontend build and type check, frontend tests against dist/web, Flatpak
cargo-sources.json drift detection, Rust formatting, Rust tests for the main
Tauri crate and OCR runner, and blocking cargo clippy checks by default.
.\scripts\build.bat test # run shared, desktop, and Android frontend tests
.\scripts\build.bat installer # build outputs\Word.Hunter.Setup.exe
.\scripts\build.bat portable # build outputs\Word.Hunter.portable.zip
.\scripts\build.bat apk # build APK; WH_ANDROID_* signs an update-compatible package
.\scripts\build.bat aab # build outputs\Word.Hunter.Pocket.release.aab
.\scripts\build.bat play # build signed Google Play AAB
.\scripts\build.bat ocr-runtime # prepare bundled native PaddleOCR runtime
On Apple Silicon macOS, build and validate the DMG with:
./scripts/build-macos.sh
It writes outputs/WordHunter--aarch64.dmg. The current recipe
uses an ad-hoc signature, so macOS may require approval in Privacy & Security
after download. A Developer ID certificate and notarization are still required
for a warning-free public install.
Rust backend tests can also be run directly:
npm run build:frontend
cargo test --manifest-path src-tauri\Cargo.toml
Android Pocket release builds derive versionName and monotonic versionCode
from stable or -rc.N SemVer values in src-tauri/tauri.conf.json. Stable
builds sort after every release candidate for the same version; see
docs/release-validation.md before changing the release version scheme.
Flatpak
Linux Flatpak packaging is available through flatpak-builder:
The script installs missing Flatpak SDK dependencies from Flathub when needed,
builds the manifest in com.wordhunter.app.yml, and writes
outputs/WordHunter.flatpak. Install from the generated local repo for desktop
testing so software stores can read the local AppStream metadata and icons.
Word Hunter uses the GNOME Flatpak runtime because Tauri depends on
GTK/WebKitGTK; on KDE Plasma the script also installs the Breeze GTK theme
extension when needed so the GTK/WebKit window follows KDE
styling. The Flatpak disables WebKitGTK's DMABUF renderer to avoid known
Wayland renderer crashes on some KDE/Mesa setups while still keeping Wayland
enabled. After changing src-tauri/Cargo.lock, refresh the vendored Cargo source
list with:
./scripts/update-flatpak-cargo-sources.sh
To check for drift without rewriting the file, run:
./scripts/update-flatpak-cargo-sources.sh --check
The build script writes distributable files to outputs/. That directory is
generated output, not source.
Repository layout
src/web/ - shared frontend application code.
dist/web/ - generated, untracked browser JavaScript and copied web assets.
src/web/js/reader/ - focused reader session, rendering, word navigation, PDF
page text, and OCR correction modules.
src/web/platforms/ - platform-specific frontend styling and behavior.
frontend-tests/ - Node-based frontend and platform tests.
docs/ - public documentation and screenshots.
.cargo/ - Cargo configuration used by the workspace.
scripts/build.bat - Windows convenience entrypoint for tests and release artifacts.
Technology and third-party licenses
Word Hunter uses a Rust backend and a shared HTML/CSS/TypeScript interface in a
Tauri 2 shell. Windows uses WebView2, Linux uses WebKitGTK/GTK, and Pocket uses
Android System WebView. Desktop translation and OCR can use CTranslate2,
SentencePiece, PaddleOCR through ONNX Runtime, PDFium, and platform execution
providers. OCR uses DirectML on Windows and WebGPU/Vulkan on Linux, with a safe
CPU fallback. The Flatpak routes file dialogs through XDG Desktop Portal and can
use the active GTK theme extension, so KDE sessions receive
their portal dialogs and the matching Breeze GTK styling when that extension
is installed.
Word Hunter data is stored as individual YAML record files; small internal UI
state and recovery journals remain JSON. The application does not use SQLite.
The built-in scheduler is Word Hunter's own
implementation inspired by published SM-2 and FSRS concepts, not the official
FSRS library or the proprietary SuperMemo application.
The shared WebView UI is an explicit architecture choice for feature and
accessibility parity across desktop and Pocket. TypeScript owns DOM rendering and
latency-sensitive interaction state. Rust owns storage merge/recovery, parsing,
local HTTP validation, and desktop OCR, while the Android adapter owns SAF and
platform PDF boundaries. CPU-heavy frontend statistics use workers and explicit
caches instead of moving DOM work across the bridge.
The project license is in LICENSE. Principal native components, model sources,
service integrations, exact source links, and redistribution terms are listed in
THIRD-PARTY-NOTICES.md. Full license texts for the locked Rust dependency
graphs are generated into THIRD-PARTY-LICENSES.html and
OCR-THIRD-PARTY-LICENSES.html; all four files are included in release packages.
After changing either Rust lockfile, install cargo-about and refresh the
reports with ./scripts/update-third-party-licenses.sh.
License
Word Hunter is licensed under AGPL-3.0-or-later.
Closed-source commercial derivative use requires a separate written commercial
license. See COMMERCIAL-LICENSE.md for details.
Development note
Much of the frontend was developed with AI assistance. I am not a frontend
developer; Word Hunter grew from scripts I had used for years into an app I use
every day. The goal is to keep it free, useful, and independent of mandatory
cloud accounts or paid services. Feedback, bug reports, and contributions are
welcome.