keycaps

Replacement mechanical-keyboard keycaps, parametric in OpenSCAD. 5 models, each one rendered and geometrically validated in CI before it gets here.

Why this exists

Replacement keycaps fail for boring reasons: a stem 0.1 mm too tight, a stabiliser hook half a millimetre too high, a skirt that rubs the switch housing. So nothing here is asserted that was not found. Every dimension in every model carries a tag — sourced from a document, derived from one, a standard-value estimate, or fit-critical and impossible to verify online, in which case it says so and tells you to reach for a caliper.

Across the models published here that comes to 11 sourced, 3 derived, 53 estimated and 1 unverifiable dimensions. The counts are read out of the sources, not claimed.

Checks are boolean probes, not eyeballing: a solid shaped like a real Cherry MX cross is pushed into the socket and the interference volume is measured. A second CI workflow breaks each model on purpose to prove those checks can actually fail — a check that never fails is decoration.

ASUS ROG Falchion Ace — replacement keycaps (ISO/ITA)

Provenance of every dimension, and what could not be verified →

ASUS ROG Falchion Ace - UP ARROW, 1u

ASUS ROG Falchion Ace - UP ARROW, 1u

ZXCV row: on a 65 % the up arrow sits to the right of the right Shift, in the same row as Z X C V - confirmed on the product photo.

size
18.10 × 18.10 × 9.87 mm
material
958 mm³ ≈ 1.19 g PLA
stem
Cherry MX cross
stabiliser
none
13/13 checks passed2 estimated
Underside — stem, ribs and mounts
underside of ASUS ROG Falchion Ace - UP ARROW, 1u
All 13 checks
✓watertight, single closed solidwatertight=True bodies=1 euler=2
✓consistent winding / positive volumevolume=957.9 mm^3 (~1.19 g PLA solid)
✓1u body width (X)18.100 mm (1u pitch = 19.0500)
✓body depth (Y)18.100 mm (1u pitch = 19.05)
✓fits inside the key pitch envelopegap to the neighbours = 0.47 mm per side, 0.47 mm front/back
✓total height9.86 mm
✓nominal MX cross (4.10 x 1.17) entersinterference = 0.0000 mm^3
✓socket is not oversized (+0.30 probe does clash)interference = 3.802 mm^3 -> grip present
✓stem is centred on the keysocket centroid X=-0.000 Y=-0.000
✓interior never tighter than a stock cap of the same sculptworst margin +1.14 mm at z = 0.2 mm (checked to z = 5.0)
·north LED columnnot checked: led_clear_h = 0, the board lights each key with an SMD LED under the switch, nothing enters the cap
✓print orientation sits flat on z = 0min z = 0.000000
✓first layer is the top-plate rim, not a point196 vertices within 0.25 mm of the bed
✓no overhang past 45 deg above the bed0.0 mm^2 above the dish + 192.4 mm^2 of dish bridged over the bed
·drafted walls589.1 mm^2 at <=14.9 deg from vertical
ASUS ROG Falchion Ace - G, 1u

ASUS ROG Falchion Ace - G, 1u

Home row (ASDF). Legend engraved rather than raised: it is a key you type on constantly, and a raised glyph is felt under the fingertip.

size
18.10 × 18.10 × 8.50 mm
material
879 mm³ ≈ 1.09 g PLA
stem
Cherry MX cross
stabiliser
none
13/13 checks passed2 estimated
Underside — stem, ribs and mounts
underside of ASUS ROG Falchion Ace - G, 1u
All 13 checks
✓watertight, single closed solidwatertight=True bodies=1 euler=2
✓consistent winding / positive volumevolume=878.9 mm^3 (~1.09 g PLA solid)
✓1u body width (X)18.100 mm (1u pitch = 19.0500)
✓body depth (Y)18.100 mm (1u pitch = 19.05)
✓fits inside the key pitch envelopegap to the neighbours = 0.47 mm per side, 0.47 mm front/back
✓total height8.50 mm
✓nominal MX cross (4.10 x 1.17) entersinterference = 0.0000 mm^3
✓socket is not oversized (+0.30 probe does clash)interference = 3.802 mm^3 -> grip present
✓stem is centred on the keysocket centroid X=-0.000 Y=-0.000
✓interior never tighter than a stock cap of the same sculptworst margin -0.01 mm at z = 0.2 mm (checked to z = 5.0)
·north LED columnnot checked: led_clear_h = 0, the board lights each key with an SMD LED under the switch, nothing enters the cap
✓print orientation sits flat on z = 0min z = 0.000000
✓first layer is the top-plate rim, not a point116 vertices within 0.25 mm of the bed
✓no overhang past 45 deg above the bed0.0 mm^2 above the dish + 193.9 mm^2 of dish bridged over the bed
·drafted walls555.0 mm^2 at <=15.9 deg from vertical
ASUS ROG Falchion Ace - LEFT SHIFT, ISO/ITA 1.25u

ASUS ROG Falchion Ace - LEFT SHIFT, ISO/ITA 1.25u

ZXCV row. NOT stabilised (unlike the ANSI 2.25u left Shift): on ISO the 1.25u Shift sits next to the extra <>| key, confirmed on the product photo.

size
22.86 × 18.10 × 9.97 mm
material
1158 mm³ ≈ 1.44 g PLA
stem
Cherry MX cross
stabiliser
none
13/13 checks passed1 sourced2 estimated
Underside — stem, ribs and mounts
underside of ASUS ROG Falchion Ace - LEFT SHIFT, ISO/ITA 1.25u
All 13 checks
✓watertight, single closed solidwatertight=True bodies=1 euler=2
✓consistent winding / positive volumevolume=1158.2 mm^3 (~1.44 g PLA solid)
✓1.25u body width (X)22.863 mm (1.25u pitch = 23.8125)
✓body depth (Y)18.100 mm (1u pitch = 19.05)
✓fits inside the key pitch envelopegap to the neighbours = 0.47 mm per side, 0.47 mm front/back
✓total height9.97 mm
✓nominal MX cross (4.10 x 1.17) entersinterference = 0.0000 mm^3
✓socket is not oversized (+0.30 probe does clash)interference = 3.802 mm^3 -> grip present
✓stem is centred on the keysocket centroid X=-0.000 Y=-0.000
✓interior never tighter than a stock cap of the same sculptworst margin +1.14 mm at z = 0.2 mm (checked to z = 5.0)
·north LED columnnot checked: led_clear_h = 0, the board lights each key with an SMD LED under the switch, nothing enters the cap
✓print orientation sits flat on z = 0min z = 0.000000
✓first layer is the top-plate rim, not a point182 vertices within 0.25 mm of the bed
✓no overhang past 45 deg above the bed0.0 mm^2 above the dish + 258.5 mm^2 of dish bridged over the bed
·drafted walls673.3 mm^2 at <=14.9 deg from vertical

Ozone Strike Battle — replacement LEFT SHIFT keycap

Provenance of every dimension, and what could not be verified →

Ozone Strike Battle - LEFT SHIFT, ANSI 2.25u (stabilised, Costar)

Ozone Strike Battle - LEFT SHIFT, ANSI 2.25u (stabilised, Costar)

Cherry MX cross stem, Costar (Filco-style) wire stabiliser interface, OEM-like sculpted profile, designed for FDM printing in PLA / PETG.

size
41.90 × 18.10 × 11.39 mm
material
2732 mm³ ≈ 3.39 g PLA
stem
Cherry MX cross
stabiliser
costar
20/20 checks passed5 sourced2 derived27 estimated1 unverifiable — measure it
Underside — stem, ribs and mounts
underside of Ozone Strike Battle - LEFT SHIFT, ANSI 2.25u (stabilised, Costar)
All 20 checks
✓watertight, single closed solidwatertight=True bodies=1 euler=2
✓consistent winding / positive volumevolume=2731.7 mm^3 (~3.39 g PLA solid)
✓2.25u body width (X)41.903 mm (2.25u pitch = 42.8625)
✓body depth (Y)18.100 mm (1u pitch = 19.05)
✓fits inside the key pitch envelopegap to the neighbours = 0.48 mm per side, 0.47 mm front/back
✓total height11.39 mm
✓nominal MX cross (4.10 x 1.17) entersinterference = 0.0000 mm^3
✓socket is not oversized (+0.30 probe does clash)interference = 3.802 mm^3 -> grip present
✓stem is centred on the keysocket centroid X=-0.000 Y=-0.000
✓wire bore clear at x=+11.906 (1.25u apart)interference = 0.0000 mm^3
✓wire bore clear at x=-11.906 (1.25u apart)interference = 0.0000 mm^3
✓throat (1.20 mm) open to the undersideinterference = 0.0000 mm^3
✓seated wire is free to move inside the bore (+-0.15 mm)worst interference = 0.0000 mm^3
✓wire arm clears the cavity from x=+-3.2 to +-18.5worst interference = 0.0000 mm^3 (stem boss, ribs and walls all missed)
✓throat retains the wire (interference is intentional)0.02 mm^3 of PLA must flex to snap the wire in
✓interior never tighter than a stock cap of the same sculptworst margin +0.00 mm at z = 0.2 mm (checked to z = 5.0)
✓north in-switch LED column (4 x 2.2, 7.0 mm tall) is clearinterference = 0.0000 mm^3
✓print orientation sits flat on z = 0min z = 0.000000
✓first layer is the top-plate rim, not a point119 vertices within 0.25 mm of the bed
✓no overhang past 45 deg above the bed1.0 mm^2 above the dish + 532.1 mm^2 of dish bridged over the bed
·drafted walls1376.3 mm^2 at <=11.8 deg from vertical
Ozone Strike Battle - LEFT SHIFT, ISO 1.25u  (ITA / UK / DE)

Ozone Strike Battle - LEFT SHIFT, ISO 1.25u (ITA / UK / DE)

size
22.85 × 18.10 × 11.38 mm
material
1412 mm³ ≈ 1.75 g PLA
stem
Cherry MX cross
stabiliser
none
14/14 checks passed5 sourced1 derived20 estimated
Underside — stem, ribs and mounts
underside of Ozone Strike Battle - LEFT SHIFT, ISO 1.25u  (ITA / UK / DE)
All 14 checks
✓watertight, single closed solidwatertight=True bodies=1 euler=2
✓consistent winding / positive volumevolume=1412.3 mm^3 (~1.75 g PLA solid)
✓1.25u body width (X)22.853 mm (1.25u pitch = 23.8125)
✓body depth (Y)18.100 mm (1u pitch = 19.05)
✓fits inside the key pitch envelopegap to the neighbours = 0.48 mm per side, 0.47 mm front/back
✓total height11.39 mm
✓nominal MX cross (4.10 x 1.17) entersinterference = 0.0000 mm^3
✓socket is not oversized (+0.30 probe does clash)interference = 3.802 mm^3 -> grip present
✓stem is centred on the keysocket centroid X=-0.000 Y=-0.000
✓interior never tighter than a stock cap of the same sculptworst margin +0.00 mm at z = 0.2 mm (checked to z = 5.0)
✓north in-switch LED column (4 x 2.2, 7.0 mm tall) is clearinterference = 0.0000 mm^3
✓print orientation sits flat on z = 0min z = 0.000000
✓first layer is the top-plate rim, not a point114 vertices within 0.25 mm of the bed
✓no overhang past 45 deg above the bed0.0 mm^2 above the dish + 259.9 mm^2 of dish bridged over the bed
·drafted walls829.9 mm^2 at <=11.8 deg from vertical

Printed

Everything above is geometry: a solid is rendered, boolean probes are pushed into it, and the numbers are recorded. That catches a great deal and it cannot catch anything that only exists once plastic cools.

a printed keycap on the build plate

A photo is not a check — it is the thing a check cannot be. These prove the geometry is sliceable, that the committed orientation works and that no support was needed, which is what the checks predicted. They do not prove the cap seats on a real switch, and that is the row that matters: until one has, the stem clearances are still the estimates the provenance tables say they are.

Printing

Every STL is already oriented: top plate flat on the bed, open side up, no supports. The dish is a shallow pocket sitting on the bed and bridges from its own rim.

layer height0.12 mm (0.16 acceptable), first layer 0.20
walls3 perimeters — matches the 1.15 mm skirt and the 1.55 mm wall without leaving gaps
infill100 % — the part is nearly all perimeters, so this only fills the stem boss where the strength is needed
supportsnone
brim5 mm; the bed contact is only the top-plate rim
PLA205–215 °C, bed 60 °C, 100 % cooling from layer 3
PETG230–245 °C, 50 % cooling, and add 0.05 mm to the stem clearances — PETG swells more on the way out of the nozzle

Test-fit one print on a spare switch before committing to a set. Too tight or too loose is two parameters at the top of the source, not a redesign.

What is not guaranteed

Several dimensions in every model are estimates, and each keyboard's README says exactly which ones and why. Where a fit-critical dimension could not be established from any public document, it is marked and left for you to measure rather than invented. Shine-through legends cannot be reproduced in single-material FDM at all, so a printed cap stays dark on a backlit board.