Rhythm OS is a headless, curve-driven lighting engine written in Rust. It continuously evaluates a lighting curve to produce the right brightness and color temperature for every moment of the day — then pushes those values to your lights.
Rhythm OS manages your lights through continuous functions that define brightness and color temperature over the course of a day. At any moment, the engine knows the exact values your lights should be at.
Lights follow a smooth function, not manual presets or timers. Step dimming moves along the curve.
The default Gaussian curve is shaped by solar position. Your lights track the actual sun.
Implement the LightCurveModule trait and drop in any curve shape you want.
Rooms, devices, buttons, motion sensors, group addressing — all managed by the OS.
Add lighting products by implementing a small set of traits. No forks, no monkeypatching.
Full programmatic control with real-time state streaming. Bring your own frontend.
Each layer has a single responsibility. Integrations are added by implementing traits — no changes to core or OS required.
The same core runs on a microcontroller, a server, or as a Home Assistant add-on.
rhythm-server
CLI server with HTTP API and mDNS discovery. Download a pre-built binary or build from source.
cargo build -p rhythm-server --release rhythm-addon
Add-on with ingress support. Auto-configures from HA Supervisor. Connects via WebSocket.
Install Add-onrhythm-esp32
Standalone controller. WiFi + BLE provisioning, NVS persistence, OTA updates. Runs the full engine.
cargo build -p rhythm-esp32 All platforms share the same REST API. Manage lights, rooms, and curves programmatically. Real-time state via Server-Sent Events.
| Category | Endpoints | Description |
|---|---|---|
| State | GET /api/state GET /api/rooms/state | Full snapshot or lightweight room state |
| Events | GET /api/events | SSE stream — room state, motion, hub status, config changes |
| Rooms | PUT /api/rooms PUT /api/rooms/action | Create rooms, dispatch actions, set brightness |
| Devices | PUT /api/devices PUT /api/sensors | Register lights, buttons, and motion sensors |
| Config | GET /api/config PUT /api/config | Read/write curve config and location |
| Settings | GET /api/settings PUT /api/settings | Fade duration, update interval, power save |
| Hub | PUT /api/hub/credentials POST /api/sync | Connect to a lighting hub, trigger re-discovery |
Every integration gets its own crate implementing four things. No changes to core required.
LightController Send lighting commands to devices
HubRegistry Track device-to-room mappings
HubProvider Configure credentials and connection
HubEvent Translate native device events
match hub_type.as_str() {
"hue" => &HUE_PROVIDER,
"ha" => &HA_PROVIDER,
"lifx" => &LIFX_PROVIDER, // your integration
_ => /* default */
} Rhythm OS is open source under Apache 2.0. Contribute code, report bugs, or just come say hi.