Parametric Cherry MX/Alps Keycap for Mechanical Keyboards

Author: rsheldiii, published on 2014-09-19

Click this button to get the 3D model


I got halfway through making a parametric novelty keycap base before I realized there are decidedly few basic keycaps on the thingiverse website, so I took a detour to make a good one. As this one currently stands you can generate three different profiles of keys including spacebars in any length you desire! They are not quite drop-in replacements into existing keysets yet, but work great as a set, escape key, WASD cluster, top row, or as a base for an artisan.
Heavily modified from Kekstee’s original Skull keycap to refactor, remove dxf files, add a dish, parameterize, and add a square keyswitch connector:
Makerbot’s customizer is great, but it’s hard to zoom in and a little sluggish with spherical dishes, so you might be better served booting up OpenSCAD. Also, using OpenSCAD opens up a whole new level of customization! Due to the complexity of the key profiles things like dish depth, top skew, etc. can only be controlled from inside OpenSCAD. There are a lot of comments as to what things do so don’t be afraid to dig around!
update 2/27/2016, all features to date:

  • Many imitation key profiles supported! DCS, SA, and DSA for now. SA recently fixed! No OEM until I can find a good data sheet 🙁
  • Square Cherry key connector stem; easier to print, more robust than a circular one. I may make a circular one in the future.
  • stem inset now supported! allows you to print keys that will sit lower on the keyboard than before. you’ll need to print with some kind of support
  • depth of cross in Cherry connector slightly higher than the keyswitch stem itself, to give a better base for the keytop to sit on
  • multiple dish types that affect the top and bottom, so keytop thickness is uniform throughout. Dishes are correctly created using a bit of trig, so they expand to arbitrary sized keycaps. There is a height limit, however. Inverted dish types for spacebar / funky keyboards supported!
  • stabilizer supports!
  • NEW! Experimental ALPS compatibility! (WIP)
    upcoming additions:
  • more accurate profiles
  • OEM profile?
  • Arbitrary height keycaps? (2×2 POS keys are pretty neat)
  • an ISO enter key would be great, but because of the weirdness of the design I’m not making any promises


I have tested this at .2 and .1mm layer heights with no support and it seems to print just fine, with a bit of warping on the bottom of the keytop for the first layer of bridging or so. At .1mm I increased infill to 90%, otherwise Slic3r seemed to float layers on top of nothing; at .2mm 20% infill worked great. Sometimes the stem comes undone for me during the print, mostly at low layer resolutions and more often with ABS. Make use of the brim if you find that happening to you as well, which can be customized.
You also might have problems with stem fitment if you overextrude – you can either change your extrusion parameters or look into futzing with horizontal_cross_width, vertical_cross_width, extra_outer_cross_width, and extra_outer_cross_height. It is by far the tightest part of the print, and the one closest to operating tolerances in order to give as much material as possible to the stem. In addition, different slicers handle the stem differently; I found that Slic3r printed the pieces in one contiguous spiral, which minimized retraction problems, but Simplify3d does not. YMMV.
In order to print different versions of the keycaps, change the key_profile variable. If you wish to print Alps-compatible keycaps, make sure the stem_profile is set to 1. I haven’t tested all of the Alps ones so make sure the stem is in a good position before you print off 30 of them!

Comments welcome!

License: Attribution – Non-Commercial – Share Alike

Tags: alps, cherry, cherry_MX, customizer, keyboard, keycap, mechanical