Your whole homelab on one page
A fast, self-hosted start page for your homelab. Write a few lines of YAML and every service gets a card with its live numbers: the queue of Radarr, the VMs on Proxmox, the blocked queries of Pi-hole, the photos in Immich. And when a widget for your service does not exist yet, you can publish one yourself, from your own repository, without waiting for anyone.
Get started Browse the widgets

Why you will like it
170+ widgets, ready to go. Radarr, Sonarr, Plex, Jellyfin, Proxmox, Unraid, TrueNAS, Pi-hole, AdGuard, Home Assistant, Immich, Portainer, UniFi, Traefik and many more, plus the weather, stocks and a generic JSON mapper for anything with an API. They are installed with the dashboard and keep themselves up to date. See them all.
Widgets anyone can publish. Every widget is a small package: a manifest and one function. Put it in a git repository or on npm, and others add it with one line of YAML. No pull request to get merged, no release to wait for. Write your own.
Configured in YAML, live on save. Services, header widgets, bookmarks: plain files you can keep in git. Save one and every open page updates by itself. A mistake is shown on the page, with the file and the spot in it, and the rest keeps working. Configuration.
Finds your services by itself. Label a Docker container or annotate a Kubernetes Ingress and it appears on the page, with its status. Docker Swarm, Traefik IngressRoutes and the Gateway API too. Docker · Kubernetes.
Buttons for the jobs you repeat. Pull new images, pause downloads, start a backup, reboot a node: a button on a card runs a script or command on the server, and shows the output when it fails. Button widget.
Your keys stay on your server. API keys and passwords go in variables and never reach the browser; widgets run in a worker with a timeout, so one broken service never takes the page down. Security.
Feels at home. Coming from homepage? Its services.yaml, widgets.yaml, Docker labels and {{HOMEPAGE_VAR_*}} variables work as they are. Dark and light themes, 22 accent colours, tabs, 17 languages, and it installs as an app on your phone.
Get started in a minute
docker run -d -p 3000:3000 -v ./config:/config ghcr.io/stefanrenne/homelab-dashboard:latest
Open http://localhost:3000. The empty config folder is filled with an example to start from; edit services.yaml and watch the page follow:
# services.yaml
- Media:
- Radarr:
href: http://radarr.lan
icon: radarr.svg
siteMonitor: http://radarr.lan
widget:
type: radarr
url: http://radarr.lan:7878
key: "{{HD_VAR_RADARR_KEY}}"
With Docker Compose
# compose.yaml
services:
dashboard:
image: ghcr.io/stefanrenne/homelab-dashboard:latest
ports:
- "3000:3000"
volumes:
- ./config:/config
- /var/run/docker.sock:/var/run/docker.sock:ro # optional: Docker status and discovery
environment:
HD_VAR_RADARR_KEY: your-api-key
restart: unless-stopped
For Docker discovery through a read-only socket proxy, see docker-compose.example.yml.
Images are built for amd64 and arm64 for every release: latest is the newest release, and each has its own tag (0.14.0, 0.14).
Where to next
| Configuration | Every file and key: settings, services, bookmarks, Docker, Kubernetes, Proxmox, images |
| Widgets | Every widget, with its options, fields, an example and how it looks |
| Extend | Write a widget of your own, locally or as a package for others |
