Changelog

A record of every DrumStrum release — what changed and why.

Docs/Website Updates October 2026
  • User Manual published and updated to beta186 — full feature coverage including Controller Notes, pad action reference, SVG signal-flow diagrams, and BopPad section
  • FAQ expanded and updated — new entries covering Why DrumStrum, controller mapping, BopPad, DAWless/without-a-computer use, videos, and more
  • Fixed expired Discord invitation link
  • Windows app now available for download (early release — lightly tested)
beta186 September 10, 2026
  • BASS_ROOT_FIFTH sustains until chord released (chord-gated)
beta185 September 10, 2026
  • BASS_VELOCITY_POSITION scales by chord size instead of hardcoded 7
beta184 September 10, 2026
  • BASS_PEDAL sustains until chord is released (chord-gated)
beta181 – beta183 September 10, 2026

Internal builds / maintenance updates.

beta180 September 10, 2026
  • Add transposeInputDevice config field with JSON serialization
  • Route transpose through transposeInputDevice instead of chordInputDevice
beta175 – beta179 September 09, 2026

Internal builds / maintenance updates.

beta174 September 07, 2026
  • Boppad zone analyzer scaffold
  • Boppad analyzer data model and zone decode
  • Boppad analyzer statistics grid
  • Boppad analyzer SVG pad diagram
  • Boppad analyzer MIDI connection and event processing
  • Boppad analyzer hit animation badges
  • Boppad analyzer zone spread diagnostic
  • Boppad analyzer CSV export and reset
beta172 – beta173 September 06, 2026

Internal builds / maintenance updates.

beta171 September 04, 2026

Stability fixes in progress — chasing down issues introduced in recent builds.

beta166 – beta170 September 04, 2026

Internal builds / maintenance updates.

beta165 September 04, 2026
  • Add NoteToCCRule/CCToNoteRule structs and NOTE_CC_CONVERT ActionCategory
  • Serialize/deserialize NOTE_CC_CONVERT rules in Config
  • NOTE_CC_CONVERT roundtrip test buffer and controller expectations
  • Implement NOTE_CC_CONVERT routing in MidiRouter
  • Note/CC Convert transformer UI
beta154 – beta164 September 04, 2026

Internal builds / maintenance updates.

beta153 September 02, 2026
  • Refresh from map updates labels and reports added/renamed counts
beta152 September 01, 2026
  • Raise MAX_CONNECTIONS from 64 to 128
beta151 September 01, 2026
  • Copy transformer button — beta151
beta144 – beta150 August 16, 2026

Internal builds / maintenance updates.

beta143 August 06, 2026
  • Use curl.exe in build-win.ps1 to avoid PowerShell alias
beta130 – beta142 August 02, 2026

Internal builds / maintenance updates.

beta129 July 29, 2026
  • Remove MUI icon from installer (path not available at build time)
  • Correct ARTEFACTS path in installer for repo-root invocation
  • Use desktop\dist as installer output directory
  • Installer paths relative to desktop/ (script location)
  • Windows build script + fix WinSparkle appcast URL
  • Expand StrumEvent brace-init for MSVC compatibility
  • Build only DrumStrum target on Windows (skip test_core MSVC issue)
beta120 – beta128 July 28, 2026

Internal builds / maintenance updates.

beta119 July 26, 2026
  • Add alternate note values 8 (Random) and 9 (Play All) to POSITION action
  • Skip octaveProbability in alternate=9 Play All path, matching PLAY_ALL behavior
  • PadActivity emission and padTest bridge handler
  • Use controllerId (not controllerIdx) in padActivity bridge
  • Pad activity flash, play button, row cleanup, alternate Random/Play All
  • Correct controller index mapping in playPad and pad-activity listener
beta113 – beta118 July 26, 2026

Internal builds / maintenance updates.

beta112 July 24, 2026
  • Open http/https links in system browser from About tab
  • Trace starts paused; clarify device dropdown in empty state
  • Preset _meta — savePreset wraps JSON, listPresets returns objects, updatePresetDescription
  • ConfigWindow wires savePreset description and updatePresetDescription event
  • Preset rows show description + date; inline edit; description at save time
  • Commit preset description on blur, cancel cleanly on Escape
  • Use index-based element IDs for preset desc editing (special chars in names)
  • Use index-based dispatch for preset load/overwrite/delete buttons
beta111 July 24, 2026
  • About tab bio section in two columns
beta110 July 24, 2026
  • Add performance note to Trace tab controls bar
  • About tab — larger body text, bio paragraph in separate box
beta109 July 24, 2026
  • Trace Clear preserves selected device filter
beta108 July 24, 2026
  • MidiEngine learn + trace state and public API
  • Bounds check and comment clarity in MidiEngine learn/trace
  • ConfigWindow bridge handlers for MIDI learn and trace
  • MIDI learn button on pad note inputs
  • Null guard on drumstrum-midi-learn payload
  • MIDI Trace tab with live event stream and device filter
  • Trace auto-scroll respects manual scroll position; pause buffers events
beta99 – beta107 July 23, 2026

Internal builds / maintenance updates.

beta98 July 20, 2026
  • Add chordExpandEnabled and chordExpandCC config fields with serialization
  • Implement Chord Expand in MidiRouter — CC-selectable chord type injection
  • Chord expand latch path should freeze expanded chord, not clear it
  • Add in-class init for _chordExpandSynthNotes, document debounce limitation
  • Add Chord Expand UI controls to global settings panel
beta97 July 18, 2026
  • Add 6 new bass action types to enum + bassPhraseTimeoutMs config
  • Add BASS_NONE to actionToStr/strToAction round-trip
  • BASS_VELOCITY_POSITION and BASS_APPROACH action types
  • ApproachNote returns 255 sentinel when root is MIDI 0; clarify _lastTriggerMs comment
  • BASS_WALKING_THIRDS_DIATONIC and BASS_WALKING_THIRDS_CHROMATIC
  • BASS_WALKING_PHRASE_DIATONIC and BASS_WALKING_PHRASE_CHROMATIC with chord-change guard
  • Walking bass variations in UI — ACTIONS dropdown + phrase timeout field
  • Add bassPhraseTimeoutMs to CC_ROUTER default object in addController
beta96 July 16, 2026
  • Add minVelocity field to PadMapping and NoteMapConnection
  • Serialize minVelocity for pads and connections
  • Velocity gate in fireAction(); test_velocity_gate_strummer
  • Velocity gate in onRemapNoteOn(); test_velocity_gate_note_remap
  • LoadDefaults in note remap gate test; clarify gate return comment
  • Min Vel column in Strummer pad table
  • Min Vel column in Note Remap pad table; round-trips through connections
  • Pass minVelocity through connections map in load paths; init in addPad
beta84 – beta95 July 08, 2026

Internal builds / maintenance updates.

beta83 July 07, 2026
  • Update current beta to 82 in CLAUDE.md
beta72 – beta82 July 06, 2026

Internal builds / maintenance updates.

beta71 June 29, 2026
  • Add chordDebounceMs config field with JSON serialization
beta65 – beta70 June 26, 2026

Internal builds / maintenance updates.

beta64 June 25, 2026
  • Increase config JSON buffer from 16K to 64K
beta63 June 25, 2026
  • Rename skipPct→octaveProbability, add VELOCITY_STRUM enum, add applyOctaveProbability helper
  • Rename skipPct→octaveProbability, add VELOCITY_STRUM enum + serialization
  • Rename skipPct→octaveProbability in serialization, add VELOCITY_STRUM to action serialization, add roundtrip tests
  • FireAction() — remove skipPct skip-hit, add applyOctaveProbability, add VELOCITY_STRUM case
  • FireAction() — remove skipPct skip-hit, add applyOctaveProbability, add VELOCITY_STRUM case
  • UI — add Velocity Strum to actions, rename Oct Prob% column, grey alternate for velocity strum
  • UI — add Velocity Strum to actions, rename Oct Prob% column, grey alternate for velocity strum, migration fallback for skipPct
  • Overview side-by-side layout fits one screen; note hint inline with number
beta52 – beta60 June 22, 2026

Internal builds / maintenance updates.

beta51 June 14, 2026
  • Restore repeatOctaves accidentally removed, add BASS→DRUMSTRUM migration guard
  • Remove stale Task 2 placeholder comment in toBassRange
  • Comment zero-pad legacy bass migration — BassTransformer not allocated without pads
  • Update stale comment in handleNoteOn — BASS_* routing now live
  • Remove stale Task 5 comment, cancel active bass notes on config hot-reload
  • Remove Bass tab — BASS_* in Strummer pad table, bass durations in Setup, delete button in header
  • Update stale pad table comment — BASS_* now first-class in Strummer
  • Three beta50 bugs — bassOctave migration, lastBassNote pre-override, looper None action
beta48 – beta49 June 13, 2026

Internal builds / maintenance updates.

beta47 June 12, 2026
  • JsonArrayConst type check in controllerFromJson — pads and connections silently dropped since beta43
beta45 June 12, 2026
  • Add DrumStrumPlatform.h shim for desktop build
  • Add MidiInterface abstraction, wire into MidiRouter
  • Wire BassTransformer through MidiInterface
  • TeensyMidiInterface — Teensy compiles with MidiInterface abstraction
  • Task 5 — JUCE submodule, CMakeLists, minimal app stub, unit tests
  • JuceMidiInterface routes MIDI sends to juce::MidiOutput
  • MidiEngine with virtual MIDI port, physical device routing, core loop
  • ConfigWindow with WebBrowserComponent IPC, config.html transport abstraction
  • Menu bar icon, right-click menu, config window, MIDI engine wired up
  • Add Build Desktop App, Run Desktop App, Run Core Tests VS Code tasks
  • Use mouseDown for tray icon — JUCE macOS fires mouseUp with withoutMouseButtons()
  • Any click on tray icon shows menu (config accessible via Open Config item)
  • Inject LSUIElement via post-build PlistBuddy — hides app from Dock
  • Activate app foreground on config open (LSUIElement background agent)
  • Use showDropdownMenu for tray icon — showMenuAsync conflicts with mouseDown
  • Replace SystemTrayIconComponent with native NSStatusItem + NSMenu
  • Add virtual MIDI input port — Ableton can now send MIDI into DrumStrum
  • Add charset=utf-8 to resource provider content-type — fixes arrow rendering
  • Extend LooperAction with PANIC, FRIPPERTRONICS_TOGGLE, NONE
  • Add looperDoubleTaps to Config struct and serialization
  • MidiLooper fields and applyConfig for double-tap support
  • Configurable double-tap detection in MidiLooper, remove hardcoded CLEAR→panic
  • PANIC and FRIPPERTRONICS_TOGGLE looper actions
  • Looper double-tap actions UI
  • Hide looper double-tap wrap when looper is disabled
  • Merge double-tap column into looper controls table
  • Replace em-dash in double-tap NONE label with ASCII hyphens
  • Looper enable checkbox id collision, double-tap save silent drop
  • Queue eviction stuck notes, delete dead handleCCStrum, per-controller lastCCStrumNote
  • Version 0.43.0 to match beta44 build number
  • Build.sh script, fix Main.cpp hardcoded version