ByteScope

Type Quest

Type real code — and watch it come alive next to you.

Your files never leave your browser — all processing is local.

Pick a project — type it, watch it come alive. Progress is stored only in your browser.

language

clock

JS

bounce

JS

counter

JS

loader

CSS

card

CSS

stopwatch

JS

breakout

JS

orbit

TS

python

Python· typing only (no preview)

c

C· typing only (no preview)

cpp

C++· typing only (no preview)

go

Go· typing only (no preview)

rust

Rust· typing only (no preview)

java

Java· typing only (no preview)

About this tool

Type Quest is code typing practice with a payoff: every lesson is a small, self-contained front-end project (a ticking clock, a bouncing-ball animation, a CSS loader…), and the code you type is the code that runs. On easier lessons the live preview grows as you type, line by line; on harder ones the finished project bursts onto the screen the instant you hit the last character. Either way you don't just finish a typing test — you finish a thing that works, and you can download it as a single HTML file you built keystroke by keystroke.

The typing engine keeps the numbers honest: no auto-skipping hard characters, backspace has a real cost, and the reported WPM is net WPM — errors you leave behind count against you. Leading indentation is handled automatically so you practice the characters that matter, not the space bar. A combo meter multiplies as you string correct keystrokes together, each correct character plays a note that climbs a pentatonic scale (combo raises the octave), and finishing a lesson earns you an 8-bit fanfare.

After every run you get an instrument-style result report — WPM curve over the session, per-key latency heatmap, slowest symbols, accuracy, peak combo — and your progress accumulates locally: best WPM per lesson, a growth curve across sessions, and the keys that slow you down most. All of it lives in your browser's localStorage; nothing is uploaded, there is no account, and one button wipes it all.

Boss lessons are the climax. Instead of a snippet you type one whole, runnable project while the boss fights back: telegraphed rush attacks you block by racing to a marked character, focus hexes you survive by typing error-free, screen shake, booby-trapped characters where the display deliberately lies, and an optional time limit. Your errors charge the boss's special attack; sustained high-combo typing charges yours. The preview stays locked until the final character — finishing the build is the killing blow, and the project you just typed defeats the boss on screen. Your combo also now drives the music itself: a percussion pulse carries your typing, higher combo tiers stack a bassline and melodic accompaniment on top (paced to your typing speed), and breaking the combo strips the song back to the bare pulse.

All lesson code is original, machine-generated for this site and licensed for practice — no third-party code is scraped or reused. Lessons are formatted with a consistent style and verified to parse and run before they ship.

Type Quest now spans more than front-end code. TypeScript lessons are fully runnable — you type the typed source and the live preview runs its offline-transpiled JavaScript. Python, C, C++, Go, Rust and Java are typing-only: browsers can't execute them, so there's no live preview and the play screen says so plainly — the reward is the typing practice itself, on idiomatic, difficulty-scaled snippets (a Go worker pool over channels, a Rust generic stack with lifetimes and match, a Java stream pipeline, C++ templates and the STL, and so on). Each language is typed in its own house style — 4-space indentation, or Go's gofmt tabs, which the engine auto-skips as leading indentation exactly like spaces, so you never type them. Because no in-browser parser can validate these languages the way it checks the web lessons, every typing-only snippet is hand-reviewed before it ships, and a language filter above the lesson list lets you jump straight to the one you want.

The lesson library is also a map: every project type is a region with its own difficulty ladder, and clearing a step opens the next one in that region — you never have to master one region before exploring another. The boss lessons (The Chrono Keeper, The Brick Warden) sit as themed gates on that map: a boss unlocks once you've cleared at least one lesson in every region leading up to it, and — where more than one boss guards the same stretch of the journey — once the previous boss has fallen. Every lesson you clear, boss or not, is added to your collection gallery as a card with your best stats and the actual runnable project: run it again (one live preview at a time, so the page stays fast), open it full-size, download it as HTML, or replay the lesson from scratch.

Diagnosis closes into training. The Progress tab draws a keyboard-shaped heatmap of every key across all your sessions — orange fill for keys slower than your own baseline, magenta border for error-prone ones (a key needs a minimum number of attempts before it counts, so one early typo isn't a verdict). From that profile, Train weak keys recommends the lessons whose code hits your weak characters hardest, and tells you exactly why: which characters each lesson targets and your current error rate on them. Finish a recommended lesson and you get a before/after comparison on those keys, then watch the heatmap cool down over the following sessions. Lessons you've already cleared at their target WPM are skipped — the recommendations always point at something left to gain.

Long-term hooks round out the loop. A Daily Challenge picks the same lesson for every visitor on a given UTC calendar day — a deterministic hash of the date, no backend involved — records your result against that day, and shows how today's WPM compares to yesterday's plus your current streak of consecutive days. Clearing lessons, sweeping every difficulty of a project type, clearing every D5 lesson, defeating a boss, hitting a WPM milestone, keeping a 7-day streak, or training a flagged weak key back under 5% error all unlock achievement badges — a toast announces a new one immediately, and the Progress tab's Badges section keeps every earned badge listed with the date you got it. Every result screen (practice, boss, daily) and every achievement toast can also generate a shareable PNG result card — drawn entirely in your browser on a canvas, no upload involved — that downloads or hands off to your device's share sheet.

Frequently asked questions

What's the Daily Challenge?
Every UTC calendar day, a fixed hash of the date picks one lesson from the library — the same lesson for every visitor that day, with zero backend involved. Clear it once and your result is recorded against that day; replaying only keeps your best attempt. The Practice tab's Daily card shows today's result (if you've played), how it compares to yesterday's, and your current streak of consecutive days.
How do achievements/badges work?
A set of rules — first clear, sweeping every difficulty of a project type, clearing every D5 lesson, defeating each boss, 99%+ accuracy on a symbol-dense lesson, three WPM milestones, a 7-day Daily Challenge streak, and training a flagged weak key back under 5% error — are re-checked after every run. Newly-earned ones show a toast immediately and stay listed (with the date you earned them) on the Progress tab's Badges section; nothing here is ever revoked.
Can I share a result?
Yes — every result screen and achievement toast has a share/download button that draws a PNG card (lesson, WPM/accuracy/combo, a small WPM curve) entirely on your device using the canvas API, then either hands it to your device's share sheet (phones, mostly) or downloads it. Nothing is uploaded to generate it.
Is my typing data uploaded anywhere?
No. The typing engine, statistics, sound synthesis and the live preview all run in your browser. Progress (best WPM, session history, weak keys, sound preferences) is stored only in your browser's localStorage — there is no account and no server. A clear-data button removes everything.
How is WPM calculated?
Gross WPM is all keystrokes ÷ 5 per minute; net WPM subtracts the errors you left uncorrected. The report shows both, but rankings and your growth curve always use net WPM. Backspace is never free and hard characters are never skipped, so the numbers reflect real ability.
Do I have to type the indentation?
No — leading indentation is skipped automatically so you focus on the meaningful characters. This holds whether a lesson indents with spaces or with tabs (Go's gofmt style): the leading run of either is auto-skipped identically. Spaces inside a line, newlines (press Enter) and every symbol still have to be typed exactly. Spaces render as ·, newlines as ↵ and tabs as ⇥ so you can always see what's expected.
Which programming languages can I practice?
The runnable lessons cover front-end web code — JavaScript, CSS and TypeScript — where what you type builds a live, running preview (for TypeScript you type the typed source and the sandbox runs its offline-transpiled JavaScript). On top of those, Type Quest has typing-only lessons in Python, C, C++, Go, Rust and Java: browsers can't run those languages, so there is no live preview — the play screen collapses to a focused single-column typing view and says so honestly. They're still idiomatic, difficulty-scaled snippets, formatted in each language's house style (4-space indentation, or Go's gofmt tabs, which the engine auto-skips as indentation just like spaces). Because no in-browser parser validates them, every typing-only lesson is hand-reviewed before it ships. Use the language filter above the lesson list to jump straight to one.
Why does the live preview only appear at the end on some lessons?
Lessons at difficulty 1–2 render progressively while you type — you watch the project grow. Harder lessons hold the render until the moment you finish, so completing the lesson has a payoff moment. Half-typed code is often a syntax error anyway, so harder JS wouldn't render mid-way regardless.
Can I keep what I typed?
Yes — after finishing a lesson you can download the project you typed as a single self-contained HTML file that runs offline in any browser.
Where does the lesson code come from?
Every lesson is original code generated offline for this site (license: generated) — nothing is scraped from open-source projects, so there are no third-party copyright concerns. Each lesson is machine-checked to parse and actually run before it ships.
How do boss battles work?
A boss lesson is a complete runnable project typed under fire. The boss telegraphs attacks: block a rush by reaching the marked character before the deadline (speed), block a focus hex by making zero errors until the window closes (accuracy). Failed blocks cost you HP, your typos charge the boss's unavoidable special, and high-combo typing charges your own special burst. You win by finishing the project — the render is held until the last character, and your finished build lands the killing blow. Lose (HP zero or timeout) and the summary tells you exactly what got you, then offers a retry.
The code display showed a character that turned out to be wrong — a bug?
That's a typo trap, one of the boss's interference moves: in later phases the display deliberately lies about a single upcoming character (for example showing : where the code really has ;). Type what the code should be, not what the trap shows, and you dodge it; fall for it and you'll need a backspace to fix it — the notice under the code panel tells you when a trap resolved and what the lie was. Traps only exist in boss battles; free practice never lies to you.
What's the Map tab?
It shows the whole lesson library as a journey: each project type is a region with its own D1 → D3 → D5 ladder, and clearing a step opens the next one in that region — you don't need to finish one region before trying another. Boss lessons sit as gates: a boss unlocks once you've cleared at least one lesson in every region leading up to it, and once the previous boss has fallen if more than one guards the same stretch of the journey. A locked node always tells you exactly what unlocks it.
What's the Gallery / collection?
Every lesson you clear — regular or boss — is added to your collection as a card: your best WPM, accuracy and combo for it, plus the actual runnable project. Click the thumbnail to run it live (only one preview runs at a time, to keep the page fast); you can also open it full-size, download it as a standalone HTML file, or replay the lesson from scratch.
How does weak-key training work?
Every keystroke you type feeds a per-character record of errors and latency that accumulates across sessions in your browser. The Progress tab shows it as a keyboard-shaped heatmap — orange means slower than your own other keys, magenta means error-prone — and ranks the lesson library by how densely each lesson's code exercises your weak characters. The top recommendations appear as Train weak keys cards with the exact characters they target and your error rate on each; finishing one shows a before/after error-rate comparison on those keys. Lessons already cleared at their target WPM are excluded, so training always aims at a real gap.
Why is a key I mistype missing from the heatmap or the recommendations?
A character needs a minimum number of attempts (5) across your sessions before it qualifies — one slip on a rare symbol isn't a weak key yet, so early data is deliberately ignored rather than over-reacted to. Slowness is also judged relative to your own median key, not an absolute speed, so a uniformly careful pace doesn't mark everything as weak. Keep playing and qualifying keys light up; recommendations appear as soon as any character has both enough attempts and a real weakness signal.