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:
- Application type: pick from hundreds of known apps (Plex, Jellyfin, Nextcloud, Pi-hole, Portainer, Proxmox…). The icon and colour fill in automatically.
- Title and URL (e.g.
https://jellyfin.example.com). - Enhanced apps: for supported apps, enter the API URL and key, and the tile shows live stats (now playing, queue size, blocked queries).
- 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.