- Rust 55%
- Svelte 20.9%
- JavaScript 10%
- HTML 4.3%
- TypeScript 3.1%
- Other 6.6%
| .cargo | ||
| .forgejo/workflows | ||
| .github | ||
| crates | ||
| deploy/turn | ||
| docs | ||
| packaging/macos | ||
| scripts | ||
| third_party/portable-pty | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| docker-compose.pull.yml | ||
| docker-compose.registry-image.yml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| LICENSE | ||
| README.md | ||
Zeno RMM
Zeno is a self-hosted Remote Monitoring and Management platform built in Rust with a Svelte 5 operator cockpit. It provides fleet inventory, alerts, patching, software and automation controls, agent lifecycle management, terminal and file access, and low-latency remote desktop for Windows, Linux, and macOS.
Zeno is under active development. The current implementation and supported operating model are documented in
docs/; old implementation diaries and completed plans are intentionally not kept in the working tree.
Product
Fleet devices
The Devices workspace combines enrollment, live health, saved views, sortable/resizable columns, bulk actions, and direct access to remote control, terminal, files, patches, software, updates, power actions, and Wake-on-LAN.
Device inspector
Selecting any displayed entity opens a navigable inspector with live state, hardware, operating-system, networking, inventory, activity, and endpoint actions.
Remote control
Remote desktop opens in a movable, resizable window with monitor selection, connection-path status, resolution/FPS/codec controls, soft keyboard, clipboard, file transfer, input blocking, power actions, and fullscreen mode.
Current capabilities
- Fleet operations: dashboard, sites, device health, telemetry, hardware/OS/network inventory, saved views, density controls, audit history, users, roles, and permissions.
- Remote operations: remote desktop, interactive terminal, remote file browser and transfer, clipboard, monitor selection, restart, shutdown, lock, Wake-on-LAN, and agent update/remove actions.
- Endpoint management: patch scans, approvals/policies, install activity, software inventory, package deployment, alert lifecycle, threshold rules, and durable automation workflows.
- Agent lifecycle: persistent and one-time enrollment, platform installers, capability reporting, signed/checksummed published artifacts, scheduled/manual updates, rollback watchdogs, and online/offline state.
- Self-hosting: Rust/axum server, PostgreSQL, Svelte SPA, Docker Compose, optional coturn for WebRTC TURN relay, and Forgejo Actions release/deployment automation.
Platform support
| Platform | Service/session model | Desktop capture | Input |
|---|---|---|---|
| Windows | ZenoAgent Windows service plus an authenticated interactive/secure-desktop helper |
DXGI Desktop Duplication with GDI/Winlogon handling for stalled, locked, and login desktops | SendInput in the active desktop |
| Linux | Root system service; one distro-independent static agent | DRM/KMS scanout capture only | Privileged persistent /dev/uinput device only |
| macOS | Root LaunchDaemon plus helper in the logged-in console user's GUI bootstrap | ScreenCaptureKit | CGEvent; requires Accessibility |
Linux intentionally has no X11, screenshot-tool, or portal capture fallback. If DRM/KMS or /dev/uinput is unavailable, Zeno reports an explicit capability failure instead of silently selecting another desktop API. See docs/linux-remote-desktop.md.
macOS remote desktop requires Screen Recording and Accessibility grants for the installed Zeno application. See docs/macos-agent.md.
Remote desktop transports
New browser profiles default to WebRTC at fit resolution, 30 FPS, and software H.264. Operators can select:
| Mode | Media path | Best use |
|---|---|---|
| WebRTC | Direct P2P RTP when possible; TURN when required | Lowest server load and preferred interactive path |
| WebCodecs | Encoded H.264/H.265/VP9/AV1 chunks over the authenticated agent WebSocket | HTTPS/WSS-only networks and direct browser decode |
| Compatibility relay | JPEG frames over the authenticated agent WebSocket | Last-resort browser/network compatibility |
Input and session control always use the authenticated console/agent control plane. Runtime fallback is session-local and never overwrites the operator's saved transport preference.
Architecture
Browser / Svelte 5 SPA
│ REST + console WebSocket
│ WebRTC media (direct/TURN) or encoded/JPEG WebSocket media
▼
zeno-server (Rust / axum) ───── PostgreSQL
│ authenticated agent WebSocket
▼
zeno-agent
├─ telemetry, inventory, patching, automation, terminal, files
└─ platform capture/input helper when the desktop security boundary requires it
The server routes authenticated control and signaling, persists fleet state, serves the SPA/installers, and forwards WebSocket media. It does not transcode remote desktop video. Full details: docs/architecture.md and docs/remote-desktop-pipeline.md.
Self-host quick start
Prerequisites: Docker Engine and Docker Compose v2.
curl -o .env https://forgejo.supportportal.org/hex/zeno-rmm/raw/branch/main/.env.example
curl -o docker-compose.yml https://forgejo.supportportal.org/hex/zeno-rmm/raw/branch/main/docker-compose.pull.yml
# Set at least ZENO_JWT_SECRET and ZENO_ADMIN_PASSWORD.
# openssl rand -hex 32 is suitable for the JWT secret.
$EDITOR .env
docker compose up -d
curl -fsS http://127.0.0.1:8090/healthz
Open http://localhost:8090, sign in with the admin username from .env (default admin) and the password you set, then use Devices → Enroll Device to generate a platform installer or enrollment command.
Update the server with:
docker compose pull
docker compose up -d --force-recreate
Production deployments should use HTTPS, strong unique secrets, restricted PostgreSQL exposure, backups, and coturn with the correct public relay IP when direct WebRTC cannot traverse NAT. See docs/architecture.md.
Developer setup
git clone https://forgejo.supportportal.org/hex/zeno-rmm.git
cd zeno-rmm
docker compose up -d --build
./scripts/smoke.sh
Useful local gates:
cargo fmt --all -- --check
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
cd crates/zeno-server/src/web/spa
npm ci
npm run check
npm run build
Forgejo is the authoritative remote and CI system. See docs/ci-and-dev-lifecycle.md.
Repository layout
crates/zeno-shared/ shared wire and domain types
crates/zeno-server/ axum API, WebSockets, PostgreSQL models, Svelte SPA
crates/zeno-agent/ cross-platform endpoint agent and remote desktop
crates/zeno-installer/ platform bootstrap installer
packaging/ platform packaging assets
scripts/ CI, deployment, smoke, and diagnostics helpers
docs/ current operator and contributor documentation
Documentation
Start with docs/README.md.
docs/architecture.md— current components and security boundariesdocs/operator-remote-desktop-guide.md— using Remote Controldocs/remote-desktop-pipeline.md— capture-to-presentation implementationdocs/windows-agent.md,docs/linux-remote-desktop.md,docs/macos-agent.md— platform behaviordocs/roadmap.md— current feature matrix and active work only
License
MIT. See LICENSE.


