The recommended starting point for your own Hermetic Modular Alchemy Lab module firmware.
This is the Alchemy SDK's
stereo_eq example — a dual mono three-band EQ that opts into the full
framework stack (pagination, pot catch, param lock, CV routing, presets,
settings, LED animations) — packaged as a standalone project that vendors
the Alchemy SDK and libDaisy as git submodules and builds with the standard
Daisy make workflow. Clone it, build it, flash it, then gut src/ and
make it yours.
├── Makefile standard Daisy Makefile (libDaisy core underneath)
├── src/ the firmware — this is the part you edit
│ ├── stereo_eq.cpp hardware wiring, pages, knobs, CV, presets
│ ├── stereo_eq_dsp.* pure DSP (three-band biquad EQ per channel)
│ └── stereo_eq_palette.h LED color palettes
└── lib/
├── alchemy-sdk/ Alchemy framework + board support (submodule)
└── libDaisy/ Electrosmith Daisy library (submodule)
gitmakearm-none-eabi-gccdfu-util
Ubuntu / Debian:
sudo apt install git make gcc-arm-none-eabi dfu-utilmacOS (Homebrew):
brew install git make dfu-util
brew install --cask gcc-arm-embeddedgit clone --recurse-submodules https://github.com/hermetic-modular/alchemy-template.git my-module
cd my-module
make libdaisy # build libDaisy once after cloning
make # build the firmware → build/stereo_eq.binThe Alchemy Lab runs a custom bootloader (DaisyBootloader-AlchemyLabV2)
that serves DFU over the front-panel USB-C port. Connect that port, then put
the module in update mode: during the ~2 s window after power-on — the LED
rings spin a warm-white comet — press or hold B3. The rings switch to a slow breathe, and the module stays in DFU mode until it's flashed or reset. Then:
make program-dfuYou can also use the Hermetic Modular Web Programmer straight from the browser.
Once the firmware is running, you can skip the DFU button dance entirely,
program-live asks the running module to reboot itself into the bootloader
over USB, waits for it to enumerate, and flashes in one step:
make program-live
Requires node and dfu-util ≥ 0.11 on your PATH. (This works because the
template firmware speaks HostLink, the same integration that powers the
web editor.)
- Rename the firmware — change
TARGETat the top of theMakefile(this names the.bin), and rename thesrc/files to taste, updatingCPP_SOURCESto match. - Bring your own DSP — replace
stereo_eq_dsp.*and rewire the knobs, pages, and CV matrix instereo_eq.cpp. Every framework feature is an explicit constructor call; delete what you don't want. - Add source files — append them to
CPP_SOURCESin the Makefile. One caveat from the underlying Daisy build: object files are flattened intobuild/by basename, so two sources can't share a filename even in different directories. - Learn the SDK — the framework headers live in
lib/alchemy-sdk/framework/include/alchemy/, and the SDK'sexamples/show other usage styles (thekickexample is a minimal-opt-in contrast to this template).
git -C lib/alchemy-sdk pull origin main
git add lib/alchemy-sdk && git commit -m "Bump alchemy-sdk"The pinned libDaisy commit matches the one the Alchemy SDK itself vendors and tests against; if you bump one, consider bumping the other to match.
MIT — see LICENSE. libDaisy is independently MIT-licensed by Electrosmith.