Self-Hosted Dashboards: Homer, Homarr and Dashy for Service Organization
Once you are running more than a handful of self-hosted services, remembering which service runs on which port becomes a real problem. Is Grafana on port 3000 or 3001? What was the URL for that Nextcloud instance again? A self-hosted dashboard solves this by providing a single landing page with organized links to all your services, often with live status indicators, search functionality, and custom theming.
This guide compares the four most popular self-hosted dashboard applications, provides Docker setup instructions for each, and helps you choose the right one for your needs.
Why Use a Dashboard?
- Service discovery: One bookmark instead of dozens. Especially valuable when onboarding new team members or family members.
- Status monitoring: At-a-glance view of which services are running and which are down.
- Organization: Group services by category (media, networking, monitoring, development) for quick access.
- Custom start page: Replace your browser's default new tab with your service dashboard.
Homer: Simple YAML Configuration
Homer is a minimalist, static dashboard generated from a single YAML configuration file. It has no backend, no database, and no JavaScript framework overhead. The entire dashboard is served as static HTML/CSS/JS files.
Docker Setup
services:
homer:
image: b4bz/homer:latest
container_name: homer
ports:
- "8080:8080"
volumes:
- ./homer/assets:/www/assets
environment:
INIT_ASSETS: 1 # Generate default config on first run
restart: unless-stopped
Configuration
# homer/assets/config.yml
title: "My Homelab"
subtitle: "Service Dashboard"
logo: "assets/logo.png"
header: true
footer: '<p>Managed with <a href="https://usulnet.com">usulnet</a></p>'
columns: "3"
connectivityCheck: true
theme: default
colors:
light:
highlight-primary: "#3367d6"
highlight-secondary: "#4285f4"
highlight-hover: "#5a95f5"
background: "#f5f5f5"
card-background: "#ffffff"
text: "#363636"
text-header: "#ffffff"
text-title: "#303030"
text-subtitle: "#424242"
card-shadow: rgba(0, 0, 0, 0.1)
dark:
highlight-primary: "#3367d6"
highlight-secondary: "#4285f4"
highlight-hover: "#5a95f5"
background: "#131313"
card-background: "#2b2b2b"
text: "#eaeaea"
text-header: "#ffffff"
text-title: "#fafafa"
text-subtitle: "#f5f5f5"
card-shadow: rgba(0, 0, 0, 0.4)
services:
- name: "Infrastructure"
icon: "fas fa-server"
items:
- name: "usulnet"
subtitle: "Docker Management"
url: "https://usulnet.local"
icon: "fas fa-docker"
tag: "management"
tagstyle: "is-success"
- name: "Traefik"
subtitle: "Reverse Proxy"
url: "https://traefik.local"
icon: "fas fa-route"
tag: "networking"
tagstyle: "is-info"
- name: "Pi-hole"
subtitle: "DNS Ad Blocking"
url: "http://pihole.local/admin"
icon: "fas fa-shield-alt"
type: "PiHole"
- name: "Monitoring"
icon: "fas fa-chart-line"
items:
- name: "Grafana"
subtitle: "Dashboards & Metrics"
url: "https://grafana.local"
icon: "fas fa-chart-area"
- name: "Prometheus"
subtitle: "Metrics Collection"
url: "http://prometheus.local:9090"
icon: "fas fa-database"
- name: "Media"
icon: "fas fa-film"
items:
- name: "Jellyfin"
subtitle: "Media Server"
url: "http://jellyfin.local:8096"
icon: "fas fa-play-circle"
Strengths: Extremely lightweight (serves static files only), fast load times, simple YAML configuration, dark/light theme support, Pi-hole and Ping status checks built in.
Limitations: No drag-and-drop, requires manual YAML editing, no built-in authentication, limited widget support.
Homarr: Drag-and-Drop Simplicity
Homarr provides a modern, widget-based dashboard with a drag-and-drop editor. It integrates directly with various services (Sonarr, Radarr, qBittorrent, etc.) to display live data on the dashboard.
Docker Setup
services:
homarr:
image: ghcr.io/homarr-dev/homarr:latest
container_name: homarr
ports:
- "7575:7575"
volumes:
- homarr_data:/appdata
- /var/run/docker.sock:/var/run/docker.sock:ro # Optional: Docker integration
environment:
TZ: America/New_York
restart: unless-stopped
volumes:
homarr_data:
After starting Homarr, open http://your-server:7575 and use the visual editor to add apps, widgets, and categories. No YAML editing required.
Key Features
- Visual editor: Drag-and-drop interface for arranging apps and widgets
- Service integrations: Live data from Sonarr, Radarr, Lidarr, qBittorrent, Deluge, Overseerr, and many more
- Docker integration: Auto-discover running containers and add them to the dashboard
- Weather widget: Built-in weather display
- Search bar: Quick search across all configured services
- Multi-user: User accounts with individual dashboard configurations
Strengths: No configuration files to edit, extensive service integrations, Docker auto-discovery, polished UI.
Limitations: Heavier resource usage than Homer, requires Docker socket access for auto-discovery, newer project with more rapid API changes.
Dashy: Feature-Rich Powerhouse
Dashy is the most feature-rich dashboard option, offering YAML or UI-based configuration, extensive theming, status checks, authentication, and a widget marketplace.
Docker Setup
services:
dashy:
image: lissy93/dashy:latest
container_name: dashy
ports:
- "4000:8080"
volumes:
- ./dashy/conf.yml:/app/user-data/conf.yml
environment:
NODE_ENV: production
healthcheck:
test: ['CMD', 'node', '/app/services/healthcheck']
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
restart: unless-stopped
Configuration
# dashy/conf.yml
pageInfo:
title: Homelab Dashboard
description: All services in one place
navLinks:
- title: usulnet
path: https://usulnet.local
- title: GitHub
path: https://github.com
appConfig:
theme: nord-frost
layout: auto
iconSize: medium
language: en
statusCheck: true
statusCheckInterval: 300
webSearch:
searchEngine: duckduckgo
openingMethod: newtab
auth:
enableGuestAccess: false
users:
- user: admin
hash: "$2b$10$..." # bcrypt hash
type: admin
sections:
- name: Infrastructure
icon: fas fa-server
displayData:
sortBy: default
cols: 2
items:
- title: usulnet
description: Docker Management Platform
url: https://usulnet.local
icon: hl-docker
statusCheck: true
statusCheckUrl: https://usulnet.local/api/health
- title: Traefik
description: Reverse Proxy & SSL
url: https://traefik.local
icon: hl-traefik
statusCheck: true
- title: Uptime Kuma
description: Service Monitoring
url: http://uptime.local:3001
icon: hl-uptime-kuma
statusCheck: true
- name: Development
icon: fas fa-code
items:
- title: Gitea
description: Git Hosting
url: https://git.local
icon: hl-gitea
statusCheck: true
- title: Drone CI
description: Continuous Integration
url: https://ci.local
icon: hl-drone
- name: Media & Entertainment
icon: fas fa-photo-video
items:
- title: Jellyfin
description: Media Streaming
url: http://jellyfin.local:8096
icon: hl-jellyfin
statusCheck: true
- name: Widgets
icon: fas fa-th
displayData:
cols: 2
widgets:
- type: clock
options:
timeZone: America/New_York
format: en-US
- type: system-info
Dashy's Unique Features
- Status checking: HTTP, TCP, and ICMP health checks for every service with configurable intervals
- Built-in authentication: Username/password with bcrypt, Keycloak/OIDC support, guest access control
- 30+ built-in widgets: Clock, weather, system info, RSS feeds, public IP, crypto prices, and more
- 70+ themes: Pre-built themes including Nord, Dracula, Solarized, Material, and custom CSS support
- Interactive editor: Edit configuration through the UI without touching YAML files
- Multi-page support: Create separate dashboard pages for different categories or users
- Keyboard shortcuts: Navigate entirely with the keyboard
Strengths: Most features of any dashboard, excellent theming, built-in auth, status checks, active development.
Limitations: Higher resource usage, longer initial load time, can be overwhelming to configure.
Heimdall: The Application Launcher
Heimdall focuses on being a simple, elegant application launcher rather than a feature-rich dashboard. It has a clean interface with large, colorful tiles for each service.
Docker Setup
services:
heimdall:
image: lscr.io/linuxserver/heimdall:latest
container_name: heimdall
environment:
PUID: 1000
PGID: 1000
TZ: America/New_York
volumes:
- heimdall_config:/config
ports:
- "8090:80"
- "8443:443"
restart: unless-stopped
volumes:
heimdall_config:
Strengths: Beautiful, simple interface, easy to set up, supports "enhanced" apps with live data (Pi-hole stats, etc.).
Limitations: Fewer features than Dashy/Homarr, no YAML configuration (database-based), limited customization, slower development pace.
Feature Comparison
| Feature | Homer | Homarr | Dashy | Heimdall |
|---|---|---|---|---|
| Configuration | YAML only | UI (drag-drop) | YAML + UI | UI only |
| Status checks | Basic (ping) | Yes | Advanced (HTTP/TCP/ICMP) | Limited |
| Authentication | No | Yes | Yes (bcrypt, OIDC) | No |
| Docker integration | No | Yes (auto-discover) | No | No |
| Service integrations | Pi-hole | 20+ (Sonarr, etc.) | Widgets | Enhanced apps |
| Theming | Basic (CSS vars) | Custom colors | 70+ themes | Background only |
| Resource usage | ~5 MB RAM | ~100-200 MB RAM | ~80-150 MB RAM | ~50-100 MB RAM |
| ARM64 support | Yes | Yes | Yes | Yes |
| Search | Yes | Yes | Yes (+ web search) | Yes |
| Multi-user | No | Yes | Yes | No |
Recommendations
- Choose Homer if you want the lightest possible dashboard, prefer managing configuration as code (YAML in Git), and do not need authentication or service integrations.
- Choose Homarr if you want a visual editor with drag-and-drop, Docker auto-discovery, and deep integrations with media management tools (Sonarr, Radarr, etc.).
- Choose Dashy if you want the most features, built-in authentication, extensive theming, and status monitoring for all services.
- Choose Heimdall if you want a beautiful, simple application launcher without the complexity of configuration files.
Note: All four dashboards support running behind a reverse proxy with SSL. If you already have Traefik or nginx configured for your other services, add your dashboard as another service with its own subdomain or path.