// the find
ankitects/anki
Anki is a smart spaced repetition flashcard program
Anki is the reference implementation of spaced repetition flashcard software, used by millions of students and professionals for long-term memorization. The desktop client is the authoritative version — mobile apps and AnkiWeb sync against it. If you need to understand how SRS actually works in production code, this is the repo to read.
The FSRS (Free Spaced Repetition Scheduler) implementation replaces the older SM-2 algorithm with a modern ML-derived model that genuinely outperforms it on retention prediction — this is a real research contribution, not a marketing claim. The architecture splits core logic into a Rust library that both the desktop client and the self-hostable sync server consume, so the algorithm is tested once and trusted everywhere. The build system uses a custom Ninja generator written in Rust, which is unconventional but results in reproducible, fast builds across Windows/Mac/Linux without the usual CMake hell. Add-on ecosystem is mature — hooks and filters are well-documented and stable across versions, which is rare for a desktop app.
The polyglot stack (Rust core, Python/Qt frontend, TypeScript for card templates, protobuf for the bridge) makes onboarding genuinely painful — you need four separate toolchains working correctly before you can build anything, and the custom build runner adds another layer that isn't standard tooling anyone already knows. The Python layer is effectively legacy at this point but can't be dropped without breaking the entire add-on ecosystem, so you're carrying that weight indefinitely. AnkiWeb sync is a proprietary service with no documented protocol beyond the self-hosted sync server source, meaning third-party clients have to reverse-engineer it or depend on the reference implementation. The Qt frontend shows its age — styling is inconsistent, and the card browser in particular feels like a 2010 desktop app that got incremental patches rather than a coherent redesign.