← All articles
INFRASTRUCTURE Self-Hosted Dashboards: Homepage, Homarr, and Dashy ... 2026-02-09 · dashboard · homepage · homarr

Self-Hosted Dashboards: Homepage, Homarr, and Dashy Compared

Infrastructure 2026-02-09 dashboard homepage homarr dashy docker start-page

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:

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

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

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:

Choose Homarr if:

Choose Dashy if:

Running Multiple Dashboards

There's nothing wrong with using more than one. A common setup:

Tips for a Good Dashboard

  1. Group by function, not by server. "Media," "Infrastructure," "Productivity" beats "Server 1," "Server 2."
  2. Use a reverse proxy so your dashboard links point to jellyfin.home.lan instead of 192.168.1.50:8096.
  3. Add status checks to catch services that have quietly crashed.
  4. Don't over-widget. A dashboard that takes 10 seconds to load defeats the purpose.
  5. 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.