Skip to content

Button / switch rig component

📋 Planned · v0.6.0

Footswitches advance patches. Expression pedals control parameters. But the panic button, the tap-tempo trigger, the skip to next song cue — those need a generic binary control. This is that control.

What it is

A rig component (same family as keyboards, footswitches, expression pedals, pads) that represents a single physical button or switch + the action it fires. Configurable in Setup mode; placeable as a widget in Perform mode.

The component is the controller abstraction, not the patch graph node — the patch graph references the rig component when it wants to react to its events. This is the same model as every other rig primitive (see Rig component catalog).

Configurable actions

Each button/switch has one configured action. The v0.6.0 dropdown ships only the actions whose engine support is in place — stubbed/coming-soon dropdown entries make for confusing UX (refined 2026-05-28). Actions whose engine support arrives later land in the dropdown in that later version’s release.

Actions in the v0.6.0 dropdown

ActionWhat it does
Next PatchAdvance to next patch in current song
Prev PatchStep back one patch
Jump to PatchDirect jump to a specified patch (by name, number, or id)
Next SongAdvance to first patch of next song
Prev SongStep back one song
PanicEngine-level all-notes-off + sustain-off across all channels (depends on #3)
Toggle Performance LockGo Live / End Show
Toggle Bus MuteMute / unmute a specified bus (FOH / IEM / etc.)
Toggle WidgetShow / hide a named widget in the current layout
Open Plugin GUIOpen the GUI for a specific plugin in the active patch

Actions that arrive in later versions

ActionLands in
Tap Tempov0.8.0 (engine tempo support)
Start Transportv0.8.0
Stop Transportv0.8.0
Send MIDI Messagev0.15.0 (extension API needed for named-message routing)
Custom Macrov0.15.0 (extension API)

Each lands in its target version’s dropdown — none ship as inert “coming soon” entries in v0.6.0.

Hardware sources

A single component can bind to one or more of:

  • Hardware MIDI — a specific note or CC from a specific device + channel, captured via Learn
  • Keyboard shortcut — a key combo on the laptop keyboard
  • On-screen button — tap/click in Perform mode (always available — the widget itself is the source)
  • Stream Deck button — via the v0.15.0 Stream Deck extension

Multiple bindings simultaneously is the normal case — same action on a footswitch AND a Stream Deck button.

Per-component config (full Part 7 spec)

  • Type — momentary / latching / toggle
  • Action — see table above
  • Debounce time — ms, default 50
  • Long-press action — optional secondary action, with threshold ms (default 800 ms)
  • Double-tap action — optional, with window ms (default 350 ms)
  • LED feedback — for latching/toggle modes, echoes state back to the bound device via matching CC/note (v0.6.0 baseline). Sysex pattern library is v1.x.
  • Polarity invert — some pedals are normally-closed; flip the sense
  • Throttle — max activations per second (defends against contact bounce or stuck signals)

Why all those options matter

Most live-performance hosts ship a “footswitch” type with two settings (Advance / Panic) and call it done. Real-world rigs hit edge cases:

  • Polarity invert — some Boss FS-5L pedals invert vs the FS-5U; same jack, opposite signal
  • Debounce — contact bounce on cheap pedals produces phantom double-advances
  • Throttle — sustain jack stuck-on from a connector wiggle shouldn’t fire 50 patch-advances per second
  • Long-press / double-tap — pro keys players stack actions on a single footswitch to free up hardware

These are the difference between “it usually works” and “it works every show.”

Switch vs button mode

  • Momentary (button) — fires on press; default for most actions (panic, next patch, tap tempo)
  • Latching (switch) — toggles state; fires once on enter, once on leave. Used for things like Performance Lock toggle, Toggle Bus Mute.

Live preview widget

Each component has a configurable Perform-mode widget:

  • A large tap target (touchscreen-friendly)
  • The configured action’s label
  • Visual feedback on press (animation, color flash)
  • Current state (for latching switches)

The widget editor in v0.10.0 lets you customize appearance per component (font, color, icon, size).

Why this exists

Without a generic button/switch component, every new action needs a bespoke widget + bespoke MIDI binding. By making the component generic and parameterized by action, the same plumbing covers panic, tap tempo, patch jump, bus mute, transport start, and every future action — including extension-API ones.

It also gives non-MIDI hardware (Stream Deck via v0.15.0 extension) a natural home in the rig model. A Stream Deck button is just a button/switch component with a Stream Deck source binding.

Replaces the old “footswitch actions” concept

Pre-v0.6.0, footswitch behavior was hardcoded in app config. The button/switch component generalizes this:

  • Footswitch in pedal jack → button/switch component with hardware MIDI source
  • Stream Deck button → same component, different source
  • Keyboard shortcut → same component, keyboard source

One concept, many sources, parameterized action. The old footswitch config screen retires when this lands.

What ships in v0.6.0

  • Component type registered in the rig catalog
  • The v0.6.0 action set (see “Actions in the v0.6.0 dropdown” above) — transport / tap-tempo / send-MIDI / custom-macro arrive in their own future versions
  • Learn flow for hardware MIDI binding (reuses v0.5.0 Learn machinery)
  • Configurable widget for Perform mode (basic styling — full widget editor lands in v0.10.0)
  • Multiple bindings per component (MIDI + keyboard + on-screen button)
  • Debounce + throttle + polarity invert + long-press + double-tap
  • LED feedback baseline (CC/note echo for latching/toggle modes)