Qwerty Learner: a typing trainer that makes you retype every word you get wrong
为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers
At a glance
- What is it?
- Qwerty Learner is a React web app that combines vocabulary drilling with keyboard muscle memory training, aimed at people who type English all day. Its design rule is simple: a mistyped word must be typed again before you move on.
- Who is it for?
- Adopt Qwerty Learner if you already read English well but type it slowly, and you want vocabulary drilling and keystroke practice in one session. Do not adopt it if you need a mobile app, a login-backed cloud sync service, or a typing course that teaches finger placement from scratch.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 21 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The gap Qwerty Learner targets: fast in your native language, slow in English
The README states the design goal directly: the software is built for keyboard workers who use English as their main working language. The problem it names is asymmetry. Years of typing in a native language build strong muscle memory, while English input memory stays comparatively weak, so people who type quickly in their own language stall on English words. The README describes this as a "提笔忘字" effect in English input, roughly the feeling of reaching for a word and losing it.
The second half of the pitch is vocabulary. Memorising word lists is a separate, ongoing chore, and the project's answer is to fuse the two activities so that reciting a word and typing it happen in the same repetition. The README also notes the software can help people preparing for computer-based English exams, and that it ships word lists for programmers, including common coding vocabulary and API lists for several languages.
That framing matters because it sets the audience. This is not a beginner typing tutor. It assumes you already touch-type and want to convert that skill into English-specific speed and recall.
How the retyping rule and chapter flow actually work
The central mechanism described in the README is an error rule: if the user types a word incorrectly, the word must be entered again. The stated reason is to avoid building incorrect muscle memory, so the app trades speed of progress for correctness of repetition. That is a deliberate design choice, and it is the clearest thing separating Qwerty Learner from a general typing test, where a wrong keystroke is simply counted and you move on.
Around that rule sit several features the README lists. Practice is organised into chapters, and when a chapter finishes the app offers a dictation mode (默写模式) for that chapter, so the words can be recalled without the prompt. Phonetic transcription and audio playback are shown alongside each word, so pronunciation and spelling are practised together. Speed and accuracy are displayed, which the README frames as making progress visible rather than a score to chase.
The word library is the other half of the mechanism. Built-in lists cover CET-4, CET-6, GMAT, GRE, IELTS, SAT, TOEFL, 考研英语, 专业四级英语 and 专业八级英语, plus 高考, 中考, business English, BEC, 人教版英语 grades 3 to 9, a 王陆雅思王听力语料库 list, Japanese common words and N1 to N5, and a Kazakh basic 3000-word list. API lists exist for JavaScript, Node.js, Java, Linux commands, and C# List. The README says API lists depend mainly on community contributions and points to an issue and a pull request as the contribution path.
Running Qwerty Learner locally with yarn
The README states the project is built with React and needs a Node environment. It lists three prerequisites: NodeJS, Git and Yarn. The repository also provides pre-check scripts, scripts/pre-check.ps1 for Windows and scripts/pre-check.sh for macOS, which the README says verify the environment and install missing dependencies automatically. The manual route is four steps, and the commands below are copied from the README.
First clone the repository. The README warns that skipping git may leave dependencies missing.
git clone https://github.com/RealKai42/qwerty-learner.git
cd qwerty-learner
yarn installThen start the development server. The README gives the default address as http://localhost:5173/, so that is what you should open in the browser.
yarn startOn Windows the README offers a one-shot script, run from the scripts directory in PowerShell. It notes the script depends on winget, which is only supported on Windows 10 version 1709 (build 16299) or later.
.\install.ps1On macOS the equivalent script is run from the project folder. The README notes it depends on homebrew, so the brew command must be available.
scripts/install.shIf you would rather not install a toolchain, the repository ships a Dockerfile and a docker-compose.yaml. The compose file builds the image and maps host port 8990 to container port 5173.
docker compose upThe Dockerfile itself is worth reading before you build: it sets the npm registry to https://registry.npmmirror.com and runs npm install and npm run build, then copies the build output into an nginx:alpine stage using ./public/default.conf. If your network cannot reach that mirror, the build step is where it will fail.
Where Qwerty Learner is the wrong tool
The retyping rule is also the main limitation. If your goal is raw typing speed on arbitrary text, being forced to repeat a word after a single wrong keystroke interrupts the rhythm you are trying to build. A speed-focused drill wants uninterrupted runs and a summary at the end; Qwerty Learner wants correctness first. That is not a defect, but it means the app measures vocabulary recall and English keystroke accuracy, not general typing throughput.
The README is also explicit that the project is in an early stage of development and that new features are being added, with plans described in an issue thread. Treat the feature set as moving. The README does not document rollback behaviour, a stable data schema, or a migration path for stored progress, so plan around that uncertainty rather than assuming your history is portable.
Coverage is another boundary. The README lists the built-in dictionaries and invites requests for others in an issue. If the language or word list you need is not in that list, the app is not useful to you until someone contributes it. The README also says new API dictionaries depend on community contributions, so the API lists are uneven by nature rather than a complete reference for any language. Finally, the README does not mention a mobile or iOS application, so anyone looking for one should not expect it here.
Qwerty Learner versus Keybr: real words against generated pseudo-words
The README names Keybr as the project's core inspiration, and the comparison is instructive because the two solve different halves of the same problem. Keybr, as described in the README, is known for its algorithm: it tracks the accuracy and speed of each letter you type and generates pseudo-English text so you drill the specific letters you are slow on, then produces an analysis report from your input history.
Qwerty Learner inverts that. It does not generate text; it uses real word lists, and its stated concern is that pseudo-English does not improve a non-native speaker's grasp of actual vocabulary. So Keybr optimises the motor skill across the alphabet, while Qwerty Learner optimises recall of specific words you are likely to need, at the cost of narrower letter coverage.
The README also frames the audience difference plainly: Keybr is aimed more at native English speakers. If your bottleneck is that you fumble certain keys regardless of language, Keybr's per-letter approach matches that problem. If your bottleneck is that you know the word but cannot produce it quickly, Qwerty Learner's word-level repetition matches that one.
Licence, maintenance and what upgrading costs you
The project is licensed under GPL-3.0, and the LICENSE file sits at the repository root. For anyone running it locally as a study tool, this changes nothing. If you plan to fork it, embed it in a product, or ship the VSCode extension variant, read the licence terms yourself, since GPL-3.0 carries obligations that permissive licences do not. Nothing here is legal advice.
On activity: the repository is not archived, and the last push was on 2026-09-08. That is recent, and the README's own statement that the project is in an early stage and adding features is consistent with it.
The dependency surface is the real upgrade cost. package.json pins a React 18 stack with Radix UI primitives, Headless UI, Tailwind, Jotai, Immer, SWR, Dexie and dexie-react-hooks, ECharts, Howler, and TypeScript 4.x, among others. Dexie is the local persistence layer and dexie-export-import is present for moving that data, which is the part to check before you invest in a long practice history. Upgrading this stack is not a one-line change, and there are no retrieved releases to pin to, so a fork inherits the full dependency graph rather than a versioned artifact.
Editorial conclusion
Adopt Qwerty Learner if you already read English well but type it slowly, and you want vocabulary drilling and keystroke practice in one session. Do not adopt it if you need a mobile app, a login-backed cloud sync service, or a typing course that teaches finger placement from scratch. Before you commit, verify two things yourself: that the VSCode extension listed in the README still installs on your editor version, and that your target word list exists in the built-in library, since the README lists the available lists and adds that new ones arrive through community contributions.
Frequently asked questions
What does QWERTY mean?
The README does not define the term. In this project the name refers to the standard keyboard layout, and the software is described as a word memorisation and English muscle memory training tool designed for keyboard workers.
How is QWERTY arranged?
The README does not describe the physical layout of the keyboard. It only uses the term in the project's name and in its description of the target audience, keyboard workers who use English as their main working language.
What is the QWERTY keyboard also called?
The README does not give alternative names for the keyboard. It refers to the project itself as Qwerty Learner, a React application for word memorisation and English muscle memory training.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/realkai42-qwerty-learner)
Community notes