Zeno — self-hosted Rust RMM with smooth H.265-capable remote desktop, 24/7 Windows agent, and a complete endpoint management web portal.
  • Rust 55%
  • Svelte 20.9%
  • JavaScript 10%
  • HTML 4.3%
  • TypeScript 3.1%
  • Other 6.6%
Find a file
2026-07-15 18:02:45 -04:00
.cargo Fix musl ffmpeg build env 2026-06-29 20:07:31 -04:00
.forgejo/workflows fix(macos): publish self-contained agent binary 2026-07-15 16:36:28 -04:00
.github fix(macos): publish self-contained agent binary 2026-07-15 16:36:28 -04:00
crates chore(agent): publish built zeno-agent (macOS) [skip agent-publish] 2026-07-15 18:02:45 -04:00
deploy/turn fix(turn): harden entrypoint — DNS resolver chain, is_ipv4 portable, bypass docker-entrypoint.sh eval bug 2026-07-07 21:42:48 -04:00
docs fix(macos): publish self-contained agent binary 2026-07-15 16:36:28 -04:00
packaging/macos fix(macos): publish self-contained agent binary 2026-07-15 16:36:28 -04:00
scripts fix(macos): publish self-contained agent binary 2026-07-15 16:36:28 -04:00
third_party/portable-pty fix(agent): Windows CI token type + inbox sudo detection 2026-07-07 02:36:03 -04:00
.dockerignore feat(web): scaffold cockpit SPA shell (Phase A1) 2026-06-15 10:29:01 -04:00
.env.example feat: self-host Docker image publishing + Forgejo links + pull-based deploy 2026-06-30 16:20:15 -04:00
.gitignore fix(version): canonical agent build label + sync CI publishes 2026-07-08 09:44:39 -04:00
Cargo.lock docs: align repository with current Zeno platform 2026-07-15 16:10:06 -04:00
Cargo.toml docs: align repository with current Zeno platform 2026-07-15 16:10:06 -04:00
docker-compose.pull.yml fix(deploy): registry image tag + migration-safe docker build 2026-07-03 19:23:05 -04:00
docker-compose.registry-image.yml fix(ci): redeploy compose project-dir on host dev stack 2026-07-03 21:14:56 -04:00
docker-compose.yml fix(turn): resolve zenorelay hostname + force --listening-ip=0.0.0.0 in entrypoint 2026-07-07 21:35:15 -04:00
Dockerfile fix(ci): dockerfile /bin/sh pipefail; wait-ci match run by commit title 2026-07-03 19:47:14 -04:00
LICENSE feat: initial Vigil RMM foundation (slice 0) 2026-06-11 01:42:10 -04:00
README.md fix(macos): publish self-contained agent binary 2026-07-15 16:36:28 -04:00

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.

Zeno Devices page

Device inspector

Selecting any displayed entity opens a navigable inspector with live state, hardware, operating-system, networking, inventory, activity, and endpoint actions.

Zeno device inspector

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.

Zeno Linux remote control

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.

License

MIT. See LICENSE.