- Rust 73.6%
- TypeScript 7.7%
- Svelte 6.9%
- JavaScript 5.2%
- Shell 2.6%
- Other 3.9%
| .agents/skills | ||
| .claude/commands | ||
| .forgejo/workflows | ||
| .github.disabled/workflows | ||
| crates | ||
| docker | ||
| docs | ||
| e2e | ||
| frontend | ||
| frontend-mock | ||
| migrations | ||
| mods_without_api_key | ||
| proto | ||
| screenshots | ||
| scripts | ||
| .dockerignore | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| HOMELAB_INTEGRATION.md | ||
| PRD.md | ||
| README.md | ||
| start-e2e.txt | ||
| zedwatch-logo-v1.svg | ||
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