Headline: A Unix screensaver. We don't lock, dim, or authenticate — we render content during idle and yield back cleanly.
Org: github.com/idlescreen
Human brand: IdleScreen · Ship names: idle-* / idlescreen*
Process: AGENTS.md (used while coding) · gates in scripts/
A screensaver is ambient software — it runs when no one is watching. We treat that as a privilege: do one thing well, get out of the way, compose with the rest of the desktop.
Three claims:
- We are a screensaver. Not a lock, not a power manager, not an auth gate.
- We are composable. Other tools handle the consequences of being idle.
- We are private by default. No network, no audio capture, no telemetry.
Four constraints:
- Render, don't lock. Activity resumes → screensaver stops.
- Render, don't dim. DPMS is the compositor's job.
- Render, don't replace. Plug in, play, yield back.
- Render, don't phone home. Plugins declare network; the user grants.
The OS / compositor / window system owns the idle signal and the screen surface. We are a guest everywhere we run:
- Linux: layer-shell + ext-idle-notify.
- macOS:
NSWindowabove-dock + IOKit idle. - Windows: DXGI / Direct3D +
GetLastInputInfo.
Plugins are pure sim; the host owns sandbox, raster, and the control plane. No plugin talks to the OS directly.
- Engine: platform-agnostic. GPU via wgpu / Metal / DX12; CPU fallback. WASM and native plugins. Capability system.
- Shims: paper-thin, one per OS. Idle + surface + sandbox init. Replaceable without touching the engine.
- Plugins: one effect per crate / module. Declarative manifest with capabilities. Sandboxed at launch.
Engine is pure Rust. Shims are thin. WASM plugins compile once. Headless render mode ships the engine's visual output to PNG / MP4 / stdout on any platform — that's what makes the Fedora-only test host survivable.
| Family | Package |
|---|---|
| Linux RPM (Fedora / RHEL) | idlescreen |
| Linux DEB (Debian / Ubuntu) | idlescreen |
| Linux Arch | idlescreen |
| macOS | idlescreen (Homebrew tap) |
| Windows | idlescreen (scoop / winget / MSI) |
Plugins distributed separately. Sandbox profile setup is part of install, not user-configured.
- No network from any plugin without capability grant.
- No audio capture without capability grant.
- No telemetry. It doesn't exist.
- No filesystem read of user data outside plugin-declared dirs.
- Pause render when monitor is off / DPMS.
- Frame-rate cap on battery.
- Per-saver GPU / CPU / memory budget.
- Watchdog on render loop and on each plugin.
- Workspace tests green; chaos suite green; line lock ≤256.
- Publish gate green for any channel claim.
- Install fail-closed on incomplete planned package set.
- Plugin capability declarations verified at install.
- Headless render mode produces deterministic output for a given seed.
AGENTS.md— house laws & engineering standards (used while coding)