Two Philosophies: Act vs Notify

The Watchtower vs Diun debate is really a question about how much you trust automation. Watchtower acts: it detects a new image digest, stops the old container, and recreates it — all while you sleep. Diun notifies: it watches the same registries and pings you on Discord, email or Telegram — but never touches a running container. You decide when (and whether) to update.

Head-to-Head Comparison

WatchtowerDiun
Core behaviorRecreates containers automaticallySends notifications only
Risk profileHigher — unattended changesLower — human approves every update
Best forStateless apps (Plex, Pi-hole, dashboards)Databases, Nextcloud, Home Assistant
Monitor-only modeYes — WATCHTOWER_MONITOR_ONLY=trueN/A — notify-only by design
NotificationsShoutrrr (Discord, email, Slack, Telegram…)Broad provider support
Maintenance (2026)Use a maintained forkActive upstream

When to Choose Watchtower

Choose Watchtower when your apps are stateless — a restart is harmless — and manual updates eat your weekends. Pair it with notifications so you always know what changed, and exclude risky containers with labels:

services:
  watchtower:
    image: nickfedor/watchtower:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_LABEL_ENABLE=true   # opt-in per container
services:
  postgres:
    image: postgres:16
    labels:
      - "com.centurylinklabs.watchtower.monitor-only=true"

When to Choose Diun

Choose Diun when you run stateful systems where a major-version jump needs your eyes first, or when you simply prefer a weekly "update session" over silent automation:

services:
  diun:
    image: crazymax/diun:latest
    command: serve
    volumes:
      - "./diun-data:/data"
      - "/var/run/docker.sock:/var/run/docker.sock"
    environment:
      - "TZ=Asia/Karachi"

The Power Combo: Run Both

Many experienced homelabbers run both tools: Watchtower in full auto mode on stateless apps (with cleanup + notifications), and Diun watching everything so databases still generate "update available" pings for manual handling. They don't conflict — Diun never modifies containers.

Verdict

There is no universal winner. Automate the boring, supervise the critical. If you must pick one tool today, Watchtower with WATCHTOWER_MONITOR_ONLY=true as the default — flipping individual containers to full auto-update via labels — covers about 90% of Diun's use case in a single container.