The Keyboard Layout Project

The Keyboard Layout Project is an attempt to design a fully optimized keyboard layout, with no restrictions. It is one of the world’s most comprehensive studies on keyboard layouts and pulls together research from various other sources. I draw a lot of information for this project from the Colemak forum, which is currently the net’s most active site for keyboard layout-related ventures (especially those related to Colemak).

Updates on The Keyboard Layout Project may be found here.


1. Find the optimal keyboard layout based on my own preferences.
2. Provide a means for others to design their own optimized layouts.
3. Continue research in the field of keyboard layout design.


The Keyboard Layout Project was originally inspired by the inefficiency of QWERTY, the standard keyboard layout on nearly every computer. Many people spend hours each day typing at their computer, and deserve something more comfortable than QWERTY.

QWERTY is flawed, and we need something better. I recommend that people learn Colemak, as it is currently the most viable alternative to QWERTY (as well as being one of the best keyboard layouts out there). It is easy to download, easy to learn, and actually more optimized than other alternatives such as Dvorak.

But if Colemak is such a great layout, why does the Keyboard Layout Project exist?

The purpose of this project is not to produce a keyboard layout to replace QWERTY — at least, not immediately. Colemak is most suited to widespread use. However, Colemak is (a) stable, and (b) does not provide the same flexibility as the Keyboard Layout Project tries to provide.

A widely-used keyboard layout needs to be stable. The problem with stability, though, is that it cannot be customized. The Keyboard Layout Project is intended to demonstrate the creation of a customized layout and to provide the necessary tools to customize one’s own keyboard.


This project provides a large set of resources for researching keyboard layouts. The project is only run by one person, and there’s a limit to how much I can do; so I provide plenty of external resources. I have a list of alternative keyboard layouts. The list contains about two dozen alternative layouts, which is more than any other list as far as I know. It contains every keyboard layout that I’ve come across. also provides a list of alternative layouts.

Designing a layout to be objectively better is a difficult process, as measuring typing efficiency is very difficult. Generally, estimates of whether one keyboard layout is better than another are subjective. There are certain things that everybody agrees on, for example, that moving your fingers around a lot is bad; but people don’t agree on just how bad it is.

I am trying to collect objective typing data by using a program called Amphetype. It gives detailed readings on your fastest and most accurately typed words. In collecting this data I have noticed that how fast different combinations are often depends more on the frequency of those combinations than on the keyboard layout itself. This makes it difficult to collect a sufficient amount of data. For this reason it is also important to collect data on multiple different keyboard layouts. I only know two layouts, so there is a limit to how far I can go. If you want to contribute, see here.

Other Projects


The QWERTY layout was designed in the 19th century to allow typewriter salesmen to easily type the word “typewriter” and to prevent typebars from sticking. We’ve been stuck with QWERTY ever since.
Colemak is a modern alternative to the QWERTY and Dvorak layouts. It is designed for efficient and ergonomic touch typing in English.
Learning Colemak is a one-time investment that will allow you to enjoy faster and pain-free typing for the rest of your life. Colemak is now the 3rd most popular keyboard layout for touch typing in English, after QWERTY and Dvorak.

This is the world’s best alternative layout. Its creator, Shai Coleman, put a great deal of time into tweaking Colemak. It currently has several thousand users and an active community.

Carpalx Keyboard Layout Optimizer:

The carpalx project introduces a quantitative model for typing effort and applies it to (a) evaluate QWERTY and popular alternatives, such as Dvorak and Colemak and (b) find the keyboard layouts that minimize typing effort for a given set of input documents. In the work presented here, these documents are English text, but they can be anything, such as corpora in French, Spanish and even programming languages, like C or Python.

While there are many alternate layouts, the carpalx project distinguishes itself, however, in that it not only proposes new layouts but also describes a fully baked parametric model of typing effort.

While I do not agree with some parts of carpalx’s model, it is undeniably a very detailed analysis of keyboard layouts that is worth looking into.

Keyboarding Theory

The most important posts to read would be those about keyboarding theory. Here is a list of such posts. Unlike some of my other posts, these generally do not assume that you are familiar with the technical details of keyboard design or with my own ventures (although all of my experiments may be found on my blog or, for some of the older material, my website).

How Hard to Type?
Optimized Evolutionary Algorithm for Keyboard Design, Part 1 and Part 2
Fast Typing Combinations
Have We Been Mistaken All Along?
Should a keyboard layout optimize for hand alternation or for rolls?

For a complete list, see:

Most Recent Optimized Keyboards

Optimized for a Kinesis Advantage Pro:

Hands: 42% 41%
Fingers: 7.0% 8.0% 16% 12% 0.00% 18% 12% 11% 9.0% 7.0%

    `  %  /  +  #   ^  <  >  {  }  Q
 |  \  P  O  U  [   ]  D  L  C  W  @
    I  N  E  A  *   M  H  T  S  R  X
    &  K  =  Y  !   B  F  V  G  $  
    ~ \t                     J  Z  
                               \n SP

    1  2  3  4  5   6  7  8  9  0  q
 ;  .  p  o  u  -   "  d  l  c  w  :
    i  n  e  a  ,   m  h  t  s  r  x
    (  k  '  y  _   b  f  v  g  )  
    ? \t                     j  z  
                               \n SP

Fitness: 51887480
Distance: 77500
Finger work: 67705
Inward rolls: 6.56%
Outward rolls: 1.54%
Same hand: 42.23%
Same finger: 1.51%
Row change: 27.27%
Home jump: 6.18%
Ring jump: 1.76%
To center: 3.42%
To outside: 0.40%

* * *

Optimized for a standard keyboard:

Hands: 50% 49%
Fingers: 9.0% 9.0% 19% 14% 0.00% 0.00% 15% 15% 10% 9.0%

 ^  ~  [  {  <  |   #  >  }  ]  %  Q  Z    
    Y  P  O  U  =   K  D  L  C  W  X  +  @
    I  N  E  A  :   M  H  T  S  R  !       
    `  ?  *  ;  &   B  F  G  V  J          

 \  1  2  3  4  5   6  7  8  9  0  q  z    
    y  p  o  u  -   k  d  l  c  w  x  /  $
    i  n  e  a  ,   m  h  t  s  r  "       
    (  )  '  .  _   b  f  g  v  j  

Fitness: 17333300
Distance: 33192
Finger work: 0
Inward rolls: 10.09%
Outward rolls: 2.35%
Same hand: 34.47%
Same finger: 1.57%
Row change: 12.78%
Home jump: 1.06%
Ring jump: 3.17%
To center: 2.67%
To outside: 0.46%

* * *

Optimized for the main 30 keys of a standard keyboard:

Hands: 50% 49%
Fingers: 9.0% 9.0% 19% 14% 0.00% 0.00% 16% 15% 10% 8.0%

 Y  P  O  U  J   K  D  L  C  W
 I  N  E  A  ;   M  H  T  S  R
 Q  Z  <  >  ?   B  F  G  V  X

 y  p  o  u  j   k  d  l  c  w
 i  n  e  a  ,   m  h  t  s  r
 q  z  /  .  :   b  f  g  v  x

Fitness: 14239952
Distance: 55843
Finger work: 0
Inward rolls: 10.49%
Outward rolls: 2.41%
Same hand: 34.47%
Same finger: 1.40%
Row change: 12.56%
Home jump: 0.99%
Ring jump: 3.16%
To center: 2.41%

  1. October 28, 2012 at 4:01 pm | #1

    Hi, I’m the owner of, the largest typing tutor on the net. We have hundreds of thousands of typists learning on our site every day. Your project is extremely interesting to me, and if you are interested I’d be happy to add your format (once completed or during testing if you’d like) to our list if supported keyboards, aiding users in learning as well as giving it plenty of exposure. We currently have around 30 of the most popular international keyboards, and we add new ones as users request them. Best of luck!

    • October 28, 2012 at 6:41 pm | #2

      Hi Austin,

      I don’t think I’ve ever seen your site before, but it looks really good. I might have to try it out. ;)

      I’m happy to know that you like my keyboard layouts, and if you want to add one or some of them to your website, you certainly have my permission. That said, I generally don’t encourage people to use my layouts because I think people should use Colemak. While I do think my layouts are a little better, the marginal difference is quite small, and Colemak provides much better user support. But like I said, if you want to add my layout(s) to your site, feel free to do so.

    • October 28, 2012 at 6:48 pm | #3

      Actually, I’ve been using your site and I like it. Could you be sure to add MTGAP 2.0 (described here) to your keyboard list? That’s the one I’m using right now.

  2. buster
    October 28, 2012 at 6:23 pm | #4

    Why no mention of Maltron?

    • October 28, 2012 at 6:33 pm | #5

      1. I don’t have a Maltron keyboard.

      2. Maltron is similar enough to Kinesis that you can use the Kinesis layout on a Maltron with only small modifications.

  3. ampelmann82
    October 28, 2012 at 7:00 pm | #6

    Great project Michael, we are building KeyRocket to teach people keyboard shortcuts (and later other things) based on their behavior/input. Typing speed and Keyboard layout have been in my idea list for a long time. We should talk whether I can help with getting you a lot of typing data. We just need smart ideas how to protect privacy. Best from Berlin, Jan

  4. October 28, 2012 at 7:01 pm | #7

    Nice project! I’ve been down a similar road a 6 years ago when deciding to stop using Qwerty and look for alternatives. I spent half a year finding my personal perfect optimized layout (I type in both English, Dutch, C# and Ruby).
    I’ve decided to opt for Dvorak with a little tweak: reversing the U and I. I am glad I did as otherwise I’d probably still be looking for the best alternative and relearning instead of just using a more efficient but still < 20% suboptimal layout; good enough. For the ultimate in language entry use Plover steno, syllable chord keyboard entry.

  5. Ian Kelling
    October 28, 2012 at 7:41 pm | #8

    I noticed the Kinesis keyboard layout does not have a shift key listed. I’m pretty sure the default location is not optimal. Have you thought about this?

    • October 28, 2012 at 7:49 pm | #9

      Indeed I have. I wrote about this when I first got a Kinesis keyboard. I haven’t incorporated Shift into the program because it’s difficult to model its interactions with the other keys.

  6. Joel Wong
    December 21, 2012 at 1:02 pm | #10

    Your layout for the 30 keys looks really cool. I might want to try it, if i ever get round to. What layout do you currently use and how do you find it?

    • December 21, 2012 at 6:56 pm | #11

      I currently use MTGAP 2.0, but I think the layout on this page is better. I just think the difference is too small to justify re-learning another keyboard layout, which is why I still use version 2.0. I’d suggest you use the layout given on this page.

  7. Vivid
    June 7, 2013 at 11:36 am | #12

    Hi, I am a Spanish guy and I have been looking for the right alternative layout. I type regularly in three languages, Spanish, English and German. I’ve half-learned a slightly modified version of Colemak where I’ve put the `ñ´ letter in place of :; and have also replaced ‘? by ´¨ as a dead key, since getting the accented vowels is usually more efficient with a dead key than with AltGr. The deal-breaking problem with Colemak for me is that it that it uses the right pinky way too much to the point that it hurts (the tip of the finger). This is due to the fact that the `o´ letter is more used in Spanish than in English and I also have to use that finger to get the accented vowels. So I have been looking for alternatives. One is QGMLWY, which has some appeal since it lowers the use of the pinkie in all three languages I use, and is more efficient than Colemak in German, slightly superior in Spanish and a little inferior to Colemak in English, according to The problem is it has some combinations which are really uncomfortable, like cl (climb, climate) or yo (you, young, yo in Spanish). So I kept on searching and found your web and I’ve been trying your most recent layout and I think is really good for English. I also like the fact that the vowels are all on the left side so I can easily get the accented vowels with a dead key on the right pinky (alternation is good); but some very common Spanish trigraphs are not comfortable at all, `que´, `qui´. So my question is, would it be possible to create, via your program, a compromise international keyboard that keeps the most important Western European languages in mind (English, Spanish, German, French, Italian)? The point is to sacrifice a little efficiency in one specific language in order to achieve a more universal applicability.

    • June 7, 2013 at 4:42 pm | #13

      Thank you for your interest! Yes, it would absolutely be possible to generate such a keyboard layout. Right now I only have typing data for English, so I can’t create a new layout based on what I have. If you could get some typing data for different languages and send it to me, I could incorporate it into my program’s data. Or, if you know a little programming, you could probably do it yourself:

  8. Vivid
    June 9, 2013 at 8:02 pm | #14

    Sorry, but I am clueless about programming, apart from some simple scripts for Autohotkey. I’ve been searching for these word data and all I have been able to come come up with is this:

    Frequency of letters in Spanish:

    Frequency of digrams and trigrams in Spanish:

    Frequency of letters in German:

    Frequency of digrams and trigrams in German:

    And here you can download huge lists with hundreds of thousands of words and their frequencies:!3584

    `es´ for Spanish and `de´ for German.

    Some letters, like á é í ó ú ä ë ï ö ü ß (in both German and Spanish), are created with 2 dead keys usually to the right of :; and to the right of `p´ in a US QWERTY keyboard.

    Thanks a lot for your interest in my idea too!

    • June 10, 2013 at 2:28 am | #15

      Okay, thanks. I’ll look into it once I get a chance.

      • Vivid
        July 21, 2013 at 10:29 am | #16

        Hi, you haven’t had a chance, have you?

        • July 22, 2013 at 8:09 pm | #17

          Thanks for checking back with me. I’ll try to look into it within the next few days.

    • August 5, 2013 at 7:42 pm | #18

      Okay, sorry for the delay. Those sites you linked to don’t provide detailed enough data, and I don’t want to spend the time to try to find better data. If you can find detailed data on characters and digraphs, you can use it to run the program. Put the digraph data into the file allDigraphs.txt and the character data into allChars.txt, using the same format that these files use. Each digraph/character has to have an integer that gives its relative frequency. If you find data that gives frequencies in terms of percentages, simply multiply the percentage by some large number and round to the nearest integer.

      This will require some work, but it should be doable. Let me know if you have any questions.

      You may also want to look into the Arensito keyboard layout, which I believe was designed with multiple languages in mind.

      • Vivid
        August 6, 2013 at 10:29 pm | #19

        Ok, thanks.

      • Vivid
        August 20, 2013 at 11:13 am | #20

        A friend of mine has compiled the program for me and we have been able to mix frequencies of digraphs and characters from English, German and Spanish. The resulting keyboard is this:

        Q P O U Y J M H C B
        A T E I ; L D N R S
        ? K X W G F Z V

        q p o u y j m h c b
        a t e i , l d n r s
        / k : . x w g f z v

        Now I would like to create a keyboard that will keep the signs in their qwerty places (bottom right corner) and will only move the letters. I would also like to replace the qwerty key ‘:;’ by the Spanish letter ‘ñÑ’. How can I do that? Where is the 30 key keyboard defined? And how? Because lower case and upper case letters seem to be linked (they both move to the same places) but not the signs. Where do you define that link and how?

        • August 21, 2013 at 3:20 am | #21

          There’s not currently an option for keeping special characters in the bottom right corner.

          In tools.h there’s a line that says #define DEFAULT_KEYBOARD_30 which defines the 30 key keyboard. However, it will be difficult to get it to use ñÑ. By default, it can only use ASCII characters, and ñ is not part of the ASCII set. You’d have to modify the program to support other character sets, which would require some significant work. If you or your friend wants to take this on, I’d love to see what you come up with.

  9. Omid Nikta
    June 20, 2013 at 1:47 pm | #22

    Hi, I am trying to create a layout for my language and would like to know how you compute the effort for every key (like 0 -8 -10 -10 40 40 on the home row). In fact, my language contains more than 30 characters, so we need to design a layout (on a ISO keyboard, not an ANSI, which contains one more key between left shift and “z”). So I need to now efforts for other keys, like these ” [ ] \. Thanks.

    • June 20, 2013 at 5:48 pm | #23

      I didn’t have any rigorous method for computing the efforts. I basically just practiced typing different keys and tried to gauge how difficult they were to type.

      If you download the most recent version of the typing program, it contains my best guess as to the efforts for all the keys on the keyboard (although it doesn’t have an extra key between shift and ‘z’). You can find the key efforts table in the values.c file.

  10. Dave Ferree
    August 31, 2013 at 10:33 pm | #24’s Keyboard Layout Analyzer has been updated. Please submit the main 30 layout! I’d do it myself, but A) it isn’t mine and B) I have no idea what you are calling it.

  11. Dave Ferree
    November 25, 2013 at 4:59 pm | #26

    Was just attempting to plug-in Arensito into the Patorjk Keyboard Layout Analyzer and became curious; Is there an optimized AltGr layer for MTGAP?

  12. Dave Ferree
    January 25, 2014 at 3:50 am | #28

    Plugging away at Patorjk’s again, trying to fill in MTGAP on the Ergodox map, and I can’t make heads or tails of the Kinesis Advantage Pro layout you have posted here. Mind if I just put in the main 30 with shift on the left thumb and space on the right? I’d probably use the Ergodox Keyboards: Colemak(v2) layout as the base to fill in the blanks and just overlook the lack of Alt, Win, Delete and Arrow keys.

    • January 25, 2014 at 3:53 am | #29

      That’s fine. That’s more or less the configuration I’m currently using.

  13. Mike Rouse
    February 19, 2014 at 6:04 pm | #30

    Dave Ferree :
    Plugging away at Patorjk’s again, trying to fill in MTGAP on the Ergodox map, and I can’t make heads or tails of the Kinesis Advantage Pro layout you have posted here. Mind if I just put in the main 30 with shift on the left thumb and space on the right? I’d probably use the Ergodox Keyboards: Colemak(v2) layout as the base to fill in the blanks and just overlook the lack of Alt, Win, Delete and Arrow keys.

    It looks like you used the “Optimized for the main 30 keys of a standard keyboard” version for the Ergodox (starting row “Y P O U J”). Wouldn’t the Kinesis Advantage Pro version (Top row containing letters “| \ P O U [” ) be better? I can fairly easily submit it, but I don’t want to make it too confusing.

    In a completely different topic, I saw an article entitled “Case-sensitive letter and bigram frequency counts from large-scale English corpora,” by Michael N. Jones and D. J. K. Mewhort of Queen’s University (Kingston, Ontario, Canada), available here:

    Everyone knows about the standard ETAOIN SHRDLU (or more accurate but less mnemonic ETAOIN SRHLDCU), but the order of capital letters is the completely different TSAMC INBRP (EDHWL OFYGJ UKVQXZ). It might help determine where to put a single shift key, if that’s the layout you are using.

    It also has information on case-sensitive bigrams (AA counted separate from Aa, aA, and aa, for example), plus “Single-Unit Frequency of Various Nonalphabetic Characters (ASCII 33–64), and Bigram Frequency as Predecessor (#A) or Successor (A#) to an Alphabetic Character.” Basically, it counts when you have an exclamation point after a letter, or an open parenthesis before a letter, and similar stuff.

  14. Mike Rouse
    February 22, 2014 at 1:05 am | #31

    Well, the keycaps for my newly purchased Cherry G86-63400 point-of-sale keyboard, with 144 gloriously programmable keys in a matrix format, come in on Monday. Sadly, I have to roll my own “E on the left thumb” MTGap format. Any suggestions on how to tweak your MTGap software to do that? I assume that removing, disabling, or somehow locking e and space (left and right thumb, respectively) somewhere in the algorithm and letting the rest of the program works its magic may work, but I’ve never compiled a C program before, so suggestions on what I need to download, install, and tweak on my Windows 7 computer first would be great. :)

    • February 22, 2014 at 1:10 am | #32

      If you think putting E on the left thumb is the best idea, you should try tweaking the scoring algorithm to get that. It makes more sense to write a strong scoring algorithm than to put constraints on the program, since you should get a better layout that way. In this case, however, there is no left thumb key, so I’d suggest replacing the E key with whatever other key you want to put on the main keyboard instead.

      About running C on Windows: I don’t use Windows so you’ll have to ask Mr. Google.

  15. Mike Rouse
    February 28, 2014 at 4:57 pm | #33

    I’ve been roaming the Internet, looking for more bigram frequency data to play with in “The Keyboard Layout Project” program (Peter Norvig’s Google data was great, but limited to 676 2-letter bigrams). I found the article “Case-sensitive letter and bigram frequency counts from large-scale English corpora” by Michael N. Jones and D. J. K. Mewhort, and it considered all uppercase and lowercase letters separately, as well as 32 nonalphabetic characters including the 10 digits (ASCII 33–64; ! to @).

    But the absolute best of all is the supplementary material “” which gives all of the data in several formats, including Excel.

    If anyone would like to utilize this fun resource, here is the Springer link:

    Just head down the page until you see supplementary material. The article itself is interesting as well. Sadly, the authors didn’t count spaces, but that is fixable. Making “The New York Times Keyboard” or the “Usenet Keyboard” should be fun…

  1. October 28, 2012 at 3:18 pm | #1

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


Get every new post delivered to your Inbox.

%d bloggers like this: