No description
  • Rust 73.6%
  • TypeScript 7.7%
  • Svelte 6.9%
  • JavaScript 5.2%
  • Shell 2.6%
  • Other 3.9%
Find a file
stanta cfdc213230
All checks were successful
Windows build / Build Windows binaries (push) Successful in 8m11s
Docker image / Build and push controller image (push) Successful in 54s
fix(build): satisfy Rust 1.97 lints
2026-08-17 17:42:26 +00:00
.agents/skills test(e2e): add guarded autonomous repair campaigns 2026-07-13 16:49:17 +02:00
.claude/commands chore: refresh agent instructions and per-machine ignores 2026-07-10 16:30:34 +02:00
.forgejo/workflows fix(ci): use Forgejo artifact upload action 2026-08-17 15:54:45 +00:00
.github.disabled/workflows ci(forgejo): publish controller image 2026-07-10 17:18:38 +02:00
crates fix(build): satisfy Rust 1.97 lints 2026-08-17 17:42:26 +00:00
docker fix(ci): serialize shared cargo target cache 2026-07-19 01:30:38 +02:00
docs ci(release): build Windows artifacts on main 2026-08-17 08:04:25 +00:00
e2e test(e2e): track live ban and agent deletion fixes 2026-07-20 10:15:08 +02:00
frontend feat(mods): support local mod launch folders 2026-08-17 07:45:10 +00:00
frontend-mock feat(workshop): make keyless browser optional per instance 2026-07-13 16:55:26 +02:00
migrations feat(workshop): make keyless browser optional per instance 2026-07-13 16:55:26 +02:00
mods_without_api_key feat(workshop): make keyless browser optional per instance 2026-07-13 16:55:26 +02:00
proto feat(workshop): make keyless browser optional per instance 2026-07-13 16:55:26 +02:00
screenshots docs(design): add redesign briefs, mock, and reference screenshots 2026-07-12 21:30:12 +02:00
scripts test(e2e): add live player kick acceptance 2026-07-19 04:24:36 +02:00
.dockerignore build(docker): cache controller image layers 2026-07-10 18:23:31 +02:00
.gitignore test(e2e): add seven-day soak runner 2026-07-17 06:45:41 +02:00
AGENTS.md ci(release): build Windows artifacts on main 2026-08-17 08:04:25 +00:00
Cargo.lock fix(build): vendor protoc compiler 2026-08-16 12:12:49 +00:00
Cargo.toml chore(release): bump version to 0.1.16 2026-07-18 23:40:49 +02:00
CLAUDE.md docs: make AGENTS.md the canonical instruction set 2026-07-12 21:30:06 +02:00
HOMELAB_INTEGRATION.md build(docker): adapt compose for homelab deployment 2026-07-10 17:18:13 +02:00
PRD.md feat(mods): support local mod launch folders 2026-08-17 07:45:10 +00:00
README.md docs(readme): document distributed alpha status and agent enrollment 2026-07-12 21:30:12 +02:00
start-e2e.txt test(e2e): add guarded autonomous repair campaigns 2026-07-13 16:49:17 +02:00
zedwatch-logo-v1.svg feat(frontend): agent management and operation tracking UI 2026-07-10 16:30:08 +02:00

ZedWatch

A modern DayZ dedicated server management platform. Replaces OmegaManager with a clean, fast, web-based alternative.

Project Status

Standalone is the shipping baseline. Distributed mode is a working private alpha that has been exercised with a Docker control server and a native Windows agent. It is not yet a stable release; the remaining acceptance, upgrade, recovery, and soak work is tracked in PRD.md and docs/saas-readiness-todo.md.

Features

  • Multi-instance management — run multiple DayZ servers from one dashboard
  • Real-time monitoring — live FPS, player count, CPU/memory stats via WebSocket
  • RCON console — BattlEye UDP protocol with command history and live output
  • Economy editor — visual types.xml editor with search, filter, validation, undo/redo
  • File browser — browse and edit server files with path traversal protection
  • Mod management — install, update, and manage Steam Workshop mods
  • Backup system — full and persistence-only backups with restore support
  • Scheduler — automated restarts, messages, and pre-restart backups via cron
  • BattlEye filter editor — edit scripts.txt, remoteexec.txt with auto-backup
  • Player management — ban/kick/whitelist with Steam ID tracking
  • Distributed mode — control multiple remote servers over agent-initiated WSS with Ed25519 authentication
  • Security — encrypted database, rate limiting, RBAC, security headers

Quick Start

Prerequisites

  • Rust 1.96+ (with cargo)
  • Node.js 24 LTS (for frontend build)
  • SteamCMD (auto-downloaded on first use)

Build & Run

# Build the frontend
cd frontend && npm ci && npm run build && cd ..

# Build and run
cargo build --release
./target/release/zedwatch

Open http://localhost:8420 — the setup wizard will guide you through initial configuration.

Configuration

All configuration is stored in an encrypted SQLCipher database (zedwatch.db). No config files needed.

Environment variables:

Variable Description Default
ZEDWATCH_DB_KEY Database encryption key Auto-generated; Windows stores only a machine-bound DPAPI ciphertext in zedwatch.db.key
RUST_LOG Log level filter info

Settings (via web UI or CLI):

Setting Description Default
bind_host Listen address 0.0.0.0
bind_port Listen port 8420

Docker (Distributed Mode)

cp docker/zedwatch.env.example docker/zedwatch.env
cp docker/caddy.env.example docker/caddy.env
# Replace every placeholder in both files, then start the control plane.
docker compose -f docker/docker-compose.yml up -d

The control container exposes only port 8422 to its private Compose network. Caddy is the only public listener and serves HTTPS plus browser and agent WebSockets on port 443.

Windows Agent

For guided setup, place zedwatch-agent.exe in its intended data directory and run it without arguments. On first launch, paste the setup token generated by the control server. The agent then offers to install and run as a Windows service. Choose n to keep it in the foreground for interactive testing; closing the console stops it.

For scripted enrollment and service installation, enroll directly into the service data directory:

zedwatch-agent.exe enroll --server https://zedwatch.example.com --token <token> --data-dir "C:\ProgramData\ZedWatch\Agent"
zedwatch-agent.exe install-service --data-dir "C:\ProgramData\ZedWatch\Agent"
zedwatch-agent.exe status

Installation validates the encrypted database and enrolled identity, requires the DPAPI-protected durable database key, restricts the data directory ACL to LocalSystem and Administrators, installs an automatic-start service, and starts it. zedwatch-agent.exe uninstall-service requests a clean stop before removing the service. Agents make outbound HTTPS/WSS connections only and need no inbound firewall or NAT rule.

To adopt a stopped standalone installation in place:

zedwatch-agent.exe adopt --source "D:\ZedWatch" --server https://zedwatch.example.com --token <token>
zedwatch-agent.exe install-service --data-dir "D:\ZedWatch"

The adoption command retains a verified database backup and leaves DayZ files in their existing paths.

Architecture

Two deployment modes, one codebase:

  • Standalone: single binary, everything local
  • Distributed: Docker control server + native agent binaries on each game server, connected only through agent-initiated outbound WSS

Core abstraction: the complete NodeBackend trait is implemented by LocalBackend in standalone/agent processes and AgentSessionBackend on the control server. DispatchBackend routes control requests to ready outbound-WSS sessions.

Development

# Run tests
cargo test --workspace

# Check formatting + lints
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings

# Frontend dev
cd frontend
npm ci
npm run dev

License

MIT