╔═══════════════════════╗
  ║                       ║
  ║   S O N A T A         ║
  ║                       ║
  ║   28 keys.            ║
  ║   Form fully          ║
  ║   realized.           ║
  ╚═══════════════════════╝

SONATA

28 keys. Form fully realized.
v3.0 · trigger redesign + L_SYM rebuild Colemak-DH lineage 9 layers ~43 Tap Dances QMK keymap.c SFB ~1.27% (estimated) No inner column · 4 utility thumbs
Sonata (n.): a complete musical form in three or four movements — the synthesis of theme, development, and resolution.

Sonata is a 28-key split keyboard layout that synthesizes Cadenza (36-key) and Coda (22-key). It keeps Cadenza's full HRM and complete alphabet on base, takes Coda's zero lateral stretch, and adds what neither could: a dedicated Backspace, bilateral Meta solved cleanly. v3.0 reorganizes the layer-trigger system (combos eliminated, four bilateral pairs added), rebuilds L_SYM by symbol frequency, and configures every access key + Home Row Mod as Tap Dance for per-key timing control.

★ Changelog · v2.0 → v3.0

★ Changelog · v1.1 → v2.0

★ Why Sonata exists

Three constraints that no off-the-shelf 28-key layout meets together: (a) zero lateral index/inner-column stretch, (b) full bilateral HRM with cross-hand Meta+Alt, (c) German+English+code mixed bigram optimization on a layer system tuned for shell and tiling WM. v2.0 is the version where the SFB cost of meeting all three drops to within statistical noise of Miryoku on 36 keys; v3.0 keeps that alpha placement and rebuilds the layer-access architecture around bilateral letter pairs and Tap Dance for per-key timing.

Contents

  1. Design Concept & Approach
  2. Physical Layout
  3. Design Principles
  4. Letter Placement
  5. Ergonomic Metrics
  6. SFB by Column (Honest Breakdown)
  7. Layer Reference (all 9 layers)
  8. Comparison vs Other Layouts
  9. The Family — Cadenza · Cadence · Sonata · Coda
  10. Honest Verdict
  11. Future Variant — C1-bestV
  12. QMK Implementation

Design Concept & Approach

Sonata is the third in a family. Cadenza (36) is the daily driver. Coda (22) is the minimalist concept. Sonata sits between, asking: can a 28-key board offer the structural cleanliness of Coda (zero lateral stretch, no inner column) with the linguistic completeness of Cadenza (full alphabet on base, full HRM)?

The answer through v1.x was: yes structurally, but at a measurable SFB cost vs Miryoku-on-36. v1.0 oversold this. v1.1 corrected the marketing (1.79% honest SFB, "sibling, not successor"). v2.0 closes most of the SFB gap through a full alpha redesign that keeps the Colemak-DH home row but optimally reassigns every off-home letter.

The v2.0 process explicitly considered an alternative home row (the "C2" I↔O swap) and rejected it after full layout placement showed C1 dominates. It also explicitly considered a more aggressive variant (C1-bestV: U on L_pinky_bot, ~0.97% SFB) and chose the safer C1-balance for the released v2.0 — leaving bestV available as a v2.1 if the residual SU/US SFB on L_mid proves uncomfortable in daily use.

Physical Layout

4 finger columns × 3 rows × 2 sides + 2 thumb keys × 2 sides = 28 keys. No inner column. Column-stagger geometry. Custom 28-key PCB target. Below is the base layer — the same structural shape is reused on every layer that follows.

ZZ
L6TDWW
GG
MM
TDAAMeta
TDRRAlt
TDSSCtrl
TDTTShift
L5TDVV
L8TDCC
L7TDUU
DD
L1TDTabTab
L4TDSpcSpc
LL
YY
L6TDPP
JJ
TDNNShift
TDEECtrl
TDIIAlt
TDOOMeta
HH
L7TDFF
L8TDBB
L5TDKK
L3TDBspBsp
L2TDEntEnt

Design Principles

PrincipleRationale
Zero lateral stretchNo inner column. The lateral reach in Colemak-DH/Miryoku that hits the index inner-column key (B/N) is eliminated by removing the column entirely.
Bilateral HRM, all 8 home keysModifier-on-tap, letter-on-press. Both pinkies map to Meta (LGUI / RGUI) so Meta+Alt resolves cross-hand without HRM same-hand conflict.
4 utility thumbsEach thumb is a Tap Dance: tap = key, hold = layer. Tab/Overflow, Spc/Nav, Bsp/Num, Ent/Sym. Backspace and Enter are dedicated thumb keys, not combos.
9-layer architectureBase + 8 modal layers (Overflow, Sym, Num, Nav, Mouse, Fn, CLI, WM). Layer access via 4 thumb singles (Tab/Spc/Bsp/Ent) and 4 bilateral letter pairs (W+P for Fn, U+F for CLI, C+B for WM, V+K for Mouse). All access keys are Tap Dance for per-key timing control.
QMK keymap.c (not Vial)Unlimited tap-dances and macros, per-layer combos, full programmability. ~43 tap-dances + 16 macros (current spec).
Mixed-language alpha optimizationv2.0 alpha placement minimizes SFB across English + German + code. Colemak-DH home row preserved; column-mates redesigned from scratch.
Position-weighted ergonomic accountingPinky-top × 2.0, home × 1.0, bot × 1.2. Reflects that pinky-top is the only genuinely hard pinky position; pinky-home and pinky-bot are fine.

Letter Placement (v2.0 — preserved through v3.0)

The Colemak-DH home row is preserved unchanged. All 16 off-home letters were reassigned to minimize SFB while honoring three structural constraints: D cannot share a column with N (ND ~1.5% German), H cannot share a column with E (HE ~3% English), C cannot share a column with S (SC ~0.30%). U was the trickiest: it cannot go on R_pinky (recreates v1.1's IU disaster) or R_mid (EU is German same-finger). U landed on L_mid_bot — paying ~0.30% SU/US SFB as the cheapest U-on-left option.

Positionv1.1v2.0Reasoning
L_pinky_topZZunchanged — rarest left letter on hardest pinky position
L_pinky_botGVG's 2.5% wasted on pinky-bot; V (0.9%) cheaper
L_ring_topWWunchanged
L_ring_botMCC displaced from L_mid (was 0.30% SC SFB); RC ~0.15% is cheapest C-anywhere
L_mid_topFGF leaves; G fits with rare S-bigrams
L_mid_botCUU on left side; SU/US ~0.30% the major new column SFB
L_idx_topBMM is rare with T; B leaves the column
L_idx_botDDunchanged — D wants a strong-finger bot, TD ~0.10% is the cheapest D-anywhere on left
R_idx_topLLunchanged — L cannot go on R_mid (EL 0.4%) or R_pinky (IL 0.3%)
R_idx_botHHunchanged — H must avoid R_mid (HE 3%); cross-hand TH from L_idx is structural win
R_mid_topYYunchanged — also part of WM bilateral trigger
R_mid_botKFF pairs with E cheaper than K does; K moves to R_pinky_bot
R_ring_topVPP with I-home is essentially zero SFB
R_ring_botUBB with I-home is essentially zero SFB; U leaves the I-column entirely (the v1.1 disaster)
R_pinky_topJJunchanged — rarest letter on hardest pinky position
R_pinky_botPKK is rare with O-home; OK essentially never appears

Ergonomic Metrics

~1.27%
SFB rate (est.)
range 1.15–1.40
63.5%
Home row use
unchanged
16.1%
Pinky weighted
v2.0 ↓ from 18.7%
0%
Lateral stretch
structural
47.6 / 52.4
Hand balance L/R
within target
14.6%
Pinky raw
v2.0 ↓ from 16.9%
0.17%
Overflow load
X+Q on L_OVF home
10
Layers
L0 + 9
Honesty caveat: the SFB rate is an informed estimate from per-column bigram analysis using mixed En+De letter and bigram frequencies, with ±0.10 pp uncertainty per column. Range: 1.15% – 1.40%. Real verification requires a corpus pass against representative German + English + code text. The previously-published "0.20% SFB" claim from v1.0 was wrong and has been retired from all documentation.

SFB by Column — Honest Breakdown

The total SFB number alone hides which columns actually carry the cost. Here's the honest column-by-column breakdown for v2.0 (alpha grid unchanged in v3.0, so SFB metrics carry over):

ColumnLettersMain pairsv2.0 SFBv1.1 SFBΔ
L_pinkyZ·A·VAV/VA~0.08%0.07%+0.01
L_ringW·R·CRC/CR~0.20%0.20%0
L_midG·S·USU/US~0.35%0.35% (was SC)0
L_idxM·T·DTD/DT~0.08%0.22%−0.14
R_idxL·N·H(all rare)~0.08%0.05%+0.03
R_midY·E·FYE/EY · FE/EF~0.38%0.25%+0.13
R_ringP·I·B(all rare with I)~0.05%0.45% (V·I·U)−0.40
R_pinkyJ·O·K(all rare)~0.05%0.20%−0.15
Total~1.27%1.79%−0.52

The two remaining hotspots are L_mid (G·S·U) at ~0.35% — driven by SU/US, the cost of placing U on the left side without using the pinky — and R_mid (Y·E·F) at ~0.38% — the structural cost of E being so reactive that any non-trivial column-mate creates moderate SFBs. The R_ring fix (V·I·U → P·I·B) is the single biggest win and the structural justification for the v2.0 redesign.

Layer Reference

Sonata exposes nine layers (L0 base + eight modal layers). Every layer is rendered below as the full 28-key board. The gold-glowing key on each board is the one you press and hold to activate that layer; bilateral triggers light up both keys.

Active key
Layer activator (held)
No function on this layer
Access key — single or bilateral
Access key — combo (both required)
L1Triggers layer N
TDTap Dance (incl. HRM & access keys — mod/layer below or to the side)
MMacro
L0BaseAlways active

All 24 alpha letters on the 4×3 alpha grid. Home row preserves Colemak-DH (A·R·S·T / N·E·I·O); off-home letters reshuffled in v2.0 to minimize SFB. All 8 home-row keys are HRM (tap = letter, hold = mod). Thumbs carry Tab/Space/Bsp/Enter as tap with layer access on hold.

ZZ
L6TDWW
GG
MM
TDAAMeta
TDRRAlt
TDSSCtrl
TDTTShift
L5TDVV
L8TDCC
L7TDUU
DD
L1TDTabTab
L4TDSpcSpc
LL
YY
L6TDPP
JJ
TDNNShift
TDEECtrl
TDIIAlt
TDOOMeta
HH
L7TDFF
L8TDBB
L5TDKK
L3TDBspBsp
L2TDEntEnt
L1Overflow + InternationalHold Tab

Activated by holding Tab (left outer thumb). Home-row redesign: dead-key " on both index home positions (bilateral), ß on S_left_mid, € on R_left_ring (direct AltGr keycodes). Q on E_right_mid, X on I_right_ring. Umlauts on vowel positions as Tap Dance: tap = lowercase, hold = capital (ä/Ä on A_pinky, ö/Ö on O_pinky, ü/Ü on U_mid_bot).

Z
W
G
M
TDä·ÄA
R
ßS
"T
V
C
TDü·ÜU
D
Tab★ Tab
SpcSpc
L
Y
P
J
"N
QE
XI
TDö·ÖO
H
F
B
K
BspBsp
EntEnt
L2SymbolsHold Enter

Frequency-based redesign. Strong positions get common symbols: = on Spc thumb (strongest), * on T (left idx home), . on N (right idx home), , on E. Bracket pairs as Tap Dance on right top (tap=open, hold=close). String quotes as TD on I (right ring home). Less common chars (~ ^ \ %) on weaker positions. No overlap with L7 Code/CLI: backtick/pipe-macros stay there.

~Z
@W
#G
$M
\A
-R
+S
*T
^V
&C
%U
/D
_Tab
=Spc
TD(·)L
TD[·]Y
TD{·}P
TD<·>J
.N
,E
TD"·'I
;O
?H
:F
!B
K
BspBsp
Ent★ Ent
L3NumbersHold Bsp

Numpad layout on left hand: ring=1/4/7, mid=2/5/8, idx=3/6/9 — same spatial layout as the L_WM workspace grid. Right hand carries math operators on top, 0/comma/period/equals on home, and parentheses + € on bottom.

Z
7W
8G
9M
A
4R
5S
6T
V
1C
2U
3D
0Tab
SpcSpc
+L
Y
×P
÷J
N
,E
.I
=O
(H
)F
B
K
Bsp★ Bsp
EntEnt
L5MouseHold V or K

Mouse layer activated bilaterally via V (left pinky bot) or K (right pinky bot). Mouse buttons on thumbs: Tab=MB3 (middle), Bsp=MB2 (right), Enter=MB1 (left). Left home row carries pure modifiers for click-with-modifier (Shift-click etc.). Right top: scroll wheel. Right home: cursor movement. Note: Btn1/2/3 also still on right bottom — possibly redundant with thumb assignment.

Z
W
G
M
GuiA
AltR
CtlS
SftT
★ V
C
U
D
MB3Tab
SpcSpc
◀ whlL
▼ whlY
▲ whlP
▶ whlJ
◀ curN
▼ curE
▲ curI
▶ curO
Btn1H
Btn2F
Btn3B
★ K
MB2Bsp
MB1Ent
L6Function Keys + MediaHold W or P

Bilateral activation via W (left) or P (right) — both ring-top, low-frequency letters. F1–F9 on left in numpad positions (same spatial layout as L_NUM and L_WM — muscle memory transfers). F10–F12 on left pinky column. Media controls on right: prev/next/stop/PrtSc on top, mute/vol/play on home, brightness/eject on bottom.

F12Z
F7★ W
F8G
F9M
F11A
F4R
F5S
F6T
F10V
F1C
F2U
F3D
TabTab
SpcSpc
PrevL
NextY
Stop★ P
PrScJ
MuteN
Vol−E
Vol+I
PlayO
H
Brt−F
Brt+B
EjectK
BspBsp
EntEnt
L7Code & CLIHold U or F

Shell-tuned layer activated bilaterally via U or F (mid-bottom on both hands). Left home row: pipe and logical operators (deliberate order: T=| · S=&& · R=||). Right home: path/expansion/comparison/arrow Tap Dances (tap = short form, hold = expanded form). $? and 2>&1 on right bottom. Backtick TD on right pinky bottom for inline code and fenced blocks.

Z
W
G
M
.A
M||R
M&&S
M|T
V
C
★ U
D
TabTab
SpcSpc
L
Y
P
J
MTD/·~/N
MTD$()·${}E
MTD!=·==I
MTD=>·->O
M$?H
M2>&1★ F
B
TD`·```K
BspBsp
EntEnt
L8Tiling WMHold C or B

Bilateral activation via C (left) or B (right) — both ring-bottom, low-frequency enough for safe hold detection. Workspaces 1–9 on left in numpad layout (matches L_NUM spatially), WS10 on left Tab thumb (matches the 0 position on L_NUM). Float/Full on right top, PrtSc on R_pinky_top. Window focus arrows on right home, window-move arrows on right bottom. Kill window on right outer thumb.

Z
WS7W
WS8G
WS9M
A
WS4R
WS5S
WS6T
V
WS1★ C
WS2U
WS3D
WS10Tab
SpcSpc
FloatL
Y
FullP
PrScJ
◀ focusN
▼ focusE
▲ focusI
▶ focusO
◀ moveH
▼ moveF
▲ move★ B
▶ moveK
BspBsp
KillEnt

Comparison vs Other Layouts

MetricQWERTY/ZColemak-DHMiryokuCadenzaCodaSonata v3.0
Keys104+104+36362228
SFB rate6.31%1.28%1.28%~1.20%~0.90%~1.27%
Home row34%68%68%68%64%63.5%
Pinky raw~14%~6%~13.4%~5%0%14.6%
Pinky weighted~17.5%~7.7%~14.1%~6.5%0%16.1%
Lateral stretchVery highLowLowLowZeroZero
Inner columnYesYesYes (5-col)YesNoNo
BackspaceYesYesYes (thumb)Yes (thumb)No (combo)Yes (thumb)
German EUSame-row rollSame-finger ✗Same-finger ✗Same-finger ✗Different col ✓Different col ✓
German SCHColumn SFBColumn SFBColumn SFBOKCross-finger ✓
Meta + AltBoth LHMod keysHRM (LH conflict)Cross-hand ✓Both LH ring ✗Cross-hand ✓
Layers1–21–261399

The Family — Cadenza · Cadence · Sonata · Coda

Sonata is one of four related layouts in a single family. Each shares a Colemak-DH base and Tap Dance Home Row Mods; the differences come from key count, hardware target, and how much of the layer system can survive the reduction. The musical naming describes how each variant relates to the others: Cadenza is the demanding solo passage (the origin), Cadence the same piece adapted for a smaller hardware, Sonata the complete musical form (synthesis of the family ideas), and Coda the concluding distillation.

Development timeline

Sonata is not a simple descendant of any single layout. v3.0 is a synthesis point — it consolidates lessons from a parallel improvement of Cadenza and the build of Cadence. The seven-step chronology:

 ①  Cadenza v1.0          36 keys · Corne Choc · the origin
                           │
 ②  Sonata v1.0            28 keys · started — first reduction attempt
                           │
 ③  Coda v0.1              22 keys · started in parallel — distillation
                           │
 ④  Sonata v2.0            alpha-grid redesign (Sonata's own SFB work)
                           │
 ⑤  Cadenza (improved)     refinements to the 36-key origin
                           │
 ⑥  Cadence v1.5.0         34 keys · Ferris Sweep
                           │             port of the improved Cadenza
                           │
 ⑦  Sonata v3.0    ◄───────┴──── synthesis of:
                                    · learnings from ⑤ Cadenza improvements
                                    · learnings from ⑥ building Cadence
                                  applied to Sonata's layer-access architecture:
                                    · combos eliminated → bilateral letter pairs
                                    · all access keys + HRMs as Tap Dance
                                    · L_SYM rebuild by frequency

Coda's chronology is parallel to early Sonata work — it started as a separate "what's the absolute minimum" exploration and has stayed at concept stage (v0.1). Cadence was built specifically to bring the improved Cadenza muscle memory onto Ferris Sweep hardware — same design philosophy, two thumb keys less.

Side-by-side

PropertyCadenza v1.0.0Cadence v1.5.0Sonata v3.0Coda v0.1
Keys36342822
HardwareCorne Choc · RP2040Ferris Sweep(custom 28-key target)custom 22-key PCB · concept
Pinky usedYesYesYesNo
Inner columnYesYes (G/M only — letters + App/Menu)NoNo
Layers1313 active9 (Base + 8 modal)9
Tap dances43 / 4846 / 48~4334
Macros16 / 1616 / 321616
Combos0chord access (e.g. Bsp+Spc → Fn)0 (bilateral pairs instead)9
SFB rate~1.20%~1.20% (inherits Cadenza)~1.27%~0.90%
Pinky load (raw)~5%~5% (inherits Cadenza)14.6%0%
Firmware toolingVial / QMKVial / QMKQMK keymap.cQMK keymap.c only
StatusStable · daily driverActiveActive · v3.0 releaseConcept · v0.1

Cadence's SFB and pinky load not stated explicitly in its own documentation; values shown inherit from Cadenza by self-description ("same design philosophy, same muscle memory, two thumb keys less"). Cadenza/Coda metrics are taken from Sonata's own comparison table where the originals don't provide a direct number.

What's preserved across the family

ConstantNotes
Colemak-DH baseAll four layouts use the Colemak-DH home row (A·R·S·T / N·E·I·O). Sonata and Coda redesign the off-home letters; Cadenza/Cadence keep the standard Colemak-DH alpha placement.
Tap Dance HRMAll four use Home Row Mods configured as Tap Dance (tap = letter, hold = modifier). Sonata v3.0 makes this explicit per-key for tapping-term tuning.
Layer access via holdLayer entry is always tap-vs-hold on a base-layer key — never a separate modifier key. Thumbs carry the highest-frequency layer triggers everywhere.
Code & CLI layerEvery member ships a dedicated layer for shell/code work: pipe and logical operators on left home, path/expansion/comparison/arrow tap dances on right home.
Tiling WM layerWorkspaces 1–9 in a numpad spatial layout on the left hand, plus window-focus/move arrows on the right. WS10 placement varies by layout.
International layerDirect AltGr keycodes for ä/ö/ü/ß/€ — the dead-key dance is documented but not the primary path. Sonata v3.0 adds tap=lowercase / hold=uppercase Tap Dance for umlauts.
NEIO arrow conventionOne directional convention across Navigation, WM-focus, and WM-window layers (per Cadenza's design principles). Inherited by Sonata and Coda.

What's distinctive about each

Cadenza — the origin

"A tap dance for the typing elite." Three-zero-letter design: 36 keys, full pinky usage, full inner column for letters only (no layer content). 13 layers including dual WM layers, RGB controls, full firmware-control layer. 43/48 tap dances and 16/16 macros — the most fully-featured of the family. Available as an off-the-shelf Corne Choc Pro build.

Cadence — Sweep port of Cadenza

"Cadenza without compromise — minus two thumbs." 34 keys on the Ferris Sweep. Same Cadenza muscle memory; the two missing thumbs cascade into three structural decisions: Esc moves to D-position, Del to right thumb inner, F-Keys via a Bsp+Spc chord. Removes redundancies: no RGB controller (Sweep has none), the two near-identical WM layers merged into one. Adds a firmware-control layer accessed via a 500 ms pinky-top hold.

Sonata — the synthesis

"Form fully realized." 28 keys: keeps the pinky (unlike Coda) but drops the inner column entirely (unlike Cadenza/Cadence). v3.0 eliminates all combos in favor of bilateral letter pairs (W+P/Fn, U+F/CLI, C+B/WM, V+K/Mouse). All 12 access keys plus 8 HRMs configured as Tap Dance for per-key timing tuning. The alpha grid is a v2.0 redesign optimized for SFB across English + German + code.

Coda — the distilled minimum

"The distilled form of Cadenza." 22 keys: no pinky, no inner column. The 6 letters that won't fit on the 20-key alpha grid (P V Y / J X Q) live on an Overflow layer. Lowest SFB of the family at ~0.90% — partly because the 20-key grid forces optimal placement. 9 layers, 34 tap dances, 9 combos (including layer-specific). Custom PCB only — concept stage at v0.1.

Which one to pick

If you…Choose
Want an off-the-shelf board today (Corne Choc Pro available)Cadenza v1.0.0
Already own a Ferris Sweep and want the Cadenza muscle memory on itCadence v1.5.0
Are willing to commission a custom 28-key PCB and want the redesigned SFB-optimized alpha grid + bilateral layer accessSonata v3.0
Want the absolute minimum (no pinky, no inner column) and accept the concept-stage status + custom hardwareCoda v0.1

Honest Verdict

Sonata v3.0 vs Miryoku — sibling on the same Pareto frontier

v1.0 oversold this. v1.1 corrected to "sibling, not successor" with v1.1's 1.79% SFB trailing Miryoku's 1.28%. v2.0 closed most of the SFB gap — 1.27% (estimated) vs Miryoku's 1.28%, essentially tied within estimation noise. v3.0 inherits this alpha placement unchanged and adds layer-system improvements on top. The remaining differences are structural, not optimization gaps.

Sonata v3.0 wins on

  • Lateral stretch — zero (no inner column) vs Miryoku's low (>0)
  • German EU bigram — cross-hand vs Miryoku's same-finger
  • Meta+Alt — cross-hand vs Miryoku's HRM same-hand conflict
  • German SCH — cross-finger (no SFB) vs Miryoku's column SFB
  • Marginal: SFB rate (~1.27% vs 1.28%) — within noise; both pending corpus verification

Miryoku still wins on

  • Weighted pinky load (~14.1% vs 16.1%) — ~2 pp lower, the most significant remaining ergonomic delta
  • Home row use (68% vs 63.5%) — structural cost of 8 fewer keys
  • Hardware availability — Sweep / Corne off-the-shelf vs custom 28-key PCB
  • Documentation maturity & community track record
  • Alpha-layout transferability — Miryoku's Colemak-DH alphabet runs unchanged on any 36-key 3×5+3 board

Verdict: Sonata v3.0 is a credible sibling on the same Pareto frontier; it no longer trails on SFB. The remaining gaps (~2 pp pinky, ~4.5 pp home row) are intrinsic to the 28-key constraint. Pinky comfort + proven design → Miryoku on a Sweep. Lowest lateral stretch + German EU/SCH fidelity + cross-hand Meta+Alt + dedicated Backspace → Sonata v3.0.

Future Variant — the C1-bestV alpha redesign

Both v2.0 and v3.0 use the conservative C1-balance; the more aggressive C1-bestV (see process notes in sonata-spec.json under v2_0_proposals_explored). The bestV variant trades:

Current (C1-balance, v2.0–v3.0)bestV candidate (future variant)
U positionL_mid_bot (paired with S)L_pinky_bot (paired with A)
L_mid column SFB~0.35% (SU/US)~0.05% (FSG essentially zero)
L_pinky column SFB~0.08% (AV/VA)~0.12% (AU/UA)
Total SFB~1.27%~0.97%
Weighted pinky16.1%19.2%
bestV candidate layout (future variant):

 ┌───┬───┬───┬───┐          ┌───┬───┬───┬───┐
 │ Z │ W │ F │ M │          │ L │ K │ P │ J │
 ├───┼───┼───┼───┤          ├───┼───┼───┼───┤
 │ A │ R │ S │ T │          │ N │ E │ I │ O │
 ├───┼───┼───┼───┤          ├───┼───┼───┼───┤
 │ U │ C │ G │ D │          │ H │ Y │ B │ V │
 └───┴───┴───┴───┘          └───┴───┴───┴───┘

The decision rule for migrating: if after 3–4 weeks of daily use the residual SU/US SFB on L_mid genuinely interferes with typing flow, the bestV reshuffle is a small surgical change (six keys move) and the SFB win is meaningful. If the SU/US never bothers you, the current placement is the better long-term home because U-on-pinky is the riskier ergonomic bet.

QMK Implementation

config.h essentials

#define TAP_DANCE_ENTRIES 34
#define TAPPING_TERM 200
#define PERMISSIVE_HOLD
#define HOLD_ON_OTHER_KEY_PRESS
#define COMBO_TERM 40
#define COMBO_ONLY_FROM_LAYER

Layer enum

enum sonata_layers {
    L_BASE = 0,
    L_OVF,    // Tab-hold (single)
    L_SYM,    // Ent-hold (single)
    L_NUM,    // Bsp-hold (single)
    L_NAV,    // Spc-hold (single)
    L_MOUSE,  // V-hold OR K-hold (bilateral)
    L_FN,     // W-hold OR P-hold (bilateral)
    L_CLI,    // U-hold OR F-hold (bilateral)
    L_WM      // C-hold OR B-hold (bilateral)
};

Tap-dance breakdown

GroupCountNotes
Layer access (thumbs)4Tab/Overflow, Ent/Sym, Bsp/Num, Spc/Nav · term 200ms
Layer access (bilateral letters)8W+P (Fn), U+F (CLI), C+B (WM), V+K (Mouse) · term 200ms
Home row mods8A R S T N E I O · idx/mid term 200ms; ring/pinky term 250ms
Bracket pairs (on L_SYM)5(·), [·], {·}, <·>, "·'
Code actions (on L_CLI)5TD_PATH (/·~/), TD_EXP ($()·${}), TD_CMP (!=·==), TD_ARR (=>·->), TD_BTK (`·```)
Umlauts (on L_OVF)3ä/Ä on A_pinky, ö/Ö on O_pinky, ü/Ü on U_mid_bot
Workspaces (on L_WM)10Win+1..10 with Shift on hold
Total43

OS layout

US International. Umlauts via "+a/o/u (deadkey method); ß via RAlt+S; € via RAlt+5. Literal " via M9 macro (sends "+Space) to bypass the deadkey when needed.


MIT License · 2026 · one7two99 · github.com/one7two99/sonata
Based on Colemak-DH by stevep99 — home row preserved, column-mates redesigned in v2.0; layer-access architecture redesigned in v3.0.
Family: Cadenza (36) · Sonata (28) · Coda (22)