Skip to main content

How to Self-Host Homarr: Dashboard for Your Self-Hosted Services 2026

·OSSAlt Team
homarrdashboardself-hostingdockerhomelab2026

TL;DR

Homarr (MIT, ~7K GitHub stars, Next.js) is a customizable dashboard for your self-hosted services. Add app shortcuts, Docker container status, calendar, weather, and deep integrations with media management tools (Sonarr, Radarr, Jellyfin, etc.). Drag-and-drop layout, multiple boards, and a clean UI make it the control center for your homelab.

Key Takeaways

  • Homarr: MIT, ~7K stars, Next.js — modern dashboard with deep service integrations
  • Docker integration: See container status, start/stop/restart from the dashboard
  • App integrations: Sonarr, Radarr, Lidarr, Readarr, Overseerr, Jellyfin, Plex, qBittorrent
  • Drag-and-drop: Visual board editor — resize and arrange widgets freely
  • Multiple boards: Create separate dashboards for different purposes
  • Multi-user: User accounts with per-board permissions

Homarr vs Homepage vs Dashy

FeatureHomarrHomepageDashy
Setup styleWeb UIYAML configYAML/UI config
Docker integrationFull (start/stop)Status onlyNo
Drag-and-drop editorYesNoYes
Service integrationsDeep (API widgets)Deep (API widgets)Basic
Multi-userYesNoNo
Multiple boardsYesNoMultiple pages
RAM usage~200MB~50MB~100MB
Theme systemBuilt-inCSSBuilt-in

Part 1: Docker Setup

# docker-compose.yml
services:
  homarr:
    image: ghcr.io/homarr-dev/homarr:latest
    container_name: homarr
    restart: unless-stopped
    ports:
      - "7575:7575"
    volumes:
      - homarr_appdata:/appdata
      - /var/run/docker.sock:/var/run/docker.sock:ro   # Docker integration
    environment:
      # Secret key for session encryption:
      AUTH_SECRET: "${AUTH_SECRET}"   # openssl rand -base64 32

      # Default credentials (first run):
      DEFAULT_COLOR_SCHEME: dark

volumes:
  homarr_appdata:
docker compose up -d

Visit http://your-server:7575 → create your admin account → start building your dashboard.


Part 2: HTTPS with Caddy

dashboard.yourdomain.com {
    reverse_proxy localhost:7575
}

Part 3: Adding Apps

Quick app shortcuts

  1. Edit mode (pencil icon) → + Add app
  2. Configure:
    • Name: Jellyfin
    • URL: https://jellyfin.yourdomain.com
    • Icon: search for jellyfin (built-in icon library with 10,000+ icons)
    • Description: optional
    • Open in: New tab / Same tab / Iframe
  3. Save → drag to desired position

App categories

Organize apps into sections:

Media:       Jellyfin, Sonarr, Radarr, Overseerr, qBittorrent
Monitoring:  Uptime Kuma, Grafana, Netdata, CrowdSec
Productivity: Nextcloud, Vaultwarden, Gitea, Linkding
Management:  Portainer, Proxmox, pfSense, PiHole

Part 4: Widgets

Homarr's killer feature is deep integration widgets that pull real data from your services.

Docker widget

Shows container status with start/stop/restart controls:

  1. + Add widget → Docker
  2. No configuration needed — reads from /var/run/docker.sock
  3. Shows: running, stopped, paused containers
  4. Click a container → Start / Stop / Restart

Sonarr / Radarr widget

+ Add widget → Media Requests
Integration: Sonarr
URL: http://sonarr:8989
API Key: (from Sonarr → Settings → General → API Key)

Shows:

  • Upcoming episodes / movies
  • Missing episodes
  • Queue (downloading)
  • Calendar view of releases

Jellyfin / Plex widget

+ Add widget → Media Server
Integration: Jellyfin
URL: http://jellyfin:8096
API Key: (from Jellyfin → Dashboard → API Keys)

Shows currently streaming sessions, library counts, recent additions.

Weather widget

+ Add widget → Weather
Location: "San Francisco, CA"
Units: Imperial / Metric

Calendar widget

Shows events from Sonarr, Radarr, and Lidarr release calendars combined.

System health widget

+ Add widget → System Health

Shows CPU, RAM, disk usage of the host machine.

Uptime Kuma widget

+ Add widget → Monitoring
Integration: Uptime Kuma
URL: http://uptime-kuma:3001

Shows monitor status and uptime percentages.


Part 5: Board Customization

Layout

  • Grid system: Drag and resize widgets on a grid
  • Column count: Adjust from 2 to 12 columns per row
  • Widget sizes: Small (1 column), medium (2), large (3+)
  • Spacing: Configure gap between widgets

Theming

Settings → Appearance:
  - Color scheme: Dark / Light / Auto
  - Primary color: customizable
  - Background: solid color, gradient, or image URL
  - Opacity: widget transparency
  - Custom CSS: for advanced styling

Background image

Settings → Appearance → Background:
  URL: https://source.unsplash.com/random/1920x1080?nature
  # Or a local image served from your server

Part 6: Multiple Boards

Create separate dashboards for different contexts:

  1. Boards → + New Board
  2. Name: Home, Media, Development, Monitoring
  3. Each board has its own set of widgets and layout
  4. Switch between boards from the top navigation

Board permissions

Different users can see different boards:

Boards → Settings → Access:
  - Public: anyone can view (even without login)
  - Restricted: specific users only
  - Admin only: only administrators

Part 7: Multi-User Setup

Create users

Settings → Users → + Add User:
  Username: alice
  Email: alice@example.com
  Role: User / Admin

Roles

RoleCapabilities
AdminFull access, manage boards, users, settings
UserView assigned boards, interact with widgets
GuestView public boards only

Part 8: Advanced Configuration

Custom Docker labels

Instead of configuring apps in the UI, use Docker labels:

# On any Docker container:
services:
  jellyfin:
    image: jellyfin/jellyfin
    labels:
      homarr.name: "Jellyfin"
      homarr.icon: "jellyfin"
      homarr.url: "https://jellyfin.yourdomain.com"
      homarr.description: "Media Server"

Ping/health checks

Homarr can periodically ping your apps and show up/down status:

App Settings → Advanced:
  Status Check: Enabled
  Check Interval: 60 seconds

Iframe embedding

Embed another app directly inside Homarr:

+ Add widget → Iframe
URL: https://grafana.yourdomain.com/d/dashboard-id?kiosk
Height: 400px

Maintenance

# Update:
docker compose pull
docker compose up -d

# Backup:
tar -czf homarr-backup-$(date +%Y%m%d).tar.gz \
  $(docker volume inspect homarr_homarr_appdata --format '{{.Mountpoint}}')

# Logs:
docker compose logs -f homarr

See also: Homepage — YAML-configured alternative with lower resource usage

See all open source homelab tools at OSSAlt.com/categories/homelab.

Comments