obsidian/wiki/concepts/glance-dashboard.md
2026-05-09 17:44:30 +01:00

3.9 KiB

title aliases tags sources created updated
Glance — Go-Binary Homelab Dashboard
glance-homelab
glance-dashboard
glanceapp
homelab
dashboard
glance
docker
self-hosted
daily/2026-04-29.md
2026-04-29 2026-04-29

Glance — Go-Binary Homelab Dashboard

Glance is a lightweight, single-binary homelab dashboard written in Go. It replaces heavier alternatives like Homarr and Homepage with a ~50 MB RAM footprint. Configuration is a single glance.yml file; there is no database. The UI is tab-based, each tab containing a column layout of widgets (bookmarks, RSS feeds, iframes, monitoring, etc.).

Key Points

  • Minimal resource usage — ~50 MB RAM in practice; single Go binary with no database
  • $include directive merges YAML at the same mapping level — cannot be used to separate page definitions into separate files; all pages must be inlined directly in glance.yml
  • Monitor widgets must use internal IPs (192.168.1.x), not Cloudflare-proxied public domains — Cloudflare overhead causes widget timeouts
  • qBittorrent widgets require "bypass auth for subnet 192.168.1.0/24" — otherwise widgets receive 401 and show no data
  • Password minimum is 6 characters — "admin" is rejected; use "admin1" or longer

Details

Setup and Configuration

Glance runs as a Docker container with a single bind-mounted glance.yml. The recommended 5-tab layout covers: Home / Services / Energy / Media / News.

Password management uses a hash stored in the environment:

# Generate a bcrypt hash for the admin password
docker run --rm glanceapp/glance password:hash <new_password>
# Copy the output hash into ADMIN_PASSWORD_HASH in your .env file

The $include directive is commonly misunderstood — it performs a YAML merge at the same mapping level, not a file include at arbitrary depth. This means pages cannot be split into separate files and included under pages:; the full page tree must live in glance.yml directly.

Widget Gotchas

Monitor widgets and Cloudflare: Glance's monitor widgets make HTTP HEAD requests to check uptime. When services are exposed via Cloudflare proxy (orange cloud), the extra DNS resolution and TLS handshake overhead regularly causes widget timeouts — even when the service itself is healthy. Fix: use the direct internal IP (http://192.168.1.x:PORT) in monitor widget URLs.

AdGuard stats widget: The /control/stats endpoint requires Basic Auth credentials. The Glance AdGuard widget has limited auth support; if it returns errors, skip it and use a direct iframe or bookmark instead.

Energy tab: An iframe embed of a Power Cost dashboard combined with Prometheus RAPL metrics works well. Key Prometheus queries:

Migration from Homarr

Homarr installation is retained at /opt/services/homarr/ for rollback. Glance does not import Homarr configuration — widgets and bookmarks must be recreated manually in glance.yml. The migration is straightforward because Glance's YAML config is simpler than Homarr's SQLite-backed UI.

Sources

  • daily/2026-04-29.md — Glance deployed as Homarr replacement; 5-tab layout; $include gotcha; monitor widget internal IP requirement; qBittorrent 401 fix; bcrypt password hash workflow; Energy tab iframe + Prometheus RAPL metrics