What it watches
Servers, Docker containers, PM2 processes, systemd units and HTTP/TCP endpoints — grouped into services with check history.
Open source · Self-hosted · MIT
Watchtower watches your servers, Docker containers, PM2 processes, systemd services and endpoints over SSH — no agents to install. Get push alerts, see incidents, and restart a service with a typed confirmation and a full audit trail.
Runs on your own infrastructure. Your SSH keys never leave your database, encrypted.
Why self-hosted
Watchtower is deliberately simple software you run yourself, not a service you hand your servers over to.
The API talks to your servers over SSH when needed and runs its own in-process scheduler. Nothing to install on the machines you watch — no Kubernetes, no message queues, no custom agents.
SSH keys are encrypted at rest with AES-256-GCM and stored in your own database. They are never returned by any API response, and decrypted only in memory for one operation.
A pnpm + Turborepo monorepo with Vitest tests. The codebase is small enough to audit rather than take on faith.
Features
Deliberately simple: one dashboard, one API, one scheduler running in-process.
Servers, Docker containers, PM2 processes, systemd units and HTTP/TCP endpoints — grouped into services with check history.
Failed checks become incidents you can see, alongside the history of every check result.
Web Push alerts to your devices, and the dashboard installs as a PWA.
Multiple isolated projects, each with its own servers, services, checks, incidents, audit logs, API keys and members. Owners/admins manage, members are read-only.
Restart Docker, PM2 and systemd services: type the exact service name to confirm, the server validates it strictly, and an audit entry records whether it worked.
Who restarted what, and whether it worked — recorded for every restart action.
Per-project API keys, isolated to the project that issued them.
AES-256-GCM at rest, master key only in the API environment, decrypted in memory for one operation.
How it works
Paste an SSH key. The API talks to your servers over SSH when needed, and keys are encrypted with AES-256-GCM before they touch the database.
Servers, Docker containers, PM2 processes, systemd units, HTTP and TCP endpoints — grouped into services.
Push notifications arrive as Web Push, and incidents land on the dashboard — a PWA you can install.
Type the exact service name. Strict server-side validation runs, the restart happens over SSH, and the audit log records who did it and whether it worked.
Security
Watchtower needs SSH access to do its job, so the design assumes your keys are worth stealing and behaves accordingly.
SSH keys are encrypted in the database before they are ever written.
It lives in the API environment, and the API refuses to start without it.
No API response ever returns a private key. Decryption happens in memory only for the duration of one operation.
Trust on first connect, the same model as OpenSSH known_hosts. A changed host key is refused.
Grant a restricted SSH user instead of full access — the docs show how. Watchtower runs a fixed allowlist: list, inspect, logs, restart.
Every restart needs an authenticated session, a UI confirmation where you type the exact service name, and strict server-side name validation.
Every restart is recorded: who restarted what, and whether it worked.
Compare
Uptime Kuma is excellent if you only need uptime checks and status pages — pick it for that. Watchtower leans on SSH and audited restarts instead.
| Watchtower | Uptime Kuma | Beszel | Netdata | |
|---|---|---|---|---|
| Strongest at | SSH-based server/Docker/PM2/systemd checks + audited restarts | Simple uptime checks and status pages | Lightweight server metrics with an agent | Deep real-time metrics |
| Needs an agent on your servers | No (uses SSH) | No | Yes | Yes |
| Restart services from the UI | Yes, typed confirmation + audit log | No | No | No |
| Multi-project isolation | Yes | — | — | — |
Comparison reflects the author's understanding and may be out of date. Check each project's docs.
Quickstart
Clone, set two secrets, migrate, create your user, and go. No public signup: users are created with a CLI command.
Then open the dashboard on :3000 and the API on:4000.
FAQ
Yes. Watchtower is MIT licensed and free to use.
No — self-hosted only, by design, because it uses your SSH keys.
No agent. The API talks to your servers over SSH when needed. A restricted monitor SSH user is recommended.
Be clear-eyed about it: Docker group access is root-equivalent on that host. Grant it only where that trade-off is acceptable, and use a dedicated restricted user for day-to-day monitoring.
Yes. Projects have owner, admin and member roles — owners and admins manage a project, members are read-only. There is no public signup; users are created with a CLI command.
GitHub issues and pull requests.
Get started
A rough estimate: clone the repo, start Postgres, set two secrets, migrate, create your user, and go.