Heimdall is an application dashboard: a tidy start page with tiles linking to all your web apps and self-hosted services. Everything is configured through its web interface, with no YAML editing, which makes it one of the easiest dashboards to set up. “Enhanced apps” can show live information, such as active streams or download queues, right on the tile.

Want YAML configuration and many more widgets? See Homepage.

Install with Docker

The LinuxServer.io image is the standard way to run Heimdall:

# /opt/heimdall/compose.yaml
services:
  heimdall:
    image: lscr.io/linuxserver/heimdall:latest
    restart: unless-stopped
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      - ./config:/config
cd /opt/heimdall && docker compose up -d

Open it through an SSH tunnel at first, or put it behind a reverse proxy right away (below). See SSH tunnels.

Add applications

Click Application list → Add:

  1. Application type: pick from hundreds of known apps (Plex, Jellyfin, Nextcloud, Pi-hole, Portainer, Proxmox…). The icon and colour fill in automatically.
  2. Title and URL (e.g. https://jellyfin.example.com).
  3. Enhanced apps: for supported apps, enter the API URL and key, and the tile shows live stats (now playing, queue size, blocked queries).
  4. Tags group tiles into sections (“Media”, “Admin”, “Home”).

Add generic links too, for any URL: router admin pages, documentation, cloud consoles.

Search and start page

Heimdall includes a search bar (Google, DuckDuckGo, Bing, Startpage or custom), so it works well as the browser home page. Set a custom background image and theme in Settings.

Users

Settings → Users: create multiple users, each with their own dashboard. You can enable a password for each user, and allow public front pages per user. For anything exposed beyond your LAN or VPN, require login.

Expose it securely

Heimdall itself has only basic authentication features. Protect it at the proxy:

server {
    server_name home.example.com;
    auth_basic "Start page";
    auth_basic_user_file /etc/nginx/.htpasswd;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    # listen 443 ssl; certbot --nginx -d home.example.com
}

Better: single sign-on via Authelia or Authentik forward auth, or keep the dashboard VPN-only. A dashboard lists your entire infrastructure, and enhanced app tiles store API keys for your services. See Authelia 2FA, Nginx basic auth and Tailscale.

Backups and updates

  • Back up ./config. It contains the SQLite database with tiles, users, settings and stored API keys. Treat backups as sensitive. See backup strategy.
  • Update with docker compose pull && docker compose up -d. See updating self-hosted apps.

Heimdall vs Homepage vs others

Dashboard Configuration Live widgets Best for
Heimdall Web UI Some (enhanced apps) Easiest setup, non-technical users
Homepage YAML, Docker labels Many (100+ integrations) Homelabbers who like config-as-code
Dashy YAML or UI Many Highly customisable
Homarr Web UI, drag and drop Many Visual editing with integrations
Flame Web UI Few Minimal bookmarks and apps

Quick reference

Task Where
Start docker compose up -d
Add app Application list → Add
Live stats Enhanced app API URL + key
Users Settings → Users
Data ./config volume

Related: Homepage dashboard and Portainer.

  • Self-Hosting
  • Docker
  • Dashboard