Designed by Siemen Terpstra in the late 1980s, based on Erv Wilson's microtonal keyboard designs (1967-), inspired by R.H.M. Bosanquet's Generalised Keyboard (1873) and Ivo Salzinger's Tastatura Nova Perfecta (1721).
Initial development by James Fenn with additions and modifications from Brandon Lewis, Bo Constantinsen, Chengu Wang, Ashton Snelgrove. Sampling credits to Scott Thompson, Tim Kahn, Carlos Vaquero, Dr. Ozan Yarman, Lars Palo, Soni Musicae.
MIDI version designed and programmed by Marc Sabat. Current version 3.1.0 (2026), released as Free/Libre and Open Source Software under GPL-3.0. Code on github: https://github.com/PLAINSOUND/hexatone. Discord: https://discord.gg/NGVTmDFPtf.
The Music Notation Project Wiki
WebMIDI and Sysex made User-Selectable
Controller database reactivity based on mode 2D geometry or bypass
TuneCell smoothing rebuilt
MIDI input — scale target mode: new Input Mode selector in MIDI settings: MIDI to Hex Layout (existing behaviour) or MIDI to Nearest Scale Degree. In scale mode, incoming MIDI pitch is matched to the closest degree of the active scale by cent distance, across any tuning or equave. User-configurable tolerance (default 25¢) and out-of-tolerance behaviour (Accept Best / Discard). Geometry, anchor, and transposition controls are hidden when scale mode is active.
MTS output — Dynamic Bulk Dump: new transport mode for synths that accept MTS bulk dumps but not single-note real-time SysEx. On each note-on, the carrier slot is patched in a maintained 128-note map and the full dump is sent before triggering the note. Shares carrier selection and MTS encoding with the existing real-time mode.
MTS output — Centered Static Bulk Dump: the static 128-note map is now automatically centered around the screen's center_degree. The centering algorithm searches MIDI notes 57–72 (A3–C5) for the note whose 12-EDO pitch class best matches the center pitch, maximising usable keyboard coverage. Sustained notes are protected from mid-phrase map updates; Auto-Send option resends the map whenever relevant settings change.
Expression: mod wheel (CC1) is now routed to the sample synth's lowpass filter, matching the MPE slide (CC74) path. Channel pressure (aftertouch) now broadcasts to all sounding voices simultaneously by default (was recency-stack only). Both are also forwarded to MIDI and MPE outputs.
iOS fix: audio now starts on the first touch without requiring the refresh button.
Changed octave-to-equave hardcoded logic to allow user-specified behaviour for other scales (no tranposition, transposition by a specified number of scale degrees, or by equave)
Independent retuneability of all scale degrees and reference
fixed input interoperability logic (mouse, touch, computer keyboard, MIDI)
Added MPE input mode with per-voice pitch bend and pressure routing
Under the hood fixes: refactored persistence and loading logic. Preparing for integration of scale math with xen-devs.
Supported 2D isomorphic controller geometries (auto-detected by MIDI device name):
- Lumatone https://www.lumatone.io/ — 280-key isomorphic surface, 5 blocks × 56 keys, channels 1–5 encode block position (0-55)
- C-Thru AXIS-49 https://www.c-thru-music.com/cgi/?page=prod_axis-49 — 14×7 isomorphic hexes, selfless mode (ch 1, notes 1–98)
- TS41 MIDI Keyboard https://tristanbay.com/gear/ts41-midi-keyboard/ — 41-EDO Bosanquet layout, single channel (ch 1, notes 1–126)
- Exquis (Intuitive Instruments) https://dualo.com/en/welcome/ — 61-note isomorphic hex grid, Rainbow Layout (Preset 6), MPE output on ch 2–15
- Tonal Plexus https://hpi.zentral.zone/tonalplexus - (ch 3-14, layout for 205edo)
In progress but untested:
- C-Thru AXIS-64 — 16×8 variant of the AXIS-49 layout, not tested
- Roger Linn Design LinnStrument 128 — 16×8 grid, one row per channel (ch 1–8), full MPE support
- Ableton Push 2 / Push 3 — 8×8 isomorphic pad grid, single channel, default 4ths tuning
- Novation Launchpad (Pro / X / Mini mk3) — 8×8 grid in programmer mode
Major reactivity fixes; MTS & MPE functionality expanded; scale resizing and Divide Octave/Equave features.
Updated UX; added latch sustain; moveable centre scale degree.
Added Scala/JSON IO; user presets; polyphonic aftertouch response with built-in sounds.
Marc Sabat forked from Ashton Snelgrove's webpack rebuild with rudimentary MIDI. Added full MIDI input and output path; Lumatone plug-and-play compatibility with channels-to-equaves logic; reshaped built-in presets; user-switchable Built-In/MTS/normal MIDI output options. Added and edited samples.
Terpstra Keyboard — hexagonal keyboard proof of concept.