0.1 Series

releases changelog

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.