The most time-efficient language-learning app
27
stars
681
commits
HTML
primary language
Sep 7, 2026
updated
A Modern, Spaced-Repetition Language Learning App
Check it out on yap.town!
Join the community on Discord.
Yap's goal is to be the #1 most effective language learning app.
The idea is basically to combine Anki-style spaced repetition with comprehensible input. You add vocabulary to your deck, like any flashcard app. But Yap has a corpus of sentences, and can show you a sentence containing the word you need to review. You review the whole sentence by translating it or listening to it, and then Yap records what you got right and what you got wrong. It then figures out what you got right and what you didn't, and feeds all of that back into the spaced repetition system. That way it can always prompt you to review exactly what and when you need to!

I have a seemingly endless supply of sentences to translate containing words at my level with immediate feedback. Amazing. I’ve used Duolingo in the past, but it often felt like rote memorization of sentences that I’d never actually use. I’ve used Anki too, but sentence practice isn’t as granular as Yap Town. I think there’s really something special here and I‘d definitely recommend it to anyone interested in learning a new language.
– Jarret (Yap user)
Most apps are optimized for engagement or are otherwise poorly designed, making them very ineffective. Language learning apps typically have two main flaws.
Spaced repetition is the #1 most important thing a language learning app could possibly provide. It is the foundation of time-efficient focused study. Yet most language-learning tools relegate it to a curiosity in an out-of-the-way section of the app, if they make use of it at all!
In other apps, the order that words are taught in is also very inefficient. The most common words like "to", "from", "of", "I", "who", "that", and so on are the most common, so they should be learned first. But apps spend time teaching you how to say sentences like "the man is eating an apple", even though words like "man", "eating", and "apple" are incredibly rare by comparison.
You can do much better than most people by creating Anki decks with vocabulary words. But the issue with that is you lose a major benefit of Duolingo, which is seeing words in their natural sentence context. Without this context, it becomes much harder to recall words when seeing them in sentences rather than isolated in an Anki deck.
Yap solves this problem by implementing spaced repetition through sentences containing the target word, and asking users to translate the entire sentence. A side-benefit is that upon successful translation, we can mark every word in the sentence as having been successfully repeated. (Even if you mistranslate a word that wasn't the intended focus of the repetition, we can still log that data, ultimately providing much more data to the SRS and much better practice than a typical Anki session would.)
This part will be a little more technical. The app does not do spaced repetition at the level of words. Instead, it works on the level of Vector<(word, lemma, part of speech)>. This allows the spaced repetition system to more intelligently schedule sentences.
The words that Yap chooses to introduce are initially based on which words are most common. As you use Yap, it builds a model using isotonic regression to assess how difficult you find words based on their frequency. If you consistently find the shown words easy, Yap will begin introducing rarer words to identify vocabulary you don't already know. This approach allows Yap to quickly adapt to your existing skill level and reduces time wasted on reviewing words you know from outside of Yap.
Of course, in addition to being the most effective language learning app, I couldn't live with myself if I didn't think that Yap was also just a generally pleasant app to use. To that end, there are some features of Yap that I'm proud of that set it apart from most other apps on the internet.
Build the rust library
cargo bridgerton web --package yap-frontend-rs
Then, run the page
cd yap-frontend
pnpm i
pnpm dev
There is also a supporting backend, normally assumed to be at https://yap-ai-backend.fly.io. But if you build the rust library with --features local-backend, it will look for the server on localhost:8080. You can then run the server locally with cd yap-ai-backend && cargo run.
The data in out/ is generated via the generate-data binary.
cargo run --bin generate-data --release
Each individual step writes artifacts to a file in the out/ directory, for you to inspect. LLM calls are cached in the .cache directory. This allows you to rerun a step without spending a ton of money.
The NLP is extremely slow. It runs on lexide's Modal endpoint (currently an A100-80GB serving the fine-tuned model via vLLM).
The NLP model used by Yap (lexide) is trained from data in this repo. See libraries/clean-nlp-data for setup (spaCy model installation) and usage.
Accounts and cross-device sync use supabase as a backend. Migrations are in the supabase/ folder. Onesignal is used for notifications.
You can connect Yap to your LLM provider of choice using the following MCP server: https://mcp.yap.town/mcp
The Open Spaced Repetition group
Soon... Pronunciation grading with a custom audio → phoneme model! I'm very excited about this, because with my model I can actually represent things like Japanese pitch accent and French's unusual stress patterns.
681 commits
HTML
73.1%
Rust
20.7%
TypeScript
4.1%
The most time-efficient language-learning app
27
stars
681
commits
HTML
primary language
Sep 7, 2026
updated
A Modern, Spaced-Repetition Language Learning App
Check it out on yap.town!
Join the community on Discord.
Yap's goal is to be the #1 most effective language learning app.
The idea is basically to combine Anki-style spaced repetition with comprehensible input. You add vocabulary to your deck, like any flashcard app. But Yap has a corpus of sentences, and can show you a sentence containing the word you need to review. You review the whole sentence by translating it or listening to it, and then Yap records what you got right and what you got wrong. It then figures out what you got right and what you didn't, and feeds all of that back into the spaced repetition system. That way it can always prompt you to review exactly what and when you need to!

I have a seemingly endless supply of sentences to translate containing words at my level with immediate feedback. Amazing. I’ve used Duolingo in the past, but it often felt like rote memorization of sentences that I’d never actually use. I’ve used Anki too, but sentence practice isn’t as granular as Yap Town. I think there’s really something special here and I‘d definitely recommend it to anyone interested in learning a new language.
– Jarret (Yap user)
Most apps are optimized for engagement or are otherwise poorly designed, making them very ineffective. Language learning apps typically have two main flaws.
Spaced repetition is the #1 most important thing a language learning app could possibly provide. It is the foundation of time-efficient focused study. Yet most language-learning tools relegate it to a curiosity in an out-of-the-way section of the app, if they make use of it at all!
In other apps, the order that words are taught in is also very inefficient. The most common words like "to", "from", "of", "I", "who", "that", and so on are the most common, so they should be learned first. But apps spend time teaching you how to say sentences like "the man is eating an apple", even though words like "man", "eating", and "apple" are incredibly rare by comparison.
You can do much better than most people by creating Anki decks with vocabulary words. But the issue with that is you lose a major benefit of Duolingo, which is seeing words in their natural sentence context. Without this context, it becomes much harder to recall words when seeing them in sentences rather than isolated in an Anki deck.
Yap solves this problem by implementing spaced repetition through sentences containing the target word, and asking users to translate the entire sentence. A side-benefit is that upon successful translation, we can mark every word in the sentence as having been successfully repeated. (Even if you mistranslate a word that wasn't the intended focus of the repetition, we can still log that data, ultimately providing much more data to the SRS and much better practice than a typical Anki session would.)
This part will be a little more technical. The app does not do spaced repetition at the level of words. Instead, it works on the level of Vector<(word, lemma, part of speech)>. This allows the spaced repetition system to more intelligently schedule sentences.
The words that Yap chooses to introduce are initially based on which words are most common. As you use Yap, it builds a model using isotonic regression to assess how difficult you find words based on their frequency. If you consistently find the shown words easy, Yap will begin introducing rarer words to identify vocabulary you don't already know. This approach allows Yap to quickly adapt to your existing skill level and reduces time wasted on reviewing words you know from outside of Yap.
Of course, in addition to being the most effective language learning app, I couldn't live with myself if I didn't think that Yap was also just a generally pleasant app to use. To that end, there are some features of Yap that I'm proud of that set it apart from most other apps on the internet.
Build the rust library
cargo bridgerton web --package yap-frontend-rs
Then, run the page
cd yap-frontend
pnpm i
pnpm dev
There is also a supporting backend, normally assumed to be at https://yap-ai-backend.fly.io. But if you build the rust library with --features local-backend, it will look for the server on localhost:8080. You can then run the server locally with cd yap-ai-backend && cargo run.
The data in out/ is generated via the generate-data binary.
cargo run --bin generate-data --release
Each individual step writes artifacts to a file in the out/ directory, for you to inspect. LLM calls are cached in the .cache directory. This allows you to rerun a step without spending a ton of money.
The NLP is extremely slow. It runs on lexide's Modal endpoint (currently an A100-80GB serving the fine-tuned model via vLLM).
The NLP model used by Yap (lexide) is trained from data in this repo. See libraries/clean-nlp-data for setup (spaCy model installation) and usage.
Accounts and cross-device sync use supabase as a backend. Migrations are in the supabase/ folder. Onesignal is used for notifications.
You can connect Yap to your LLM provider of choice using the following MCP server: https://mcp.yap.town/mcp
The Open Spaced Repetition group
Soon... Pronunciation grading with a custom audio → phoneme model! I'm very excited about this, because with my model I can actually represent things like Japanese pitch accent and French's unusual stress patterns.
681 commits
HTML
73.1%
Rust
20.7%
TypeScript
4.1%