carpalx - keyboard layout optimizer - save your carpals

Carpalx optimizes keyboard layouts to create ones that require less effort and significantly reduced carpal strain!

Have ideas? Tell me.

the best layout

Partially optimized QWKRFY and fully optimized QGMLWY layouts are the last word in easier typing.

the worst layout

A fully anti-optimized TNWMLC layout is a joke and a nightmare to type. It's also the only keyboard layout that has its own fashion line.

download and explore

Download keyboard layouts, or run the code yourself to explore new layouts. Carpalx is licensed under CC BY-NC-SA 4.0.


Download and install the layouts.

25 Oct 21 — Added vertical and horizontal alphabetic layouts to the layouts analysis.

19 Mar 21 — Added BEAKL 15, Hieamtsr, Colemak Mod-DH and Mtgap 2.0 layouts to the layouts analysis.

15 Mar 21 — Added the Engram layout by Arno Klein to the layouts analysis.

6 Aug 20 — The search for the world’s best keyboard layout by Paul Guerin

4 May 20 — An interview with Bloomberg's Arianne Cohen Splurge on a Better Keyboard, It's Worth It.

25 May 18 — The BBC article Why we can't give up this off way of typing by Tim McDonald discusses the history and persistence of QWERTY and my Carpalx work.

16 Aug 16 — Ergonomic Keyboard Layout Designed for the Filipino Language at AHFE2016 derives layout for Filipino language using Carpalx

18 Apr 16 — Carpalx layouts soon to appear in freedesktop (package xkeyboard-config) and kbd. Thanks to Perry Thompson.

Evaluating Keyboard Layouts

How Good is a Keyboard Layout?

I evaluate keyboard layouts using my own typing effort model—the better the layout, the lower the typing effort. The model is based on metrics (or figures of merit, FOMs) described here.

Metrics are based on relative usage frequencies (row, finger, hand), row jumps and runs (number of repeated strokes for same row, finger, hand). These metrics can be used to evaluate an existing layout, compare two layouts or to derive an optimized layout. When deriving a layout, the parameters are combined using weights into a single value (typing effort), which is minimized.

hand, finger and row frequency

  • row frequency - the relative frequency at which the top (rowt), home (rowh) and bottom (rowb) rows are hit; layouts which a high value of rowh and low value of rowb are desirable.
  • hand frequency - the relative frequency at which the left (hL) and right (hR) hands are used; layouts for which these two values are close to one another are desirable
  • finger frequency - the relative frequency at which individual fingers are used to hit keys (f0 ... f3, f6 ... f9, with indices starting at the left pinky and ending at right pinky (indeces 4 and 5 correspond to thumbs, normally not counted); it is desirable to transfer as much of the typing from the weaker fingers (pinky, ring) to the stronger fingers (middle, index)

hand asymmetry

  • hand asymmetry - defined as hL–hR; desirable layouts have a low value for hand asymmetry

hand, finger and row runs

Runs describe how frequently the same row, hand or finger are used N times in a row. The cumulative distribution of runs is best used for this quantity.

Given a value, n, the cumulative distribution of a run (e.g. left hand run) gives the relative number of hand runs shorter or equal in length to n. Row and hand runs are futher categorized by top, home and bottom (for rows) and left and right (for hands). Finger runs are not expressed for individual fingers (e.g. a finger run of 5 indicates one of the fingers was used 5 times in a row).

  • hand run (rhL(n), rhR(n)) - relative frequency of left or right hand runs of length `\le n`
  • row run (rrt(n), rrh(n), rrb(n)) - relative frequency of top, home and bottom row runs of length `\le n`
  • finger run (rf(n)) - relative frequency of a finger run of length `\le n`

Desirable layouts have most of their runs very short, with the exception of the home row runs (rrh(n), i.e. the number of times keys of the home row are hit n times in succession), which should be lengthy.

row jump

The row jump is the total number of rows traversed by typed fingers within a hand run. The row jump distinguishes the case of typing "ttt" (hand run = 3, finger run = 3, row jump = 0) and tbt (hand run = 3, finger run = 3, row jump = 4).

  • row jump (rj(n)) - relative frequency of a total same-hand row jump of length `\le n`

Ranking Words by Typing Difficulty

Detailed typing statistics, such as those described above, unambiguously characterize a layout's performance. However, these values can be hard to interpret and translate to typing in practise.

To give a more subjective impression of a layout's fitness, I have ranked words based on the effort (per unit length) required to type them. I have ranked words for QWERTY, Dvorak, Colemak, QGMLWY (fully optimized, Colemak-like), TNWMLC (worst layout for English).