Build syntax
muscle memory.

A code typing trainer that finds the exact Rust tokens slowing you down — the ones you mistype, and the ones you type correctly after a visible pause — then drills those. Everything runs and stays in your browser.

  • No login required
  • Nothing uploaded
  • MIT licensed

What it measures that a typing test does not

Words per minute averages your easy characters together with your hard ones, which is exactly the information you need separated. These four numbers keep them apart.

Hesitation, not just mistakes
A token typed correctly after a 480ms pause is a token you have not learned — you have learned to look it up quickly. Every keystroke is timed, so that shows up.
Keystroke accuracy
Mistyping the same => five times costs five keystrokes, not one. Position-based accuracy hides exactly the flailing worth seeing.
Consistency
The evenness of your rhythm. Bursts separated by stalls score low even at a high average speed — the clearest sign syntax is still in your head.
Per-token mastery
A miss rate for each token across your whole history, and a review queue that schedules snippets by what you actually get wrong.

Three modes, one comparable score

The text you type is identical in all three. Only how much of it stays on screen changes, so your results stay comparable as the difficulty rises.

Copy
The whole snippet is visible. For building the motion.
Gap
Key tokens are blanked out. You recall the syntax instead of reading it.
Recall
Only the signature line stays. You rewrite the body from memory.

111 snippets across 17 packs

Structs and enums, pattern matching, Option and Result, borrowing, lifetimes, traits, generics, iterator chains, error handling, closures, smart pointers, strings, async, modules and tests — then algorithms, from binary search to union-find. You can also paste your own code and it gets the same analysis.

  • Rust Basics
  • Option / Result
  • Enum / Match
  • Borrowing
  • Lifetimes
  • Collections
  • Iterator Chains
  • Traits
  • Generics
  • Error Handling
  • Closures
  • Smart Pointers
  • Strings
  • Async Rust
  • Modules & Tests
  • DSA Rust
  • DSA Advanced

Browse the library or read the order worth learning them in.

Local-first, including the trade-offs

Sessions, custom snippets and settings live in your browser’s localStorage. There is no account, no server-side database, and no analytics on what you type. Even the challenge link carries its snippet in the URL fragment, which browsers never send to a server.

The honest cost: clearing your browser data deletes your history, and nothing follows you to another device. The History page has a manual export for that reason — it does not sync by itself, because there is nothing to sync to.