Self-Host Dashy: Configurable Homelab Dashboard 2026
TL;DR
Dashy (MIT, ~17K GitHub stars, Vue.js) is a highly customizable homelab dashboard. Define your services in YAML (or use the visual editor), pick from 50+ themes, add widgets, and get a polished start page for your self-hosted services. Status checks show which services are up/down, search lets you jump to any app instantly, and multi-page layouts organize services by category. Zero-config deployment — runs from a single YAML file.
Key Takeaways
- Dashy: MIT, ~17K stars, Vue.js — configurable dashboard with 50+ themes
- YAML + visual editor: Configure in YAML or use the built-in UI editor
- 50+ themes: From minimal to cyberpunk — switch with one click
- Widgets: Clock, weather, RSS, system info, crypto prices, and more
- Status checking: Automatic ping/HTTP checks to show service health
- Search: Fuzzy search across all services — type to jump
Dashy vs Homepage vs Homarr
| Feature | Dashy | Homepage | Homarr |
|---|---|---|---|
| Config style | YAML + visual editor | YAML only | Web UI only |
| Themes | 50+ built-in | CSS customization | Built-in |
| Status checks | Yes (built-in) | Yes (via services) | Yes (built-in) |
| Docker integration | Labels | Excellent | Deep (start/stop) |
| Widgets | 30+ | 40+ | 20+ |
| Multi-page | Yes | No | Yes (boards) |
| Authentication | Built-in | No | Built-in |
| Search | Fuzzy search | Search | Search |
| Resource usage | ~50MB | ~50MB | ~200MB |
Part 1: Docker Setup
# docker-compose.yml
services:
dashy:
image: lissy93/dashy:latest
container_name: dashy
restart: unless-stopped
ports:
- "4000:8080"
volumes:
- ./dashy-config.yml:/app/user-data/conf.yml
healthcheck:
test: ['CMD', 'node', '/app/services/healthcheck']
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
# No volume needed for data — configuration is the YAML file
# Create a minimal config:
cat > dashy-config.yml << 'EOF'
pageInfo:
title: My Homelab
description: Dashboard for self-hosted services
navLinks: []
appConfig:
theme: one-dark
statusCheck: true
statusCheckInterval: 30
layout: auto
iconSize: medium
language: en
sections:
- name: Media
icon: fas fa-play
items:
- title: Jellyfin
url: https://jellyfin.yourdomain.com
icon: hl-jellyfin
- title: Navidrome
url: https://music.yourdomain.com
icon: hl-navidrome
- name: Productivity
icon: fas fa-briefcase
items:
- title: Nextcloud
url: https://cloud.yourdomain.com
icon: hl-nextcloud
- title: Vaultwarden
url: https://vault.yourdomain.com
icon: hl-vaultwarden
- title: Gitea
url: https://git.yourdomain.com
icon: hl-gitea
- name: Monitoring
icon: fas fa-heartbeat
items:
- title: Uptime Kuma
url: https://uptime.yourdomain.com
icon: hl-uptime-kuma
- title: Grafana
url: https://grafana.yourdomain.com
icon: hl-grafana
- name: Management
icon: fas fa-cogs
items:
- title: Portainer
url: https://portainer.yourdomain.com
icon: hl-portainer
- title: Proxmox
url: https://proxmox.yourdomain.com:8006
icon: hl-proxmox
EOF
docker compose up -d
Part 2: HTTPS with Caddy
start.yourdomain.com {
reverse_proxy localhost:4000
}
Part 3: Configuration
Item properties
items:
- title: Jellyfin # Display name
url: https://jellyfin.yourdomain.com # Link URL
icon: hl-jellyfin # Icon (see icon options below)
description: Media server # Subtitle text
target: newtab # newtab | sametab | modal | workspace
statusCheck: true # Enable health check
statusCheckUrl: https://jellyfin.yourdomain.com/health # Custom check URL
statusCheckAcceptCodes: "200,401" # Accept auth redirects as "up"
color: "#6B4CE6" # Custom color
tags:
- media
- streaming
Icon options
# Homelab icons (recommended — 500+ self-hosted app icons):
icon: hl-jellyfin
icon: hl-nextcloud
icon: hl-portainer
icon: hl-grafana
# Font Awesome:
icon: fas fa-server
icon: fab fa-docker
# Simple Icons (brand logos):
icon: si-github
icon: si-docker
# Favicon (auto-fetch from URL):
icon: favicon
# URL (custom image):
icon: https://example.com/logo.png
# Generative (unique pattern from title):
icon: generative
Part 4: Themes
Switch themes
appConfig:
theme: one-dark # Change this to any theme name
Popular themes
| Theme | Style |
|---|---|
one-dark | Dark with syntax-highlight colors |
dracula | Purple-accent dark theme |
nord | Cool blue minimal |
material-dark | Google Material dark |
matrix | Green-on-black terminal |
cyberpunk | Neon pink/yellow cyberpunk |
lissy-dark | Clean dark gradient |
vaporwave | Retro 80s aesthetic |
minimal-light | Clean white minimal |
Custom CSS
appConfig:
customCss: |
.item-wrapper {
border-radius: 12px;
}
.section-title {
font-family: 'JetBrains Mono', monospace;
}
Part 5: Widgets
Add widgets to any section:
sections:
- name: System Info
icon: fas fa-microchip
displayData:
collapsed: false
widgets:
- type: clock
options:
timeZone: America/Los_Angeles
format: en-US
- type: weather
options:
apiKey: your-openweathermap-key
city: San Francisco
units: imperial
- type: system-info
- type: rss-feed
options:
rssUrl: https://news.ycombinator.com/rss
apiKey: your-rss2json-key # Optional for parsing
limit: 5
- type: crypto-watch-list
options:
assets:
- bitcoin
- ethereum
- type: public-ip
- type: iframe
options:
url: https://grafana.yourdomain.com/d/dashboard?kiosk
Part 6: Multi-Page Layout
pages:
- name: Home
path: /
sections:
- name: Quick Access
items: [...]
- name: Media
path: /media
sections:
- name: Streaming
items: [...]
- name: Downloads
items: [...]
- name: DevOps
path: /devops
sections:
- name: CI/CD
items: [...]
- name: Monitoring
items: [...]
Pages appear as tabs in the navigation bar.
Part 7: Authentication
Built-in auth
appConfig:
auth:
enableLogin: true
users:
- user: admin
hash: "$2b$10$..." # bcrypt hash
type: admin
- user: guest
hash: "$2b$10$..."
type: normal
enableGuestAccess: false
# Generate bcrypt hash:
docker exec dashy node -e "const bcrypt=require('bcrypt');bcrypt.hash('password',10).then(h=>console.log(h));"
Keycloak/Authentik SSO
appConfig:
auth:
enableKeycloak: true
keycloak:
serverUrl: https://auth.yourdomain.com
realm: dashy
clientId: dashy-client
Part 8: Visual Editor
Don't like editing YAML? Use the built-in visual editor:
- Click the wrench icon → Config Editor
- Drag-and-drop sections and items
- Edit properties in form fields
- Save → updates the YAML file automatically
The visual editor and YAML stay in sync — use whichever you prefer.
Maintenance
# Update:
docker compose pull
docker compose up -d
# Backup (just the config file):
cp dashy-config.yml dashy-config-backup-$(date +%Y%m%d).yml
# Validate config:
docker exec dashy node /app/services/config-validator.js
# Logs:
docker compose logs -f dashy
See also: Homarr — dashboard with deep Docker integration and drag-and-drop
See all open source homelab tools at OSSAlt.com/categories/homelab.