getwud/wud

Keep your containers up-to-date!

TypeScript

4,010

940 commits

updated Oct 11, 2026

See the code

README

WUD (What's Up Docker? Logo

What's Up Docker? (WUD)

Keep your containers up-to-date across any orchestrator, automatically and effortlessly.

Docker Pulls GitHub Stars CI Status License Documentation GitHub Sponsors Buy Me A Coffee Donate PayPal

Docker Docker Swarm Kubernetes Nomad Docker Compose

📖 Documentation • 🚀 Quick Start • ⚙️ Configuration • 🔔 Triggers • 📦 Registries • 🛠️ Contributing • 💬 Issues & Support


WUD Web Dashboard UI

💡 About WUD

WUD (What's Up Docker?) is a lightweight, proactive container update monitoring and automation tool. It continuously scans your container environments, detects image updates across public and private registries, performs semantic version analysis, and alerts you via your favorite notification channels—or triggers automatic container updates seamlessly.

flowchart LR
    W["🔍 <b>WATCHERS</b><br/>Discover running containers<br/><i>Docker, Swarm, Kubernetes, Compose, Nomad...</i>"]
    WUD{{"⚡ <b>WUD ENGINE</b><br/>Compare versions &amp; digests"}}
    R["📦 <b>REGISTRIES</b><br/>Inspect tags &amp; manifests<br/><i>Docker Hub, GHCR, Private OCI</i>"]
    T["🚀 <b>TRIGGERS</b><br/>Notify &amp; Auto-Update<br/><i>Discord, Slack, Compose, MQTT</i>"]

    W -->|"Scan"| WUD
    WUD <-->|"Inspect"| R
    WUD -->|"Execute"| T

✨ Features

  • 🔍 Multi-Orchestrator Engine
    Monitor standalone Docker daemons, remote Docker engines over TLS, Docker Compose setups, Docker Swarm clusters, native Kubernetes clusters (Deployments, StatefulSets, DaemonSets, CronJobs), or HashiCorp Nomad clusters.
  • 📦 Multi-Registry Integration
    Zero-config & authenticated support for Docker Hub, GitHub Container Registry (GHCR), AWS ECR, Google GCR/GAR, Azure ACR, Quay, GitLab, Gitea, Forgejo, Codeberg, LinuxServer (LSCR), and any custom/self-hosted OCI registry.
  • 🔔 30+ Notification & Automation Triggers
    Discord, Matrix, Mattermost, Zulip, Telegram, Slack, Signal, WhatsApp, Bark, Prowl, Home Assistant, Gotify, Ntfy, Pushover, Apprise, Webhooks, Kafka, AMQP/RabbitMQ, NATS, Opsgenie, PagerDuty, Uptime Kuma, GitHub Actions, GitLab CI, SMTP email, shell scripts, and native Docker / Compose / Nomad auto-updaters.
  • 🔄 Automated Container Updates
    Automatically pull new images and recreate containers on demand (Docker, Docker Compose, Nomad).
  • ⚡ Registry Webhooks: Registry push notifications, including GitLab Self-Managed, immediately check matching watched images while preserving existing labels and trigger policies.
  • 🏷️ SemVer & Tag Filtering
    Flexible versioning strategies: target semver (major, minor, patch), match custom regular expressions, pin versions, or define include/exclude tag rules.
  • 🖥️ Interactive Web UI & REST API
    Clean, responsive web dashboard to inspect container statuses, trigger manual update checks, and query data via a full-featured REST API.
  • 📊 Prometheus & Grafana Ready
    Built-in Prometheus /metrics endpoint and pre-built Grafana dashboards for observability.
  • 🔒 Enterprise-Grade Authentication & RBAC
    Role-Based Access Control (admin, rw, ro), database-backed user management, personal API tokens, and single sign-on with OpenID Connect (OIDC) (Keycloak, Authentik, Authelia, etc.) or local accounts.

⚡ Quick Start

1. Run with Docker

docker run -d \
  --name wud \
  -p 3000:3000 \
  -e WUD_AUTH_ADMIN_USER="admin" \
  -e WUD_AUTH_ADMIN_PASSWORD="MySecurePassword123" \
  -v /var/run/docker.sock:/var/run/docker.sock \
  getwud/wud:latest

2. Run with Docker Compose

services:
  whatsupdocker:
    image: getwud/wud:latest
    container_name: wud
    ports:
      - "3000:3000"
    environment:
      - WUD_AUTH_ADMIN_USER=admin
      - WUD_AUTH_ADMIN_PASSWORD=MySecurePassword123
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

🌐 Access the Web UI: Open http://localhost:3000 in your browser (login with admin / MySecurePassword123).

3. Run in One-Shot CLI Mode (CI/CD & Cron)

WUD can also run as a stateless, headless CLI tool without starting the web server or creating a database file:

# Run a single scan and print container status as JSON
docker run --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e WUD_RUN_MODE=oneshot \
  getwud/wud:latest watch

# Gate CI/CD pipelines: exit with code 1 if at least one update is available
docker run --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e WUD_RUN_MODE=oneshot \
  getwud/wud:latest watch --update-available --fail-on-update

📖 Check the full One-Shot Headless Mode Documentation for flags, NDJSON output, and cron examples.


🧩 Supported Integrations

🔍 Watchers & Orchestrators

EnvironmentSupported WorkloadsConfiguration Guide
DockerLocal socket, Remote TCP over TLS, Docker ComposeBuilt-in (Active by default)
Docker SwarmServices, Stacks, Replicated & Global workloadsSocket / Remote TCP over TLS
KubernetesDeployments, StatefulSets, DaemonSets, CronJobsIn-cluster RBAC / Kubeconfig
NomadJobs (service, batch, system), Task GroupsHTTP API / ACL Token

📦 Registries

RegistryDescriptionAuthentication
Docker HubPublic and private Docker Hub imagesAnonymous / Token / Password
Docker Hardened Images (DHI)Docker Hardened Images (dhi.io)Token / Password
GitHub (GHCR)GitHub Container Registry packagesPersonal Access Token
AWS ECRAmazon Elastic Container RegistryAWS IAM Keys / IAM Roles
Google GCR / Artifact RegistryGCP Container & Artifact RegistryService Account Key (JSON)
Azure ACRAzure Container RegistryService Principal / Admin Secret
GitLab RegistryGitLab Container RegistryDeploy Token / PAT
Quay.ioRed Hat QuayRobot Account / OAuth Token
Self-Hosted / OCIHarbor, Nexus, Artifactory, Gitea, Forgejo, CodebergBasic Auth / Bearer Token

🔔 Triggers & Notifications


🏷️ Configuration via Labels & Annotations

WUD can be configured globally through environment variables or granularly per container/workload using Docker labels or Kubernetes annotations:

Docker & Compose (Labels)

services:
  my-app:
    image: myorg/myapp:1.2.0
    labels:
      # Only consider semver minor and patch updates (e.g. 1.2.1, 1.3.0, but not 2.0.0)
      - "wud.tag.include=^1\\.\\d+\\.\\d+$"
      - "wud.tag.transform=^v(.*)$$ => $$1"
      
      # Send update notifications to a specific Discord webhook
      - "wud.trigger.discord.mywebhook.enabled=true"
      
      # Automatically recreate this container when an update is available
      - "wud.trigger.docker.myupdater.enabled=true"

Kubernetes (Annotations)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: default
  annotations:
    # Explicitly watch this workload
    getwud.app/watch: "true"
    
    # Only consider semver minor and patch updates
    getwud.app/tag.include: "^1\\.\\d+\\.\\d+$"
    getwud.app/tag.transform: "^v(.*)$ => $1"
    
    # Custom display icon in WUD UI
    getwud.app/display.icon: "mdi:kubernetes"

Explore all configuration options in the Configuration Hub.


📚 Documentation

For complete setup guides, advanced configurations, tutorials, and API references, check out our official documentation:

👉 https://getwud.app/


💖 Supporting WUD

WUD is free and open-source software built and maintained with passion. If WUD saves you time or helps keep your homelab and production containers running up-to-date, please consider supporting its ongoing development:

Your support helps cover domain name renewals (getwud.app), AI developer tooling subscriptions, and rewards the time spent maintaining registry integrations and building new features. Thank you!


📄 License

This project is open-source software licensed under the MIT License.

docker
nodejs
semver
update-checker

getwud/wud

Keep your containers up-to-date!

TypeScript

4,010

940 commits

updated Oct 11, 2026

See the code

README

WUD (What's Up Docker? Logo

What's Up Docker? (WUD)

Keep your containers up-to-date across any orchestrator, automatically and effortlessly.

Docker Pulls GitHub Stars CI Status License Documentation GitHub Sponsors Buy Me A Coffee Donate PayPal

Docker Docker Swarm Kubernetes Nomad Docker Compose

📖 Documentation • 🚀 Quick Start • ⚙️ Configuration • 🔔 Triggers • 📦 Registries • 🛠️ Contributing • 💬 Issues & Support


WUD Web Dashboard UI

💡 About WUD

WUD (What's Up Docker?) is a lightweight, proactive container update monitoring and automation tool. It continuously scans your container environments, detects image updates across public and private registries, performs semantic version analysis, and alerts you via your favorite notification channels—or triggers automatic container updates seamlessly.

flowchart LR
    W["🔍 <b>WATCHERS</b><br/>Discover running containers<br/><i>Docker, Swarm, Kubernetes, Compose, Nomad...</i>"]
    WUD{{"⚡ <b>WUD ENGINE</b><br/>Compare versions &amp; digests"}}
    R["📦 <b>REGISTRIES</b><br/>Inspect tags &amp; manifests<br/><i>Docker Hub, GHCR, Private OCI</i>"]
    T["🚀 <b>TRIGGERS</b><br/>Notify &amp; Auto-Update<br/><i>Discord, Slack, Compose, MQTT</i>"]

    W -->|"Scan"| WUD
    WUD <-->|"Inspect"| R
    WUD -->|"Execute"| T

✨ Features

  • 🔍 Multi-Orchestrator Engine
    Monitor standalone Docker daemons, remote Docker engines over TLS, Docker Compose setups, Docker Swarm clusters, native Kubernetes clusters (Deployments, StatefulSets, DaemonSets, CronJobs), or HashiCorp Nomad clusters.
  • 📦 Multi-Registry Integration
    Zero-config & authenticated support for Docker Hub, GitHub Container Registry (GHCR), AWS ECR, Google GCR/GAR, Azure ACR, Quay, GitLab, Gitea, Forgejo, Codeberg, LinuxServer (LSCR), and any custom/self-hosted OCI registry.
  • 🔔 30+ Notification & Automation Triggers
    Discord, Matrix, Mattermost, Zulip, Telegram, Slack, Signal, WhatsApp, Bark, Prowl, Home Assistant, Gotify, Ntfy, Pushover, Apprise, Webhooks, Kafka, AMQP/RabbitMQ, NATS, Opsgenie, PagerDuty, Uptime Kuma, GitHub Actions, GitLab CI, SMTP email, shell scripts, and native Docker / Compose / Nomad auto-updaters.
  • 🔄 Automated Container Updates
    Automatically pull new images and recreate containers on demand (Docker, Docker Compose, Nomad).
  • ⚡ Registry Webhooks: Registry push notifications, including GitLab Self-Managed, immediately check matching watched images while preserving existing labels and trigger policies.
  • 🏷️ SemVer & Tag Filtering
    Flexible versioning strategies: target semver (major, minor, patch), match custom regular expressions, pin versions, or define include/exclude tag rules.
  • 🖥️ Interactive Web UI & REST API
    Clean, responsive web dashboard to inspect container statuses, trigger manual update checks, and query data via a full-featured REST API.
  • 📊 Prometheus & Grafana Ready
    Built-in Prometheus /metrics endpoint and pre-built Grafana dashboards for observability.
  • 🔒 Enterprise-Grade Authentication & RBAC
    Role-Based Access Control (admin, rw, ro), database-backed user management, personal API tokens, and single sign-on with OpenID Connect (OIDC) (Keycloak, Authentik, Authelia, etc.) or local accounts.

⚡ Quick Start

1. Run with Docker

docker run -d \
  --name wud \
  -p 3000:3000 \
  -e WUD_AUTH_ADMIN_USER="admin" \
  -e WUD_AUTH_ADMIN_PASSWORD="MySecurePassword123" \
  -v /var/run/docker.sock:/var/run/docker.sock \
  getwud/wud:latest

2. Run with Docker Compose

services:
  whatsupdocker:
    image: getwud/wud:latest
    container_name: wud
    ports:
      - "3000:3000"
    environment:
      - WUD_AUTH_ADMIN_USER=admin
      - WUD_AUTH_ADMIN_PASSWORD=MySecurePassword123
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

🌐 Access the Web UI: Open http://localhost:3000 in your browser (login with admin / MySecurePassword123).

3. Run in One-Shot CLI Mode (CI/CD & Cron)

WUD can also run as a stateless, headless CLI tool without starting the web server or creating a database file:

# Run a single scan and print container status as JSON
docker run --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e WUD_RUN_MODE=oneshot \
  getwud/wud:latest watch

# Gate CI/CD pipelines: exit with code 1 if at least one update is available
docker run --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e WUD_RUN_MODE=oneshot \
  getwud/wud:latest watch --update-available --fail-on-update

📖 Check the full One-Shot Headless Mode Documentation for flags, NDJSON output, and cron examples.


🧩 Supported Integrations

🔍 Watchers & Orchestrators

EnvironmentSupported WorkloadsConfiguration Guide
DockerLocal socket, Remote TCP over TLS, Docker ComposeBuilt-in (Active by default)
Docker SwarmServices, Stacks, Replicated & Global workloadsSocket / Remote TCP over TLS
KubernetesDeployments, StatefulSets, DaemonSets, CronJobsIn-cluster RBAC / Kubeconfig
NomadJobs (service, batch, system), Task GroupsHTTP API / ACL Token

📦 Registries

RegistryDescriptionAuthentication
Docker HubPublic and private Docker Hub imagesAnonymous / Token / Password
Docker Hardened Images (DHI)Docker Hardened Images (dhi.io)Token / Password
GitHub (GHCR)GitHub Container Registry packagesPersonal Access Token
AWS ECRAmazon Elastic Container RegistryAWS IAM Keys / IAM Roles
Google GCR / Artifact RegistryGCP Container & Artifact RegistryService Account Key (JSON)
Azure ACRAzure Container RegistryService Principal / Admin Secret
GitLab RegistryGitLab Container RegistryDeploy Token / PAT
Quay.ioRed Hat QuayRobot Account / OAuth Token
Self-Hosted / OCIHarbor, Nexus, Artifactory, Gitea, Forgejo, CodebergBasic Auth / Bearer Token

🔔 Triggers & Notifications


🏷️ Configuration via Labels & Annotations

WUD can be configured globally through environment variables or granularly per container/workload using Docker labels or Kubernetes annotations:

Docker & Compose (Labels)

services:
  my-app:
    image: myorg/myapp:1.2.0
    labels:
      # Only consider semver minor and patch updates (e.g. 1.2.1, 1.3.0, but not 2.0.0)
      - "wud.tag.include=^1\\.\\d+\\.\\d+$"
      - "wud.tag.transform=^v(.*)$$ => $$1"
      
      # Send update notifications to a specific Discord webhook
      - "wud.trigger.discord.mywebhook.enabled=true"
      
      # Automatically recreate this container when an update is available
      - "wud.trigger.docker.myupdater.enabled=true"

Kubernetes (Annotations)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: default
  annotations:
    # Explicitly watch this workload
    getwud.app/watch: "true"
    
    # Only consider semver minor and patch updates
    getwud.app/tag.include: "^1\\.\\d+\\.\\d+$"
    getwud.app/tag.transform: "^v(.*)$ => $1"
    
    # Custom display icon in WUD UI
    getwud.app/display.icon: "mdi:kubernetes"

Explore all configuration options in the Configuration Hub.


📚 Documentation

For complete setup guides, advanced configurations, tutorials, and API references, check out our official documentation:

👉 https://getwud.app/


💖 Supporting WUD

WUD is free and open-source software built and maintained with passion. If WUD saves you time or helps keep your homelab and production containers running up-to-date, please consider supporting its ongoing development:

Your support helps cover domain name renewals (getwud.app), AI developer tooling subscriptions, and rewards the time spent maintaining registry integrations and building new features. Thank you!


📄 License

This project is open-source software licensed under the MIT License.

docker
nodejs
semver
update-checker

Significant stargazers

Juan Calderon-Perez

208 followers · starred Nov 2025

Justin Garrison

1,115 followers · starred Jul 2025

Diego Heras

1,360 followers · starred Dec 2025

Brennan Kinney

75 followers · starred Oct 2023