Cadenza (n.): a brilliant, technically demanding solo passage — calling for precision timing and controlled technique.
Cadenza is a 36-key split keyboard layout for the Corne Choc, built on Colemak-DH and configured in Vial. Every key stays within reach of the home position — no wrist movement, no arm travel.
Inspired by Miryoku, but redesigned from the ground up with per-finger tipping terms, frequency-ranked symbol placement, bilateral layer access from either hand, a dedicated Code & CLI layer, a complete International layer for German, and two Tiling Window Manager layers for i3/Sway.
36 keys. A tap dance for the typing elite.
v1.0.0 is the stability declaration — all planned core layers are complete and verified. It is a breaking release from v0.8.x: existing .vil files are not compatible.
Key changes from v0.8.1:
- Firmware — custom Vial-QMK build required:
TAP_DANCE_ENTRIES 48(up from 32). 43/48 TD slots used. All 16 macro slots used. - L0 Base — Bsp/Ent reassigned correctly (Bsp→Symbols, Ent→Numbers). Esc restored to plain key. New top-row layer access: W/Y→L1, F/U→L11, L→L12.
- L1 RGB & Media — full redesign. Access via Hold W / Hold Y so all thumb keys remain free on the layer.
- L4 Symbols — Miryoku numpad grid replaced with Frequency+Strength layout.
=(most used) on T (strongest finger). - L9 Code & CLI — operator TDs corrected, new macros M10–M15 (
&&,||,!=,==,=>,->). - L10 International — full bilateral redesign. Access promoted to D/H (index fingers). Left side added: ß, €, −,
"dead key. No macros needed for ß/€ — direct RALT keycodes. - L11 Tiling WM — Quick (new) — WS 1–4 via F/U. Focus switching and window movement on right hand. Kill/Float/Fullscreen on all thumbs, both sides.
- L12 Tiling WM — Full Map (new) — WS 1–10 via L. Numpad muscle memory from L5. Tap = go · Hold = move window.
Full changelog: VERSIONING.md
Cadenza is free and open source — designed, tested, and maintained in spare time on a 36-key keyboard.
If it saved your wrists, spared your carpal tunnel surgeon a visit, or simply made typing feel less like a crime against ergonomics — a coffee would make the author very happy. It won't fund a yacht, but it will absolutely fund the next tap dance slot.
☕ Buy the author a coffee on Ko-fi
36 keys. Zero revenue. Infinite tap dances.
- Home Row Mods via Tap Dance — per-key tipping terms (250 ms ring/pinky · 200 ms index/middle)
- 13 layers — alpha, RGB/media, navigation, mouse, symbols, numbers, F-keys, clipboard, brackets, code/CLI, international, tiling WM quick, tiling WM full
- Frequency + Strength symbols — most-used symbol on strongest finger, documented ranking
- No inner column — G/M never used for layer content; only vertical finger movement for layer access
- Bilateral layer access — L7/L8/L9/L10/L11 reachable from either hand independently
- Code & CLI layer (L9) —
||·2>&1·&&·|·//~//../·$()/${}·!=/==·=>/-> - International layer (L10) — ä/ö/ü via
"dead key, ß, €,`,|,\,'— bilateral access, no macros for ß/€ - Tiling WM integration (L11 + L12) — WS 1–10, focus switching, window movement, Kill/Float/Fullscreen
| Document | Description |
|---|---|
| docs/index.html | Full design documentation — layer cards with keyboard diagrams, design decisions, TD/macro reference, vs. Miryoku comparison |
| docs/cadenza-viewer-v1.0.0.html | Interactive layer viewer — switch between all 13 layers, layer overview, TD & Macro reference with layer highlighting, Design Philosophy tab |
| VERSIONING.md | Semantic versioning policy and complete version history |
| ROADMAP.md | Planned milestones — v1.0.x patches, v1.1 features, v2.0 QMK migration |
Full interactive reference: docs/cadenza-viewer-v1.0.0.html Full design documentation: docs/index.html
| # | Layer | Access key(s) | Purpose |
|---|---|---|---|
| L0 | Base | — | Colemak-DH + Tap Dance HRM |
| L1 | RGB & Media | Hold W or Hold Y | RGB control · Media playback · Screen brightness |
| L2 | Navigation | Hold Space | Arrows · Home/End/PgUp/PgDn · Clipboard |
| L3 | Mouse | Hold Tab | Pointer · Scroll · Buttons |
| L4 | Symbols | Hold Bsp | Frequency+Strength symbol layout |
| L5 | Numbers | Hold Ent | Numpad layout · operators |
| L6 | Function Keys | Hold Del | F1–F12 · PrtSc · ScrLk · Pause |
| L7 | Clipboard | Hold Z or Hold / | Undo/Cut/Copy/Paste/Redo — symmetric, both hands |
| L8 | Bracket Pairs | Hold C or Hold , | ( ) [ ] < > { } — tap/hold, both hands |
| L9 | Code & CLI | Hold X or Hold . | Shell operators · path navigation · expansion macros |
| L10 | International | Hold D or Hold H | ä/ö/ü · ß · € · ` · | · \ · ' — bilateral |
| L11 | Tiling WM — Quick | Hold F or Hold U | WS 1–4 · focus · window move · Kill/Float/Full |
| L12 | Tiling WM — Full | Hold L | WS 1–10 · numpad memory · tap=go · hold=move |
Access keys are assigned by usage frequency × ergonomic quality. The right thumb middle (Bsp) earns L4 Symbols because it requires no lateral movement. D/H (strongest index pair) earns L10 International because German umlauts appear in every sentence. G and M are never used for layer access — the lateral stretch destabilises hand position.
Frequency + Strength (L4 Symbols): Symbols are ranked by daily usage frequency in German IT writing, then assigned to fingers in strength order. = (rank 1) sits on T (strongest left index). & (rank 8) sits on O (weakest right pinky). No arbitrary numpad-position inheritance.
W/Y for RGB & Media (L1): Hold Esc was the previous access key — but holding Esc blocked the entire left thumb cluster, which is needed for Mode/Toggle/RGB on that layer. W and Y (ring fingers, top row) leave all six thumb keys free.
D/H promoted for International (L10): Previously X/. (ring fingers). The index fingers are stronger and the bilateral access pattern " dead key on both T (left) and N (right) means umlaut input works regardless of which hand holds the layer.
Two WM layers instead of one: L11 gives reflex-speed access to WS 1–4 (the four workspaces most people use daily). L12 gives the full WS 1–10 map using the numpad positions from L5 — no new muscle memory required, just a different layer key.
No inner column for layer content: G and M require a lateral inward index stretch — the same problem Colemak-DH solved by moving B and H. Cadenza extends this principle: G/M carry only their letters and App/Menu, never layer content.
- Corne Choc (crkbd) with RP2040 MCU
- Custom Vial-QMK firmware with
TAP_DANCE_ENTRIES 48(see below) - OS keyboard layout set to US International (required for dead keys and RALT combinations)
The default Vial firmware only supports 32 Tap Dance slots. Cadenza v1.0.0 requires 48.
# Clone Vial-QMK
git clone https://github.com/vial-kb/vial-qmk.git
cd vial-qmk
make git-submodule
# Edit keyboards/crkbd/keymaps/vial/config.h
# Change: #define TAP_DANCE_ENTRIES 32
# To: #define TAP_DANCE_ENTRIES 48
# Build
qmk compile -kb crkbd/rev1 -km vialFlash via RP2040 drag-and-drop:
- Double-tap the reset button →
RPI-RP2drive appears - Copy the generated
.uf2file to the drive - Repeat for the other half
- Open Vial desktop app, connect keyboard via USB
- File → Load saved layout → select
configuration/Cadenza-Corne-Pro_v1_0_0.vil - Confirm all layers loaded correctly
Set your OS keyboard layout to US International. This is required for:
RALT+S→ ßRALT+5→ €- Dead key
"(Shift+Quote) → ä, ö, ü when followed by a vowel
| Resource | Used | Available | Free |
|---|---|---|---|
| Tap Dance slots | 43 | 48 | 5 (TD15, TD44–47) |
| Macro slots | 16 | 16 | 0 |
| Key Overrides | 0 | 32 | 32 |
| Combos | 0 | 32 | 32 |
| Layers | 13 | 16 | 3 |
Cadenza follows Semantic Versioning — vMAJOR.MINOR.PATCH.
| Increment | When |
|---|---|
| PATCH | Bug fix — no key moves, no new features |
| MINOR | New layer, macro, or Tap Dance added |
| MAJOR | Existing key behaviour changes — muscle memory impact |
Full versioning policy and change log: VERSIONING.md
See CONTRIBUTING.md. Ports, language variants, and usage reports are especially welcome. Open a Discussion tagged roadmap to suggest future features.
Designed by one7two99 · MIT · 2026
Based on Colemak-DH by stevep99 · Inspired by Miryoku