Skip to main content

Self-Host Dashy: Configurable Homelab Dashboard 2026

·OSSAlt Team
dashydashboardhomelabself-hostingdocker2026

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

FeatureDashyHomepageHomarr
Config styleYAML + visual editorYAML onlyWeb UI only
Themes50+ built-inCSS customizationBuilt-in
Status checksYes (built-in)Yes (via services)Yes (built-in)
Docker integrationLabelsExcellentDeep (start/stop)
Widgets30+40+20+
Multi-pageYesNoYes (boards)
AuthenticationBuilt-inNoBuilt-in
SearchFuzzy searchSearchSearch
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
ThemeStyle
one-darkDark with syntax-highlight colors
draculaPurple-accent dark theme
nordCool blue minimal
material-darkGoogle Material dark
matrixGreen-on-black terminal
cyberpunkNeon pink/yellow cyberpunk
lissy-darkClean dark gradient
vaporwaveRetro 80s aesthetic
minimal-lightClean 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:

  1. Click the wrench iconConfig Editor
  2. Drag-and-drop sections and items
  3. Edit properties in form fields
  4. 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.

Comments