Hermetic Modular

Alchemy SDK v0.13.0: MIDI and Faster HostLink

By Luke Pendergrass

alchemy-sdk · alchemy-lab

An Alchemy Lab module on dark fabric, with six knobs, ten jacks, unlit LED rings, and the front USB-C port visible

Alchemy SDK v0.13.0 adds MIDI and optional faster browser editing to firmware for Alchemy Lab. It also expands diagnostics to 64 live values and fixes startup defaults and settings descriptors.

MIDI alongside the programmer

This is a new MIDI implementation for some upcoming internal Hermetic Modular firmwares. This has now been built out in a way that should set the entire SDK and all developers up well for future MIDI implementations. I’m interested to hear what you think and whether you have any feedback. This has been pretty carefully considered, both to work with HostLink and to provide things like driving the same master clock in the SDK and careful handling of polyphony.

USB MIDI and HostLink now share the module's USB connection. A DAW can send notes, expression, and clock while the Web Programmer remains connected for editing and diagnostics.

The SDK provides mono, polyphonic, and paraphonic note handling, voice allocation, sustain, legato, and configurable pitch slides. MPE supports independent pitch bend, pressure, and timbre for each note. Controller mapping includes CC, RPN, and NRPN messages, MIDI learn, and takeover policies such as pickup. MIDI and CV can contribute to the same parameter.

MIDI clock and transport connect to MusicalClock. Output supports scheduled messages and streaming SysEx. Firmware can also persist note-part configuration and controller routes in presets, and attach MIDI settings pages to the existing settings menu.

You may be familiar with the roughly 1.6-second heartbeat for updating mirrored, plugged-in devices. This is not a hard limit. It is, however, a performance one. There’s a new option that allows devices to update faster if a developer chooses.

The fast path lets firmware select the state that needs frequent updates. For managed components, the declaration can be as small as:

host.Fast(pager, settings);

The programmer polls that compact state at a 100 ms interval when the link is available. Eligible edits write the changed field rather than sending the complete live state, so changing a knob in the browser does not restore an older recording buffer over a recording the module has just made.

Full snapshots and preset transfers remain available. A FastProjection can expose a selected range inside a larger component, with a custom edit callback when needed. Fast HostLink is optional, and firmware that omits it continues to use full-state editing.

Settings, diagnostics, and page colors

Settings now support eight pages, and HostLink publishes all eight correctly. This gives firmware room for the optional MIDI pages alongside its existing settings.

The diagnostics extension can register 64 live values, up from 16. Firmware can expose more counters, timing measurements, or DSP values in the Device console without turning each update into a log message.

Page::Color() now accepts LedPanel::Rgb, so a page can use the same palette value as its physical LEDs. Copies of a page retain the generated browser color.

Values seeded with Pager::SetStored() during setup now use the first live knob readings to initialize pickup. The declared value survives startup until the control catches it; an uninitialized input no longer replaces it.

Web Programmer fixes

Modal button banks work without an otherwise unused Selector. Numeric entries no longer reset a value to zero after Enter or Escape followed by leaving the field.

When firmware returns an invalid descriptor, the programmer shows the error and received JSON. Raw preset export and exact-schema restoration remain available while editing is unavailable. Migration between different schemas still requires a valid descriptor.

The firmware picker also remembers its selected tab when closed and reopened within the same page session.

Full notes are in the v0.13.0 release notes. The MIDI integration guide covers the foreground service, audio handoff, and DSP wiring.