Skip to content

Releases: one7two99/cadence

v1.12.3

08 May 21:00

Choose a tag to compare

fix: TD(58) backtick on L7 C, paren pair on L2 right home

Three coordinated changes around backtick handling and right-home
parenthesis access.

  • L7 C-pos: KC_GRAVE literal replaced by TD(58) — tap = dead-key
    backtick, hold = M19 (` + Space committed literal), double = M3
    (Markdown code-fence opener).

  • L2 E-pos hold: } reassigned to ). Pairs with TD(53) on N
    (hold = () to put parentheses on right home — prose parens
    (smileys, footnotes, asides) without bridging through L9. The
    displaced } remains reachable via L9 O-pos and L2 right-top '.

  • L1 D/H tap-hold cleared (was M3 — Markdown italic helper). M3
    is repurposed for the L7 code-fence helper above.

Macros: M19 added (` + Space dead-key commit). M3 rewritten from
three apostrophe-spaces (italic delimiter) to three backtick-spaces
(code-fence opener) — slot reused, semantic changed.

Resource budget: 52/64 TDs (+1), 20/32 macros (+1). Other counts
unchanged.

Configuration: Cadence-FerrisSweep_v1_12_3.vil

Classification: PATCH. Adds new TD/macro (MINOR territory) and
changes existing key behaviour at three positions (MAJOR territory),
but the changed paths were rarely-used variants on positions whose
primary action is unchanged. See CHANGELOG.md for the full
rationale.

v1.12.2

05 May 21:29

Choose a tag to compare

Cadence v1.12.2 — L5 Mouse Persistent Mode + L3 Numbers Calculator-Friendly Redesign

Two unrelated layer refinements bundled into one PATCH release. L5 Mouse gains a persistent mode via DF() (set default layer) while keeping the existing momentary trigger — Mouse Button 3 (middle-click for Linux paste) is now properly reachable. L3 Numbers is restructured into a self-contained calculator workflow with universally compatible ASCII operators, round brackets, and Tab on the Tab-thumb for spreadsheet navigation.

Classification: PATCH per Cadence's versioning policy. Both changes either fill previously empty slots or refactor positions in ways that improve daily-driver behaviour without invalidating muscle memory.


🖱 L5 Mouse — momentary plus persistent

L5 is now reachable two ways: the existing momentary trigger (Spc tap+hold) is unchanged; a new persistent path activates L5 as the default layer so both hands stay free for sustained mouse work.

Position v1.12.1 v1.12.2
U-pos (right middle top) empty KC_BTN3 — middle click, primary access
F-pos (left middle top) empty DF(5) — enter persistent mode
Spc-thumb (left) KC_BTN3 (unreachable dead code) DF(0) — exit persistent mode
Tab-thumb (left) KC_TRNS KC_TAB (explicit, works in both modes)

Workflow

Use case Gesture
Quick single middle-click (Linux paste) Spc tap+hold → tap U → release Spc
Sustained mouse session Spc tap+hold → tap F (DF(5)) → release Spc → both hands free → tap Spc (DF(0)) to exit
BTN3 + drag Hold U (direct keycode, drag works)

Why DF() and not TG() or a double-tap?

  • TG() (toggle) would have made the on/off direction implicit. With DF() the Spc thumb works symmetrically: tap+hold to enter (via the existing TD on Spc), tap to exit (via DF(0) once L5 is the default).
  • A Tap-Dance double-tap on Spc would have collided with sentence-end double-spaces in normal typing — a daily-life landmine.
  • DF() does not persist across reboots — a fresh power-cycle always returns to Base regardless of mode at shutdown. Feature, not bug.

The previous KC_BTN3 on the L5 Spc-thumb was dead code: while Spc is held to keep the layer active, pressing Spc cannot also produce BTN3. Cleaned up in this release.


🧮 L3 Numbers — calculator-friendly redesign

Three coordinated changes turn L3 from a strict numpad replica into a self-contained calculator workflow.

Numpad-namespace operators replaced by ASCII

Position v1.12.1 v1.12.2
L-pos KC_KP_PLUS +
U-pos KC_KP_MINUS -
Y-pos KC_KP_ASTERISK *
H-pos KC_KP_EQUAL =
,-pos KC_KP_COMMA ,
.-pos KC_KP_DOT .
/-pos KC_KP_SLASH /

KC_KP_* keycodes require a Num-Lock state that is unreliable on laptop hardware and absent on macOS, and KC_KP_COMMA produces locale-dependent output (decimal separator on German systems, thousands separator on others) when crossing app boundaries. ASCII operators are universally compatible.

Round brackets added — left pinky vertical pair

Position v1.12.1 v1.12.2
Q-pos (left pinky top) empty (
Z-pos (left pinky bot) empty )

Calculations like (2+3)*4 now complete on L3 without escaping to L9 Brackets — mnemonic: same finger, vertical pair.

Tab on the Tab-thumb

Position v1.12.1 v1.12.2
Tab-thumb (left) - Tab (Excel cell navigation)

Minus moves to U-pos in the operator block. The Tab-thumb regains its mnemonic identity during Numbers mode and supports fast cell navigation in spreadsheets without leaving the layer.


📊 Resource Budget

Resource v1.12.1 v1.12.2 Δ
Tap Dance slots 51 / 64 51 / 64 0
Macro slots 19 / 32 19 / 32 0
Layers with content 12 / 16 12 / 16 0
Reachable layers 11 11 0

No resource impact — all changes are reassignments or fills of previously empty slots.


📥 Installation

  1. Download Cadence-FerrisSweep_v1_12_2.vil from the assets below.
  2. Open Vial → File → Load saved layout → select the file.
  3. Save to keyboard.

Firmware requirement: A custom Vial-Sweep build with TAP_DANCE_ENTRIES = 64. The default Vial-Sweep firmware ships with 48 slots and is insufficient for Cadence (TD(57) is occupied).

OS layout: US International (Dead Keys). Cadence is optimised for English + German on this layout.


🔄 Migrating from v1.12.1

No retraining required for the L5 Mouse changes — the momentary path (Spc tap+hold + cursor work) is unchanged. The persistent mode and Mouse Button 3 are both new additions on previously empty positions; you can ignore them entirely if your workflow doesn't need them.

One muscle-memory adjustment for L3 Numbers: the Tab-thumb now produces Tab instead of - (minus). Minus is reached on U-pos in the operator block. The change is intentional — minus belongs with the other operators on the right hand, and Tab on the Tab-thumb supports Excel/spreadsheet workflows directly inside the Numbers layer. The numpad-to-ASCII operator change is invisible at the typing level (same finger, same operator) but produces universally compatible characters.


Verification

The configuration was verified against v1.12.1 with tools/vial-diff.py:

python3 tools/vial-diff.py \
    Cadence-FerrisSweep_v1_12_1.vil \
    Cadence-FerrisSweep_v1_12_2.vil \
    --names v1.12.1 v1.12.2 \
    -o diff-v1_12_1-to-v1_12_2.md

14 layout-cell changes total (10 on L3, 4 on L5). Tap Dance, Macro, Combo, Key Override, Settings, and Encoder sections are bit-identical to v1.12.1.


Full changelog

See CHANGELOG.md for the complete entry.

v1.12.0

05 May 18:21

Choose a tag to compare

Cadence v1.12.0 — Dead Key Hub, Layout Completeness

A completeness-driven release. L1 Overflow + International becomes the Dead Key Hub — a single layer that centralises all five US-International dead keys. Three previously-missing utility keys (ScrollLock, Pause/Break, PrintScreen) are added, and L7 Code & CLI gains a literal-quote thumb cluster. Plus a new repository tool for diffing Vial configurations.

Classification: MINOR per Cadence's versioning policy. Every layout change fills a previously empty KC_NO slot — no actively-used key changes behaviour, no muscle memory from v1.11.1 is invalidated.


✨ Highlights

L1 — Dead Key Hub

L1 is now the consolidated mental model for diacritic input: if I want a diacritic, I go to L1. All five US-International dead keys reachable from one layer:

Position Keycode Dead key for
P (left index outer top) · L (right index outer top, bilateral) KC_GRAVE ` → à è ì ò ù
, (right middle bot) LSFT(KC_GRAVE) ~ → ã ñ õ
. (right ring bot) LSFT(KC_6) ^ → â ê î ô û
D · H (bilateral, TD34) KC_QUOTE ' → á é í ó ú (unchanged)
T · N (bilateral, TD33) LSFT(KC_QUOTE) " → ä ë ï ö ü (unchanged)

Workflow: tap dead key on L1 → release Tab → tap vowel on Base Layer.

L4 Navigation — keyboard completeness

Position Function
Q (left pinky top) ScrollLock
X (left ring bot) Pause / Break (Ctrl+Pause = Break interrupt)

L6 Fn+Media — PrintScreen

Position Function
left Spc-thumb PrintScreen

Grouped with Mute / Volume / Brightness as system-output. Reachable from both bilateral L6 access modes (Hold F or Hold U) without finger conflict.

L7 Code & CLI — Quote Thumb Cluster

Mnemonic: thumbs = quoting.

Position Keycode
left Spc-thumb '
left Tab-thumb "
right Bsp-thumb ` (redundant with C-position — kept for muscle memory)
right Ent-thumb Tab (shell auto-complete sequences)

🧹 Housekeeping

  • TD(51) cleared — was defined as tap=' / hold=" but only placed in the deprecated L2 layer; redundant with TD(33) and TD(34) on L1, which already provide bilateral access.
  • L2 deprecated layer content cleared — all 23 occupied positions reset to KC_NO. The slot is retained for Vial format compliance.

📝 Documentation

  • L1 Q/X overflow letters are now explicitly documented as Sonata-migration preparation — Sonata (the 28-key sister project) drops the inner column on its base layer, so Q and X live on L1 there. Cadence mirrors this for transferable muscle memory.
  • Backtick reachability paragraph corrected — earlier versions claimed backtick was reachable on L12 right ring top, which never matched the actual .vil configuration.

🔧 Tooling

  • New tools/vial-diff.py — a generic Vial config diff utility. Takes two .vil files, produces a Markdown report describing layout, tap dance, macro, and metadata changes. Layout-agnostic (supports Colemak-DH and QWERTY position labels). Runs from the command line:
  python3 tools/vial-diff.py OLD.vil NEW.vil -o report.md

📊 Resource Budget

Resource v1.11.1 v1.12.0 Δ
Tap Dance slots 52 / 64 51 / 64 −1
Macro slots 19 / 32 19 / 32 0
Layers with content 13 / 16 12 / 16 −1
Reachable layers 11 11 0

📥 Installation

  1. Download Cadence-FerrisSweep_v1_12_0.vil from the assets below.
  2. Open Vial → File → Load saved layout → select the file.
  3. Save to keyboard.

Firmware requirement: A custom Vial-Sweep build with TAP_DANCE_ENTRIES = 64. The default Vial-Sweep firmware ships with 48 slots and is insufficient for Cadence (TD(57) is occupied).

OS layout: US International (Dead Keys). Cadence is optimised for English + German on this layout.


🔄 Migrating from v1.11.1

No action required. Every change is additive — fills a previously empty position. The keys you used in v1.11.1 still do exactly what they did before. The new keys are simply available on positions that were KC_NO.


Full changelog

See CHANGELOG.md for the complete entry.

For a machine-readable diff between v1.11.1 and v1.12.0:

python3 tools/vial-diff.py \
    Cadence-FerrisSweep_v1_11_1.vil \
    Cadence-FerrisSweep_v1_12_0.vil \
    --names v1.11.1 v1.12.0 \
    -o diff-v1_11_1-to-v1_12_0.md

v1.11.0

03 May 14:27

Choose a tag to compare

Cadence v1.11.0 — Mouse-on-thumb, Tab-as-trigger, redesigned Symbol layer

Release date: 2026-05-03

This release addresses two pain points that surfaced during daily use of v1.9.0, plus a complete redesign of the Symbol layer.

✦ Highlights

  • 🖱️ Mouse moved to Spc tap+hold — solves the v1.9 Home Row Mod blocking issue. Mouse activation no longer occupies any letter finger, so Ctrl+Click and Shift+Click work naturally during multi-select operations.
  • ⌨️ Tab becomes a Tap-Dance carriertap = Tab, hold = International. Tab as a character remains directly available; umlauts now reachable via the strongest single-thumb hold.
  • 🎵 L12 Symbols (NEW) — completely redesigned symbol layer with right-thumb access asymmetry, replacing the deprecated L2. Specification shared with Sonata v3.x via dedicated L4-Symbol-Layer.html.
  • 🔣 L9 Brackets relocated to X+. — moved from D+H bilateral. Lower-frequency letters give cleaner hold-detection without per-key tapping-term tuning.

✦ The Spc Tap-Hold-TapHold pattern

The central innovation of v1.11. A single thumb position now carries three layer functions:

Action Result
Spc tap Space (normal word separator)
Spc hold L4 Navigation (arrows, word jumps, page navigation)
Spc tap+hold L5 Mouse (cursor, scroll, mouse buttons)

The tap+hold action triggers when Spc is tapped, then immediately pressed again and held. This three-way differentiation eliminates v1.9's HRM-blocking issue: on Mouse, both hands are free to use Home Row Mods (Ctrl for multi-select, Shift for range-select, Alt for keyboard navigation in file dialogs).

✦ Thumb trigger redesign

Thumb v1.9 behaviour v1.11 behaviour
Spc (L outer) tap=Space, hold=L1 International tap=Space, hold=L4 Navigation, tap+hold=L5 Mouse (TD(21))
Tab (L inner) tap=Tab, hold=L4 Navigation tap=Tab, hold=L1 International (TD(10))
Bsp (R outer) tap=Bsp, hold=L2 Symbols tap=Bsp, hold=L12 Symbols (LT(12))
Ent (R inner) tap=Ent, hold=L3 Numbers unchanged

✦ Layer access reassignment

Layer v1.9 access v1.11 access
L1 Overflow + International Hold Spc Hold Tab
L2 Symbols Hold Bsp no trigger (replaced by L12)
L3 Numbers Hold Ent Hold Ent (unchanged)
L4 Navigation Hold Tab Hold Spc
L5 Mouse Hold F · Hold U bilateral Spc tap+hold — fixes HRM blocking
L6 Fn+Media Hold C · Hold , bilateral Hold F · Hold U bilateral
L7 Code & CLI Hold W · Hold Y bilateral unchanged
L8 Tiling WM Hold Z · Hold / bilateral unchanged
L9 Brackets Hold D · Hold H bilateral Hold X · Hold . bilateral
L11 Firmware Q · ' long-hold unchanged
L12 Symbols (NEW) Hold Bsp

✦ L12 Symbols — design highlights

The new symbol layer is built on a key insight: since the right thumb anchors the layer trigger (Bsp held), the right hand is partially occupied. High-frequency symbols are therefore placed on the freer left hand and on the top rows of the right hand; the right bottom row is intentionally left transparent (worst region during right-thumb anchoring).

Position assignments:

  • Thumbs (most-frequent operators)- on Spc-thumb, = on Tab-thumb
  • Left home (high-frequency symbols)% on A, + on R, ! / & TD on S, * / @ TD on T
  • Right top (bracket pairs as Tap Dance)( / ) on L, [ / ] on U, < / > on Y, { / } on '
  • Right home (prose punctuation), / ( TD on N, . / } TD on E, ' / ^ TD on I, ; on O
  • Other~, ?, #, $ on left top; :, _, / \ TD on left bottom

Six new Tap Dances (TD(52)–TD(57)) implement the symbol pairs.

The full design rationale, position-quality penalty matrix, and alternative configurations considered are documented in L4-Symbol-Layer.html. The "L4" in the filename refers to the abstract Symbol-Layer concept; in Cadence v1.11 it is implemented as L12.

✦ Why v1.11.0 and not v1.10.0?

A v1.10.0 internal Vial revision was created during the redesign of the Mouse and Symbol layers. v1.10 surfaced configuration anomalies during verification (a dead MO(14) trigger on F, three concurrent L1 triggers, single-handed L6 access) that did not justify a public release. v1.11 is the first revision in this series that resolves all of these issues and matches the intended design cleanly.

Publishing only v1.11 (and not the intermediate v1.10 test revision) preserves the 1:1 alignment between the published version number and the configuration file name — analogous to v1.8 itself being the first public release in its series rather than v1.6.

✦ Migration notes from v1.9.0

The biggest mental shift is the swap of Spc and Tab:

  • Spc → cursor work (Navigation + Mouse on the same key)
  • Tab → special characters (International)

Beyond that:

  • Mouse via Spc tap+hold — tap Spc, then immediately press Spc again and hold. Activation is ~300 ms (slightly slower than v1.9's hold) but eliminates the HRM-blocking issue that made multi-select awkward.
  • Brackets moved to X+. — retrain muscle memory from D+H. Hold-detection should feel cleaner because X and . are far less frequent than D and H.
  • Repeated Tab works inside Navigation (Spc-hold) and Code & CLI (W/Y-hold) layers via Ent-thumb. Use those layers for multi-Tab workflows.
  • F and U lose their Mouse hold — they now trigger L6 Fn+Media (instead of v1.9's L5 Mouse). Watch out: muscle memory of "F-hold = Mouse" needs to retrain to "F-hold = Fn-Keys".
  • D and H lose their MO holds — plain letter keys now. Bracket activation moved to X and ..
  • C and , lose their MO holds — plain letter keys now. L6 access moved to F and U.
  • L2 Symbols layout invalidated — relearn the new L12 layout via the dedicated documentation. Symbol positions for thumbs (- on Spc, = on Tab) are unchanged.

Expected adaptation period: 2–3 weeks of daily typing for the new triggers to feel natural.

✦ Resource budget

Resource Used Available Free
Tap Dance slots 54 64 10
Macro slots 19 32 13
Key Overrides 0 32 32
Combos 0 32 32
Layers 13 in firmware (11 reachable) 16 3

✦ Firmware

  • TAP_DANCE_ENTRIES remains at 64 (unchanged from v1.8). v1.11 uses 54 of 64 TD slots, with the highest used slot being TD(57).
  • The default Vial-Sweep firmware ships with 48 TD slots — a custom Vial-QMK build with TAP_DANCE_ENTRIES = 64 is required.
  • All Vial settings (mouse / scroll behaviour) carry over unchanged from v1.5–v1.9.

✦ Installation

  1. Flash a Vial-QMK firmware build with TAP_DANCE_ENTRIES = 64 to both halves.
  2. Open Vial, File → Load saved layout, select Cadence-FerrisSweep_v1_11_0.vil.
  3. Set OS keyboard layout to US International (required for AltGr-based umlauts and dead keys).

See the README for detailed installation steps.

✦ Documentation

  • docs/index.html — full layer reference with keyboard visualisations for all 13 layers, complete Tap Dance and Macro tables, design rationale.
  • docs/L4-Symbol-Layer.html — dedicated specification for the L12 Symbol layer, shared with Sonata v3.x.
  • CHANGELOG.md — full change history.
  • ROADMAP.md — planned milestones including v1.11.x stabilisation items and v2.0 QMK migration.

✦ Files in this release

configuration/Cadence-FerrisSweep_v1_11_0.vil    Vial configuration file
docs/index.html                                  Layer documentation
docs/L4-Symbol-Layer.html                        L12 Symbol layer specification
README.md                                        Updated for v1.11.0
CHANGELOG.md                                     v1.11.0 entry added
ROADMAP.md                                       v1.11.x stabilisation plan

Full changelog: see CHANGELOG.md for the v1.11.0 section.

Compare to previous release: v1.9.0...v1.11.0

v1.8.0

02 May 11:41

Choose a tag to compare

Cadence v1.8.0 — Direct umlaut access on L10

Three new Tap Dances on the International layer give you direct
single-press access to ä / ü / ö (tap) and Ä / Ü / Ö (hold) on
the mnemonic A / U / O positions. The previous " dead-key path
remains available unchanged.

Cadenza without compromise — minus two thumbs, plus three umlauts.


✨ What's new

L10 International — direct umlaut Tap Dances

TD Position Tap Hold Macro
TD(48) left A-position RAlt+Qä M16 → Ä Shift+RAlt+Q
TD(49) right U-position RAlt+Yü M17 → Ü Shift+RAlt+Y
TD(50) right O-position RAlt+Pö M18 → Ö Shift+RAlt+P

The mnemonic placement (ä on A, ü on U, ö on O) means the
lookup is direct, not positional. Bilateral access is preserved: hold
D or H to enter L10, then tap the umlaut from the opposite hand.

Why hold = macro, not a single keycode? Tap Dance hold slots accept
one Vial keycode, but a capital umlaut requires two simultaneous
modifiers (RShift + RAlt) plus the letter. Macros M16 / M17 / M18
are the cleanest expression of that sequence and produce identical USB
HID output.


🔢 Why v1.8.0 and not v1.6.0?

The version jump skips two MINOR increments because three internal Vial
configuration revisions (v1.6, v1.7, v1.8) were used to test different
combinations of Tap Dance placements, hold encodings, and macro timings
for the umlaut work. v1.6 and v1.7 surfaced issues during
daily-driver use:

  • false triggers on fast typing
  • modifier-stickiness on capital-letter holds
  • edge cases in the interaction between L10 hold-macros and the home-row HRM

v1.8 is the first revision that resolves all of these and behaves
cleanly in extended use. Publishing only v1.8 (and not the intermediate
test revisions) preserves the 1:1 alignment between the published
version number and the configuration filename — analogous to v1.5.0
itself being the first public release rather than v1.0.0.


🔧 Firmware requirement

TAP_DANCE_ENTRIES increased from 48 to 64. Required because v1.8
uses TD(50). The default Vial-Sweep firmware ships with 48 slots, so a
custom build is required:

// keyboards/ferris/sweep/keymaps/vial/config.h
#define TAP_DANCE_ENTRIES 64
qmk compile -kb ferris/sweep -km vial

15 TD slots remain free for future high-value action keys.


📦 Resource budget

Resource v1.5.0 v1.8.0 Available
Tap Dance 46 49 64
Macro 16 19 32
Layers 13 13 16
Combos 1 1 32
Key Overrides 0 0 32

🛠️ Upgrading from v1.5.0

  1. Flash the firmware with TAP_DANCE_ENTRIES = 64 (see above).
  2. Open VialFile → Load saved layout → select the attached
    Cadence-FerrisSweep_v1_8_0.vil.
  3. Verify OS layout is set to US International — required for
    RAlt+Q/Y/P → ä/ü/ö (and Shift+RAlt+Q/Y/P → Ä/Ü/Ö).
  4. Test the new positions: hold D (or H), then tap A for ä,
    U for ü, O for ö. Hold the umlaut TD instead of tapping for
    the capital.

No muscle-memory changes. Every other key on every other layer behaves
exactly as in v1.5.0.


🗂️ Documentation refresh

  • docs/index.html rebuilt for v1.8.0 — single-page reference with
    keyboard visualisations for all 13 layers (auto-generated from the
    .vil), full Tap Dance and Macro tables, design philosophy, firmware
    notes
  • The standalone cadence-viewer-v1.5.0.html is removed — the
    interactive layer reference is now part of docs/index.html. One
    source of truth, less to keep in sync

✅ Unchanged from v1.5.0

L0 – L9, L11, L12 layers · all home-row mods and tipping terms ·
all M0 – M15 macros · the M-Btn combo · all Vial settings.

A user on v1.5.0 can upgrade to v1.8.0 without relearning anything.


📝 Full changelog

See CHANGELOG.md for the detailed change log,
including the inherited Cadenza heritage and the pre-release Sweep
adaptation history.


Asset: Cadence-FerrisSweep_v1_8_0.vil
License: MIT · 2026 · one7two99

v1.5.0

01 May 20:50

Choose a tag to compare

Initial release after lots of changes, tweaks to make cadenca final.
First flash the firmware to your ferris sweep by copying the .uf2 file to the keyboard.
Then launch VIAL and load the keyboard layout .vil.
Make sure to review the tabs for macros and tap dances and hit he save button there.
In case of any problems - open a github issue.