Open Source · Apache 2.0

A modular lighting
operating system.

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.

$ cargo build -p rhythm-server --release

Lights follow curves,
not presets.

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.

6 AM 9 AM 12 PM 3 PM 6 PM

Curve-driven

Lights follow a smooth function, not manual presets or timers. Step dimming moves along the curve.

Solar-aware

The default Gaussian curve is shaped by solar position. Your lights track the actual sun.

Pluggable engine

Implement the LightCurveModule trait and drop in any curve shape you want.

Room-level control

Rooms, devices, buttons, motion sensors, group addressing — all managed by the OS.

Hub-agnostic

Add lighting products by implementing a small set of traits. No forks, no monkeypatching.

REST API + SSE

Full programmatic control with real-time state streaming. Bring your own frontend.

Layered crates,
zero coupling.

Each layer has a single responsibility. Integrations are added by implementing traits — no changes to core or OS required.

Binaries
Platform I/O
rhythm-esp32 rhythm-server rhythm-addon
OS Layer
Hub-agnostic business logic
rhythm-os
Integrations
Product-specific crates
rhythm-hue rhythm-ha rhythm-…
Core
Pure algorithms, no I/O
rhythm-core rhythm-curve

Runs everywhere.

The same core runs on a microcontroller, a server, or as a Home Assistant add-on.

macOS / Linux

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

ESP32-C6

rhythm-esp32

Standalone controller. WiFi + BLE provisioning, NVS persistence, OTA updates. Runs the full engine.

cargo build -p rhythm-esp32

Full control,
every endpoint.

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

Add any lighting product.

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

dispatch.rs
match hub_type.as_str() {
    "hue"  => &HUE_PROVIDER,
    "ha"   => &HA_PROVIDER,
    "lifx" => &LIFX_PROVIDER, // your integration
    _      => /* default */
}
Current integrations
Philips Hue Home Assistant

Built in the open.
Join the community.

Rhythm OS is open source under Apache 2.0. Contribute code, report bugs, or just come say hi.

Licensed under Apache License 2.0. Copyright 2025 DT Concepts, LLC.