Self-Hosted Dashboards: Homepage, Homarr, and Dashy Compared
You've got Nextcloud on port 8443, Jellyfin on 8096, Grafana on 3000, Home Assistant on 8123, and a dozen more services scattered across different ports and subdomains. You're maintaining a browser bookmark folder called "Homelab" and still can't remember which port Paperless is on.
A self-hosted dashboard gives you a single page with organized links to all your services, live status indicators, and widgets showing system health — all running on your own hardware.
The Big Three Dashboards
The self-hosted community has settled on three main options, each with a distinct philosophy:
| Feature | Homepage | Homarr | Dashy |
|---|---|---|---|
| Configuration | YAML files | GUI editor | YAML + GUI |
| Service widgets | 100+ with live data | 40+ integrations | Basic status checks |
| Docker integration | Automatic discovery | Manual + some auto | Manual |
| Resource usage | ~30 MB RAM | ~80 MB RAM | ~100 MB RAM |
| Customization | Moderate | High (drag & drop) | Very high (themes, layouts) |
| Learning curve | Low | Low | Medium |
| Active development | Very active | Active | Slower |
Homepage: The Community Favorite
Homepage has become the most popular choice for good reason — it auto-discovers Docker containers and provides deep integration widgets for dozens of services.
Setup
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
restart: unless-stopped
ports:
- 3000:3000
volumes:
- homepage_config:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
PUID: 1000
PGID: 1000
volumes:
homepage_config:
Configuration
Homepage uses YAML files in its config directory. The main ones:
services.yaml — Your service links and widgets:
- Media:
- Jellyfin:
icon: jellyfin.svg
href: https://jellyfin.home.lan
description: Media streaming
widget:
type: jellyfin
url: http://jellyfin:8096
key: your-api-key
- Audiobookshelf:
icon: audiobookshelf.svg
href: https://audiobooks.home.lan
description: Audiobooks & Podcasts
- Infrastructure:
- Proxmox:
icon: proxmox.svg
href: https://proxmox.home.lan:8006
widget:
type: proxmox
url: https://proxmox:8006
username: api@pam!homepage
password: your-token
widgets.yaml — System-level widgets:
- resources:
cpu: true
memory: true
disk: /
- openmeteo:
label: Weather
latitude: 47.6
longitude: -122.3
units: imperial
Docker Auto-Discovery
The killer feature. Add labels to your Docker containers and Homepage picks them up automatically:
services:
jellyfin:
image: jellyfin/jellyfin
labels:
- homepage.group=Media
- homepage.name=Jellyfin
- homepage.icon=jellyfin.svg
- homepage.href=https://jellyfin.home.lan
- homepage.widget.type=jellyfin
- homepage.widget.url=http://jellyfin:8096
- homepage.widget.key=${JELLYFIN_API_KEY}
No more editing config files when you add a new service — just add the labels and restart.
Widget Examples
Homepage widgets show live data from your services:
- Jellyfin/Plex: Active streams, movie count, series count
- Sonarr/Radarr: Wanted items, queue size, upcoming
- Proxmox: CPU, memory, running VMs/containers
- Pi-hole/AdGuard: Queries blocked today, percentage
- Portainer: Running containers, stopped containers
- Nextcloud: Storage used, active users
Homarr: The Visual Builder
Homarr takes a GUI-first approach. Instead of editing YAML files, you drag and drop tiles on a grid to build your dashboard.
Setup
services:
homarr:
image: ghcr.io/ajnart/homarr:latest
restart: unless-stopped
ports:
- 7575:7575
volumes:
- homarr_configs:/app/data/configs
- homarr_icons:/app/public/icons
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
homarr_configs:
homarr_icons:
What Makes It Different
- Drag-and-drop editor: Resize and rearrange tiles visually
- Built-in integrations: Sonarr, Radarr, Lidarr, Overseerr, and other *arr stack tools
- Calendar widget: Shows upcoming media from your *arr stack
- Search bar: Configurable with multiple search engines
- Multi-board support: Different dashboards for different users or purposes
Homarr is ideal if you want a polished dashboard without touching config files, or if your homelab is media-focused (the *arr integrations are excellent).
Dashy: Maximum Customization
Dashy offers the most flexibility in theming, layout, and widgets — at the cost of a steeper learning curve.
Setup
services:
dashy:
image: lissy93/dashy:latest
restart: unless-stopped
ports:
- 4000:8080
volumes:
- dashy_config:/app/user-data
healthcheck:
test: ['CMD', 'node', '/app/services/healthcheck']
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
volumes:
dashy_config:
What Makes It Different
- 20+ built-in themes with full CSS customization
- Status checking: Automatic up/down monitoring for all services
- Multi-page layouts: Tabs, sections, collapsible groups
- Authentication: Built-in Keycloak support, guest access
- Cloud backup: Optional config sync
- Widgets: System info, weather, crypto, RSS, and more
Configuration
Dashy uses a single conf.yml:
pageInfo:
title: Homelab
navLinks:
- title: GitHub
path: https://github.com
sections:
- name: Media
icon: fas fa-film
items:
- title: Jellyfin
url: https://jellyfin.home.lan
icon: hl-jellyfin
statusCheck: true
- title: Audiobookshelf
url: https://audiobooks.home.lan
icon: hl-audiobookshelf
statusCheck: true
- name: Infrastructure
icon: fas fa-server
items:
- title: Proxmox
url: https://proxmox.home.lan:8006
icon: hl-proxmox
statusCheck: true
Which Dashboard Should You Pick?
Choose Homepage if:
- You use Docker for everything
- You want live service data (not just links)
- You prefer YAML config over GUIs
- You want the most active community and development
Choose Homarr if:
- You want a visual editor with no config files
- Your homelab is media-focused (*arr stack)
- You want a polished look with minimal effort
- You prefer point-and-click configuration
Choose Dashy if:
- You want maximum theming and customization
- You need built-in authentication
- You want status monitoring without Uptime Kuma
- You like having many layout options
Running Multiple Dashboards
There's nothing wrong with using more than one. A common setup:
- Homepage as your daily driver (Docker integration + widgets)
- Dashy as a public-facing status page for your family
- Uptime Kuma for serious monitoring (dashboards aren't monitoring tools)
Tips for a Good Dashboard
- Group by function, not by server. "Media," "Infrastructure," "Productivity" beats "Server 1," "Server 2."
- Use a reverse proxy so your dashboard links point to
jellyfin.home.laninstead of192.168.1.50:8096. - Add status checks to catch services that have quietly crashed.
- Don't over-widget. A dashboard that takes 10 seconds to load defeats the purpose.
- Set it as your browser homepage. Otherwise you'll forget it exists.
The Bottom Line
A dashboard turns a chaotic homelab into something organized and glanceable. Homepage is the strongest all-rounder right now — its Docker auto-discovery and service widgets save real time. But all three options are solid, and you can have one running in under 5 minutes with Docker.