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. 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.

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).