0.1 Series
The 0.1 line is Cade’s first public series. Everything here is new — there is
no earlier release to upgrade from — so this page reads as an orientation to what
the runtime does rather than a list of things that changed under you.
For the entry-by-entry record, see the Changelog.
v0.1.0 “Bagatelle” — 2026-07-31
The initial release, codenamed after pinball’s tabletop ancestor. A declarative engine for authoring and running pinball machine behavior from HCL, with real-time event processing, scoring, audio synthesis, and lighting.
Authoring a table
You describe a machine in .cade files: HCL that the runtime interprets
directly, with reusable fragments carrying their own variables, defaults, and
validation. An expression language spans the config, and it is optimized when the
table compiles — constant folding and dead-code elimination — so an elaborate
condition stays cheap at 50–100 Hz.
Edit a .cade file mid-session and the table recompiles with player state
preserved, so you can adjust a rule without losing the ball you were testing it
on. cade migrate reservedwords scans a table for identifiers that collide with
reserved words and fixes them.
Rules, scoring, and modes
Scoring is declarative and compiled, landing under 1 ms. Variables cover the shapes tables actually need: timers that decay, grow, or report elapsed time, and probability variables sampled weighted, bucketed, or without replacement. A three-tier fallback system with safety-mode activation and panic recovery keeps a bad value from taking the table down.
Game modes are modules, with module.active injected automatically,
owner-tracked inhibition, passive-mode primitives, and mid-game player join.
Group bindings (tag.<name>.<action>) let one rule target a set of devices.
Events
Typed events process in parallel at 50–100 Hz, with aggregation primitives for burst, coincidence, and rate windows. Deduplication uses correlation IDs, with per-processor rate limiting. The live event tree shows cascade depth, inline timing, and multi-player turn rotation, and a cascade can be reconstructed from a history export for offline replay.
Audio
The audio pipeline runs under 5 ms of device latency. The synth engine is
modular: named envelopes, biquad low-pass and high-pass filters,
envelope-to-cutoff modulation, and an explicit signal graph of carriers, mixers,
a delay comb, and z1 cross-node feedback with cycle detection. Notes are
sustain-aware, ending on either a duration or a switch edge.
Routing and selection blocks decide what actually plays: owner-weighted routes,
device-owned routed audio, deterministic seeded selection, and assembly-provided
defaults. A patch sounds the same in the browser as on the native runtime, and an
audio-clip manifest gives play_clip sounds the same fidelity.
Lighting
Light shows compile to FAST EXP scripts so firmware can play them back. Frames
are time-parameterized, making playback deterministic and replayable, and sprite
and video sources bake into real frame sequences with an authorable fit.
light_layout handles placement, with per-LED device names on the layout
handshake.
Editing in the browser
Structured edit operations cover audio, lighting, and rules graphs, each reporting errors per operation and supporting validate-only dry runs. Source replacement is unit-scoped with per-file snapshot undo. The rules graph ships with a full node-type catalog. Parsing is lenient while compiling is strict, so an incomplete graph still boots instead of failing the whole table.
Hardware and integrations
A gRPC platform server streams events bidirectionally for hardware and simulator integrations. The Visual Pinball bridge registers kickers and coils and hardens the connection. A web server covers health monitoring and debugging.
Console and testing
The TUI is borderless and themed, with a collapsible game-status bar and standalone Logs and Events panels. The debug console visualizes cascades and inspects events, and supports pipe mode for scripted, non-interactive use. A scenario testing framework makes game-logic validation reproducible.
Running it
Cross-platform builds cover Linux (amd64 and arm64) and Windows (amd64).
Prebuilt binaries for this release are published at
dl.cade.run — see the
Downloads page. cade version and the
--version flag report embedded build metadata.