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.

Interpreting Optimization Results

configuration file : etc/tutorial-06.conf
output : out/tutorials/06


This tutorial picks up where the concurrent optimization tutorial left off. Once you have collected a large number of output files (out/tutorials/04), one for each optimization instance, and identified the best-ranking candidates, you will probably want to generate images and reports for the layout candidates.

First, I'll set up what I want carpalx to do in the action string: draw the input keyboard, report statistics and word efforts. Also, I'll make a small adjustment to the output file name for the PNG image, and make it a function of the input keyboard_input (e.g. the keyboard in tmp-zjqgub.conf will be drawn as tmp-zjqgub.png).

action  = loadkeyboard,loadtriads,drawinputkeyboard,reporteffort,reportwordeffort,quit
pngfile_keyboard_input  = /home/martink/work/carpalx/dev/out/tutorials/06/__basename($CONF{keyboard_input},".conf")__.png

drawing keyboards

I can specify the keyboard_input file on the command line. However this needs to be specified relative to the main configuration file (i.e. relative to etc/).

> bin/carpalx -conf etc/tutorial-06.conf -keyboard_input out/tutorials/04/tmp-oovxkx.conf > out/tutorials/06/out.txt
Figure 1. Lowest effort layout from tutorial 04.

If you desire a more elaborate keyboard image, try the image parameters predefined as set 2.

imagedetaillevel = 2
imageparamset    = 2
Figure 2. Lowest effort layout from tutorial 04.
If you don't get the relative path right, carpalx will complain. For example if you use -keyboard_input out/tutorials/04/tmp-oovxkx.conf, the following message will appear

cannot file keyboard definition - /home/martink/work/perl/keyboard/carpalx-0.10/etc/out/tutorials/04/tmp-oovxkx.conf at bin/carpalx line 1453.

Based on the message, it's easy to correct the input path.

investigation effort components

The out/tutorials/06/out.txt file that we created above contains detailed information about effort of the best candidate, as well as statistics about finger and row usage.

Keyboard effort
k1                      0.719  80.9  80.9
k1,k2                   0.871  17.1  97.9
k1,k2,k3                0.889   2.1 100.0
b                       0.392  23.1  23.1
p                       0.497  29.3 178.9
ph                      0.000   0.0   0.0
pr                      0.167  33.5  33.5
pf                      0.283  57.0  90.5
s                       0.808  47.6 100.0
all                     1.697 100.0 100.0

Look at the first column of numbers in the rows labeled b, p and s. These are the base, penalty and stroke efforts for the layout. The total energy is 1.697, and the components break down as 0.392 (base), 0.497 (penalty) and 0.808 (stroke).

Let's look at the finger frequency

keyboard finger frequency
0                       10738  5.7   5.7
1                       19640 10.4  16.1
2                       23312 12.3  28.4
3                       41076 21.7  50.1
6                       51342 27.2  77.3
7                       27456 14.5  91.8
8                       15136  8.0  99.8
9                         323  0.2 100.0

The left pinky is used 5.7% of the time and the right pinky 0.2% of the time.

investigating the optimization process

If you capture the output of carpalx to an output file during optimization, you can return to this file and explore the course of effort during optimization. Below are a few plots of the layout effort for each iteration in a simulation of 10,000 iterations. These plots were generated using an old effort model, so the effort values are high.

Figure 3. Layout typing effort during optimization. The red line traces the effort of accepted transitions.
Figure 4. Effort change during accepted transitions during layout optimization. During the initial phase of the optimization both positive (worse) and negative (better) effort changes are accepted. Towards the end of the optimization, only desirable transitions (lower in effort) are accepted and, infrequently, marginally worse layouts.
Figure 5. Cooling schedule for the optimization. As the optimization runs, the probability of accepting a less desirable layout exponentially decreases.