500+ Languages · AI explains every line · WPM + accuracy · Free · No sign-up
Type code.Learninstantly.
Real Python, JavaScript, Rust & 500+ more. Measure WPM, accuracy and flow while an AI explains every line you finish.
Live WPM · AI explains on line end · How it works
- 500+
- Languages
- 4.8★
- Rating
- 0
- Sign-ups needed
02 — Languages
Pick a language. Start typing.
The twelve most-typed languages on the site. Every one of the 500+ has real code samples, not lorem ipsum.
def calculate_wpm(chars, secs):let mut score = Vec::new();func (s *Session) Track() error {const wpm = chars / 5 / mins;public static void main(String[] a)guard let run = session else {def calculate_wpm(chars, secs):let mut score = Vec::new();func (s *Session) Track() error {const wpm = chars / 5 / mins;public static void main(String[] a)guard let run = session else {export async function run() {std::vector<int> keys{};val accuracy = hits / totaldef net_wpm(raw, errors)$session->record($wpm);public record Run(int Wpm);export async function run() {std::vector<int> keys{};val accuracy = hits / totaldef net_wpm(raw, errors)$session->record($wpm);public record Run(int Wpm);wpm :: Int -> Double -> Doubledef track(%Session{} = s) doSELECT wpm FROM runs ORDER BY idfor f in ./src/**/*.ts; doFuture<void> start() async {case class Run(wpm: Int)wpm :: Int -> Double -> Doubledef track(%Session{} = s) doSELECT wpm FROM runs ORDER BY idfor f in ./src/**/*.ts; doFuture<void> start() async {case class Run(wpm: Int)const [wpm, setWpm] = useState(0);const std = @import("std");local function track(session)my @runs = map { $_->{wpm} }wpm <- chars / 5 / (secs / 60)function net_wpm(raw, errs)const [wpm, setWpm] = useState(0);const std = @import("std");local function track(session)my @runs = map { $_->{wpm} }wpm <- chars / 5 / (secs / 60)function net_wpm(raw, errs).reel { transform: translateX(0); }<main id="content" tabindex="-1">runs: { wpm: 94, accuracy: 100 }COPY --chown=node:node . .proc netWpm(raw: int): float =let wpm chars secs = chars / 5.reel { transform: translateX(0); }<main id="content" tabindex="-1">runs: { wpm: 94, accuracy: 100 }COPY --chown=node:node . .proc netWpm(raw: int): float =let wpm chars secs = chars / 5const wpm = computed(() => net())$: accuracy = hits / total;(defn net-wpm [raw errors]track(Session) when is_map(S) ->let netWpm raw errs = raw - errsmov eax, [esp + wpm_offset]const wpm = computed(() => net())$: accuracy = hits / total;(defn net-wpm [raw errors]track(Session) when is_map(S) ->let netWpm raw errs = raw - errsmov eax, [esp + wpm_offset]query Runs { wpm accuracy }resource "run" "session" {function record(uint wpm) publicwpm = chars ./ 5 ./ (secs / 60);def netWpm = { raw, errs -> }net_wpm(Raw, Errs, Net) :-query Runs { wpm accuracy }resource "run" "session" {function record(uint wpm) publicwpm = chars ./ 5 ./ (secs / 60);def netWpm = { raw, errs -> }net_wpm(Raw, Errs, Net) :-03 — The reel
Every language,
rolling past.
Real snippets · Real WPM · Scroll to run the reel
04 — The process
Three steps. No setup.
Choose a language
Pick from 500+ languages and frameworks — Python, JavaScript, Rust, Go, C++, TypeScript, and more.
Type real code
Brackets, operators, indentation — the real thing. Finish a line and the AI explains it while it's still in your hands.
Read the tape
WPM, net WPM, accuracy, error rate and CPM — live, then in full after the run. Share it or put it on the leaderboard.
05 — The spec
Everything on the sheet.
What you get, stated plainly. No feature is behind a wall until you want a certificate.
AI explains every line
Finish a line and the built-in AI explains what it does, why it's written that way, and what concept it demonstrates.
AI speaks it too
The explanation is read aloud as you finish each line — type, read and listen at once.
500+ languages
Python, JavaScript, TypeScript, Rust, Go, Java, C++, Swift, Kotlin and 500+ more, each with 10+ real samples.
Real-time WPM
Raw WPM, net WPM, CPM, accuracy, error rate and backspace ratio — while you type, not after.
Timed & unlimited
Timed drills from 15 seconds up, or unlimited mode for full-file practice sessions.
Leaderboard
Benchmark globally, claim certificates, and compare against developers worldwide.
Muscle memory
Brackets, operators and syntax patterns, repeated until they're second nature.
Track progress
WPM, accuracy and error trends across sessions with built-in activity history.
06 — The pack
Puffy runs the numbers.
01 / 10 · scroll →










07 — The tape
What developers say.
Three people, three languages, their numbers. Nothing here is a countdown or a fake buy feed.
“I went from 42 WPM to 71 WPM in 3 weeks just by doing 15 minutes of CodeSpeedTest every morning before standup. The Python samples are spot-on for real work.”
“The bracket-accuracy heatmap showed me exactly where I was losing time. Fixed my muscle memory for curly braces and my React speed jumped 30%. Nothing else does this.”
“Used CodeSpeedTest to prep for my Google interview. The live coding speed under pressure matters more than people think. Got the offer. Coincidence? I don't think so.”
08 — FAQ
Questions, answered.
What is CodeSpeedTest?
CodeSpeedTest (CST) is the #1 free coding speed test platform built for programmers. It lets you measure your typing speed, accuracy, and WPM using real code snippets from 500+ programming languages — not random prose text.
How is CodeSpeedTest different from regular typing tests?
Unlike regular typing tests that use prose, CodeSpeedTest uses actual code with brackets, operators, indentation, and syntax patterns. It measures your real-world coding fluency, not just how fast you can type English sentences.
Is CodeSpeedTest free to use?
Yes, CodeSpeedTest is completely free with unlimited tests. You can practice in 500+ languages, track your progress, compete on the leaderboard, and share results — all with no sign-up required.
What languages does CodeSpeedTest support?
500+ programming languages and frameworks including Python, JavaScript, TypeScript, Java, C++, Rust, Go, Swift, Kotlin, C#, Ruby, PHP, Flutter, Dart, Scala, R, SQL, HTML, CSS, Bash, and many more.
What is a good WPM score on CodeSpeedTest?
Beginners typically score 20–35 WPM, intermediate developers 35–60 WPM, and advanced programmers 60–100+ WPM. Code typing is slower than prose because of special characters. Accuracy matters more than raw speed.
What is the difference between raw WPM and net WPM?
Raw WPM counts every keystroke divided by 5 per minute. Net WPM subtracts errors from raw WPM, giving a more accurate measure of your effective coding speed.
Does CodeSpeedTest track my progress over time?
Yes. You can see your WPM, accuracy, error trends, and improvement over time. Create a free account to save progress across sessions.
Can CodeSpeedTest help with coding interviews?
Absolutely. CodeSpeedTest builds muscle memory for real syntax patterns, reduces typing errors under pressure, and increases coding fluency — skills that directly translate to better interview performance.
Does CodeSpeedTest work on mobile?
CodeSpeedTest works on mobile devices, though it performs best with a physical keyboard. For the best experience, use a desktop or laptop.
How do I improve my coding speed?
Practice daily with CodeSpeedTest using real code, focus on accuracy before speed, learn keyboard shortcuts, build muscle memory for brackets and operators, and track your net WPM over time.
09 — Index
Explore the site
Language Typing Tests
From the Blog
Free Tools
10 — Join
Start your session.
Pick any of 500+ languages, type real code, track your WPM and accuracy, and see where you rank.