Podman update and multi-node website deployment automation
Project description
WatchTower
Turn a computer you already own into your personal cloud.
Point WatchTower at your GitHub repo and your website is live — database, backups,
and a private URL included — on hardware you control, for $0/month.
When something breaks, it fixes itself — or tells you exactly what's missing and how to fix it.
Rootless Podman · private over Tailscale · built for people, not DevOps teams.
Website · How it works · Pricing · Download
Why WatchTower is different
Coolify, Dokploy, Umbrel, and CasaOS all let you self-host apps. None of them fix a broken deploy for you. WatchTower does.
- 🩹 Self-healing deploys — when a deployment fails (port conflict, registry flake, OOM, compile error…), WatchTower classifies the cause, applies a fix, and retries — automatically. What it can't safely auto-fix, it queues for you with an AI root-cause analysis. Autonomy is a global switch (default off) with a thrash guardrail, so it never fixes recklessly.
- 🖥️ Your PC, not a rented VPS — designed to run on the machine you already have. No monthly server bill.
- 🔒 Rootless & private by default — Podman-first (no root Docker daemon), reachable over your own Tailscale tailnet — nothing exposed to the public internet.
- 🗄️ Batteries included — one-click managed databases (Postgres/MySQL/MariaDB/Mongo/Redis) with auto-wired connection strings and scheduled backups, plus GitHub-push deploys and an app catalog.
- 🔓 Open-core — Apache 2.0 + ELv2. Self-host it forever; no lock-in.
Different from
containrrr/watchtower(a Docker image auto-updater). This WatchTower is a full self-hosted deploy + database + self-heal control plane for Podman.
Quick start
Desktop app (easiest)
Grab the installer for your platform from Releases:
| Platform | Install |
|---|---|
| macOS (12+) | Download the .dmg (arm64 for Apple Silicon, x64 for Intel), drag into Applications |
| Linux | Download the .AppImage, then chmod +x WatchTower-*.AppImage && ./WatchTower-*.AppImage — or use the .deb |
| Windows | Download and run the .exe installer |
The app is self-contained — it bundles Python and the web UI, stores data in ~/.watchtower/, and auto-updates from GitHub Releases.
macOS first launch: builds aren't yet signed with an Apple Developer ID, so right-click the app → Open → Open (one time only). If it still won't start, use browser mode below — same UI, no Electron wrapper.
From source (30 seconds)
git clone https://github.com/sinhaankur/WatchTower.git
cd WatchTower
./run.sh
run.sh sets up everything on first run (venv, npm install, frontend build) and opens the app — Electron if a display is available, otherwise the browser at http://127.0.0.1:8000. Also: ./run.sh browser | desktop | stop | logs | update.
Requirements: Python 3.8+, Node 18+. Podman is optional and WatchTower offers to install it for you when needed.
No clone (pipx)
pipx install watchtower-podman
watchtower-deploy serve --host 127.0.0.1 --port 8000
Docker
export WATCHTOWER_API_TOKEN="change-this-token"
docker compose -f docker-compose.app.yml up -d --build
Open http://127.0.0.1:8000 and sign in with the token. HA setup: deploy/docker-compose.ha.yml.
What's inside
| Deploy from GitHub | Push-to-deploy via webhooks, PR previews, rollbacks, build logs, deploy to this PC or remote nodes over SSH |
| Managed databases | Postgres, MySQL, MariaDB, Mongo, Redis as rootless Podman pods — auto-wired DATABASE_URL, scheduled backups, adopt-existing |
| Self-healing | Failure classifier + auto-fix-and-retry + human approval queue with AI root-cause analysis (bring your own LLM — Ollama, LM Studio, any OpenAI-compatible endpoint) |
| Private remote access | Built-in Tailscale integration — reach your server from anywhere, expose nothing; go public via Cloudflare when ready |
| Container manager | Full rootless Podman container/pod management UI, plus the classic health-aware image auto-updater (watchtower start) |
| Team & governance | GitHub sign-in, org roles, append-only audit log, encrypted secrets |
How WatchTower compares
| WatchTower | Coolify | Dokploy | Umbrel / CasaOS | |
|---|---|---|---|---|
| Deploy from GitHub | ✅ | ✅ | ✅ | partial (app store) |
| One-click managed databases | ✅ | ✅ | ✅ | ✅ |
| Self-heals a failed deploy | ✅ | ❌ | ❌ | ❌ |
| Runs on your own PC (not a VPS) | ✅ | VPS-first | VPS-first | ✅ |
| Rootless (no root Docker daemon) | ✅ (Podman) | ❌ (root Docker) | ❌ | ❌ (Docker) |
| Private by default (Tailscale) | ✅ built-in | add-on | add-on | add-on |
| Desktop app | ✅ | ❌ | ❌ | ❌ |
The differentiator is the third row. Everyone lets you self-host apps; only WatchTower diagnoses and fixes a broken deploy on its own. It's built to run unattended on the machine you already own, rootless, without exposing anything to the internet.
(Comparison reflects public feature sets as of mid-2026. WatchTower is younger than Coolify — it wins on the self-heal + rootless-PC angle, not on breadth or years of hardening.)
Docs & guides
| Topic | Where |
|---|---|
| What's new | CHANGELOG · Releases |
| Quick reference | docs/QUICK_REFERENCE.md |
| Container auto-update service (config + troubleshooting) | docs/CONTAINER_UPDATE_SERVICE.md |
| Tiny local LLMs for self-heal analysis | docs/TINY_LLM_GUIDE.md |
| High availability | docs/HA_PODMAN_WATCHTOWER.md |
| WatchTower vs Vercel | docs/VERCEL_ALTERNATIVE.md |
| Security hardening | docs/SECURITY_HARDENING.md |
| Examples | docs/EXAMPLES.md |
| Releasing (maintainers) | docs/RELEASING.md · RELEASE_QUALITY.md |
Development
pytest tests/ # backend test suite
npm --prefix web run lint # frontend lint (0 warnings allowed)
npm --prefix web run build # typecheck + production build
npm --prefix web test # frontend smoke tests
Architecture notes live in CLAUDE.md; contributions are welcome — see CONTRIBUTING.md.
Roadmap
- Broader Docker parity and runtime features
- Windows and macOS container-service depth
- Richer notification integrations
- Enhanced monitoring/metrics integrations
- Stronger rollback and scheduling controls
License
WatchTower is dual-licensed — pick the option that matches how you'll use it:
- Free (default): Apache 2.0 outside
pro/+ Elastic License 2.0 insidepro/. Use it for self-hosting, internal commercial use, forks, audits, and contributions. Free forever. - Commercial License (template): paid option for resellers / SaaS hosts / OEM embedders / regulated environments that need a written agreement, defined SLA, or removable attribution. Email opensource@sinhaankur.dev with subject "Commercial License Inquiry". Pricing tiers at https://sinhaankur.github.io/WatchTower/pricing/.
See LICENSING.md for the full breakdown.
Use of a running installation is governed by the Terms of Use, Acceptable Use Policy, and Privacy Policy — accepted in-app at first login. WatchTower is self-hosted: your data stays on your machine and there is no vendor telemetry.
Feedback & support
Trying WatchTower? Tell us where it fights you. Every report — confusing screen, unexplained error, missing feature — directly shapes what gets built next.
- 💬 Start a discussion — questions, ideas, show-and-tell
- 🐛 Report an issue
- 🌐 Website & docs
- ♥ Sponsor the project
WatchTower performs automated update/deployment operations. Validate in non-production environments first and keep reliable backups before production rollouts.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file watchtower_podman-1.18.0.tar.gz.
File metadata
- Download URL: watchtower_podman-1.18.0.tar.gz
- Upload date:
- Size: 766.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90ef94ca1e9e42d7401068846382b596d4b2dd26433a59d11da3697fc507ac1f
|
|
| MD5 |
762709fe1030c2f74cb01b770353c806
|
|
| BLAKE2b-256 |
b7d475a05d7ed394b1f8ab6ddd505942e7a2b8ff94c72cb54673ea4170aba8fa
|
Provenance
The following attestation bundles were made for watchtower_podman-1.18.0.tar.gz:
Publisher:
publish-pypi.yml on sinhaankur/WatchTower
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
watchtower_podman-1.18.0.tar.gz -
Subject digest:
90ef94ca1e9e42d7401068846382b596d4b2dd26433a59d11da3697fc507ac1f - Sigstore transparency entry: 2128722050
- Sigstore integration time:
-
Permalink:
sinhaankur/WatchTower@96e411e641e5e67812fc68bb521789a82ebbca14 -
Branch / Tag:
refs/tags/v1.18.0 - Owner: https://github.com/sinhaankur
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@96e411e641e5e67812fc68bb521789a82ebbca14 -
Trigger Event:
push
-
Statement type:
File details
Details for the file watchtower_podman-1.18.0-py3-none-any.whl.
File metadata
- Download URL: watchtower_podman-1.18.0-py3-none-any.whl
- Upload date:
- Size: 719.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35110bdfb5e47e32faa38edc6d150992d76a2d7bf68da59818843bb3912b8247
|
|
| MD5 |
b02ddd1259bd6ff90eb69b02a39d8371
|
|
| BLAKE2b-256 |
3db5ae0ff28cb2202090dd7943ca0c7f77268696e574f40a62b912b0c5a7b478
|
Provenance
The following attestation bundles were made for watchtower_podman-1.18.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on sinhaankur/WatchTower
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
watchtower_podman-1.18.0-py3-none-any.whl -
Subject digest:
35110bdfb5e47e32faa38edc6d150992d76a2d7bf68da59818843bb3912b8247 - Sigstore transparency entry: 2128722183
- Sigstore integration time:
-
Permalink:
sinhaankur/WatchTower@96e411e641e5e67812fc68bb521789a82ebbca14 -
Branch / Tag:
refs/tags/v1.18.0 - Owner: https://github.com/sinhaankur
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@96e411e641e5e67812fc68bb521789a82ebbca14 -
Trigger Event:
push
-
Statement type: