Why a Key Does Not Register
A key press passes through seven layers before a page sees it, and only three of them travel with the…
Measures finger travel, same-finger pairs and hand alternation for QWERTY, Dvorak, Colemak and Workman using your own text.
The Keyboard Layout Comparison measures finger travel, same-finger pairs and hand alternation for QWERTY, Dvorak, Colemak and Workman using your own text. It runs as plain JavaScript inside the page, which means there is no upload step, no queue and no size limit imposed by a server — the only limit is your own device.
| Layouts compared | QWERTY, Dvorak, Colemak, Workman |
|---|---|
| Measures | finger travel in key units, same-finger pairs, hand alternation, row jumps |
| Model | US physical key positions, standard finger assignment |
A geometric model, not an ergonomics study. It cannot predict your comfort, and finger travel alone is a weaker predictor of speed than the same-finger column.
A key press passes through seven layers before a page sees it, and only three of them travel with the…
A key that seems dead is usually not a broken switch. Test in the right order — registration, rollover…
Finds zero-width spaces, byte order marks, non-breaking spaces and direction overrides hiding…
Repairs text mangled by the wrong character encoding — the "’" and "é" problem — by…
Detects Cyrillic, Greek and fullwidth characters disguised as Latin letters — the basis of…
Reports CRLF versus LF, trailing whitespace, mixed tab and space indentation, and normalises…
Shows which fingers and rows do the work when you type your own text, and which one is…
Measures the variation in your sentence lengths — the thing that makes prose readable, which…
Rescales every quantity in a recipe for a different number of servings, keeping fractions…
Profiles every column of a CSV — type, blanks, distinct values, ranges — and flags the ragged…
Finds lines that are nearly the same, not just identical — catching "Acme Ltd." against "Acme…
Shows how right-to-left text renders against how it is stored, and finds unmatched embeddings…