> ## Content Index
> Fetch the complete content index at: https://blog.uptime.bet/llms.txt
> Use this file to discover other available public pages before exploring further.

# Glance 0.8.8: A Lightweight Self-Hosted Dashboard for All Your Feeds, Set Up with Docker Compose
- URL: https://blog.uptime.bet/glance-self-hosted-feed-dashboard-docker/
- Published: 2026-11-11T08:00:00.000Z
- Updated: 2026-11-11T08:00:00.000Z
- Description: Glance is an AGPL-licensed, self-hosted dashboard that puts RSS, Reddit, Hacker News, YouTube, releases and Docker containers on one fast page. Here is how to run Glance 0.8.8 with Docker Compose, add a login and put it behind a reverse proxy.
- Author: Alexandre Nebeling
- Tags: Trending, Self-Hosted, Open Source, Docker, Homelab, Dashboard, RSS

Every morning starts the same way for a lot of us: open the RSS reader, check Hacker News, skim r/selfhosted, glance at the weather, see whether a new release of some tool you run has dropped, and maybe check if all containers are still up. That's five or six tabs before coffee. **Glance** wants to turn that routine into a single page.

Glance is a self-hosted dashboard that "puts all your feeds in one place". It has been quietly climbing for a while and now sits at more than 38,000 stars on GitHub, and version **0.8.8** shipped on 7 November 2026 with a batch of bug fixes and several fixed vulnerabilities. In this guide we'll look at what Glance does, how it differs from a classic homelab start page, and how to run it with Docker Compose.

## What is Glance?

[Glance](https://github.com/glanceapp/glance?ref=blog.uptime.bet) is a lightweight dashboard written in Go and licensed under the **AGPL-3.0**. You describe pages, columns and widgets in YAML files, and Glance renders them into a clean, fast, mobile-friendly page.

The key difference to tools like [Homepage](https://blog.uptime.bet/homepage-dashboard-homelab-docker/) is focus. Homepage is mainly a launcher for your services with status widgets. Glance can do that too, but its heart is **content**: feeds, posts, videos and releases you want to read. Think "personal start page and news aggregator" first, "homelab dashboard" second.

![Several Glance dashboards side by side in different color themes](https://blog.uptime.bet/content/images/2026/11/glance-themes-example-1.webp)

Glance ships with several themes and lets you build your own from a few color values. [Source: Glance repository](https://github.com/glanceapp/glance?ref=blog.uptime.bet) (AGPL-3.0)

## Key features

According to the official README and configuration docs, Glance offers:

- **Lots of widgets**: RSS feeds, subreddit posts, Hacker News, Lobsters, YouTube channel uploads, Twitch channels, weather, market prices, a calendar, clock, to-do list, bookmarks, search, GitHub releases and repositories.
- **Homelab widgets**: a `monitor` widget for site uptime, `docker-containers` for container status, `server-stats` for CPU, memory and disk, `dns-stats` for AdGuard Home, Pi-hole and Technitium, and a `change-detection` widget for changedetection.io.
- **Custom widgets**: `iframe`, `html`, `extension` (fetch HTML from a URL) and `custom-api`, which fetches JSON and renders it with a Go template. That's how people build widgets for Immich stats and similar services.
- **Fast and small**: a single binary under 20 MB, a similarly small Docker image, minimal vanilla JavaScript and low memory usage.
- **Pages, layouts and themes**: as many pages as you want, small and full-width columns, theme presets, a theme picker and custom CSS.
- **Optional login**: username/password authentication with hashed passwords and automatic blocking after repeated failed logins (added in v0.8.0).
- **Config auto-reload**: save the YAML file and changes apply without restarting.

One thing to know up front: Glance does **not** poll in the background. Data is fetched when you load the page and then cached per widget, and the page does not refresh itself. That keeps it light, but it is a start page, not a live wall display.

## What's new in 0.8.8

[Glance 0.8.8](https://github.com/glanceapp/glance/releases/tag/v0.8.8?ref=blog.uptime.bet) is a maintenance release. It fixes the releases widget with `include-prereleases`, a search widget bug that swallowed shortcuts containing the `S` key, market charts when all values are zero, wrong links in the change detection widget, IPv6 addresses in `sock-path` for the Docker widget, and Docker container filtering. The release notes also credit six contributors for fixed vulnerabilities, without listing the individual issues.

The two previous releases are worth knowing about too. [v0.8.7](https://github.com/glanceapp/glance/releases/tag/v0.8.7?ref=blog.uptime.bet) (15 October) fixed the Reddit widget after API changes, with one catch: the `search` property of the Reddit widget now only works with `app-auth` configured. It also limited authentication request bodies to 512 KB. [v0.8.6](https://github.com/glanceapp/glance/releases/tag/v0.8.6?ref=blog.uptime.bet) (3 September) fixed an `X-Forwarded-For` spoofing issue that allowed bypassing the login rate limit. If you expose Glance with a login, running the latest version matters.

## Installing Glance with Docker Compose

The project offers an official [Docker Compose template](https://github.com/glanceapp/docker-compose-template?ref=blog.uptime.bet). We'll build the same structure by hand so you know what every file does.

### Step 1: Create the folder structure

```bash
mkdir -p glance/config glance/assets && cd glance
touch assets/user.css .env

```

If you prefer the official one-liner from the README, this downloads the template files into a new `glance` folder:

```bash
mkdir glance && cd glance && curl -sL https://github.com/glanceapp/docker-compose-template/archive/refs/heads/main.tar.gz | tar -xzf - --strip-components 2

```

### Step 2: The `docker-compose.yml`

```yaml
services:
  glance:
    container_name: glance
    image: glanceapp/glance:v0.8.8
    restart: unless-stopped
    volumes:
      - ./config:/app/config
      - ./assets:/app/assets
      - /etc/localtime:/etc/localtime:ro
      # Only if you want the docker-containers widget:
      # - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - 8080:8080
    env_file: .env

```

The official template uses `glanceapp/glance` without a tag (that is `latest`). Pinning `v0.8.8` gives you controlled upgrades; tags for amd64, arm64 and armv7 are published on Docker Hub.

### Step 3: The main config `config/glance.yml`

```yaml
server:
  assets-path: /app/assets

theme:
  custom-css-file: /assets/user.css

pages:
  - $include: home.yml

```

The `$include` directive lets you keep each page in its own file. Included files must start at the top level, without extra indentation.

### Step 4: A homelab-flavoured home page `config/home.yml`

Here's a small starting point that mixes reading and homelab status. Replace the example.com URLs with your own:

```yaml
- name: Home
  columns:
    - size: small
      widgets:
        - type: calendar
          first-day-of-week: monday

        - type: rss
          limit: 10
          collapse-after: 3
          cache: 12h
          feeds:
            - url: https://selfh.st/rss/
              title: selfh.st
            - url: https://blog.uptime.bet/rss/
              title: uptime.bet

    - size: full
      widgets:
        - type: group
          widgets:
            - type: hacker-news
            - type: lobsters

        - type: reddit
          subreddit: selfhosted
          show-thumbnails: true

    - size: small
      widgets:
        - type: weather
          location: Berlin, Germany
          units: metric
          hour-format: 24h

        - type: monitor
          cache: 1m
          title: Services
          sites:
            - title: Immich
              url: https://photos.example.com
              icon: sh:immich
            - title: Vaultwarden
              url: https://vault.example.com
              icon: sh:vaultwarden

        - type: releases
          cache: 1d
          repositories:
            - glanceapp/glance
            - immich-app/immich
            - louislam/uptime-kuma

```

The `sh:` prefix pulls icons from the selfh.st icon set; `si:` (Simple Icons), `di:` (Dashboard Icons) and `mdi:` (Material Design Icons) work too. These icons are loaded from `cdn.jsdelivr.net`, so if you don't want that third-party request, download the icons and serve them from your `assets` folder.

![The Glance monitor widget listing several self-hosted services with response times](https://blog.uptime.bet/content/images/2026/11/glance-monitor-widget-preview-1.webp)

The monitor widget shows whether your services answer with HTTP 200 and how fast. [Source: Glance configuration docs](https://github.com/glanceapp/glance/blob/main/docs/configuration.md?ref=blog.uptime.bet#monitor) (AGPL-3.0)

### Step 5: Start it

```bash
docker compose up -d
docker compose logs -f glance

```

Open `http://your-server:8080` and you should see your dashboard. If the config is invalid on first start, Glance exits with an error in the logs. Later mistakes are reported in the logs while Glance keeps running with the last working config.

## Configuration tips

### Keep secrets in `.env`

Glance replaces `${VAR}` anywhere in the config with environment variables, so tokens don't need to live in the YAML:

```yaml
- type: releases
  token: ${GITHUB_TOKEN}
  repositories:
    - glanceapp/glance

```

Put `GITHUB_TOKEN=...` in `.env`. Without a token, the GitHub API allows 60 requests per hour, which is easy to hit with many repositories. Glance also supports Docker secrets via `${secret:name}` and reading a file via `${readFileFromEnv:VAR}`. Note that changes to `.env` require `docker compose up -d` again, while YAML changes reload automatically.

### Show your containers

Mount the Docker socket (read-only as above) and add the widget:

```yaml
- type: docker-containers
  hide-by-default: false

```

Then label the containers you want to show:

```yaml
  jellyfin:
    image: jellyfin/jellyfin:latest
    labels:
      glance.name: Jellyfin
      glance.icon: si:jellyfin
      glance.url: https://jellyfin.example.com
      glance.description: Movies & shows

```

Keep in mind that access to the Docker socket is effectively root access to the host. Even read-only, only do this if you trust the container and keep Glance behind a login.

![The Glance docker-containers widget showing several containers with icons and running status](https://blog.uptime.bet/content/images/2026/11/glance-docker-containers-preview-1.webp)

The docker-containers widget with icons, links and status for each container. [Source: Glance configuration docs](https://github.com/glanceapp/glance/blob/main/docs/configuration.md?ref=blog.uptime.bet#docker-containers) (AGPL-3.0)

### DNS and server stats

If you run [AdGuard Home](https://blog.uptime.bet/adguard-home-self-hosted-dns-ad-blocker-docker/) or [Pi-hole](https://blog.uptime.bet/pi-hole-v6-5-security-update-docker-compose/), the `dns-stats` widget shows queries, blocked percentage and top domains. Use `service: adguard`, `pihole-v6` (Pi-hole 6+), `pihole` (v5 and below) or `technitium`. The `server-stats` widget shows CPU, memory and disk of the host Glance runs on; remote hosts need the separate Glance Agent. The docs mark that widget as still under development, so for real monitoring keep a dedicated tool like [Beszel](https://blog.uptime.bet/beszel-lightweight-server-monitoring-docker/) or [Uptime Kuma](https://blog.uptime.bet/uptime-kuma-2-self-hosted-uptime-monitoring-docker/).

A tip from the README's "Common issues": if requests time out, the culprit is often the rate limit of your Pi-hole or AdGuard Home, because every widget triggers DNS lookups at once. Raise the limit in your DNS server.

## Adding a login

A dashboard with your container list and service URLs shouldn't be open to the internet. First generate a secret key and a password hash:

```bash
docker run --rm glanceapp/glance secret:make
docker run --rm glanceapp/glance password:hash 'your-strong-password'

```

Put both into `.env` and wrap the hash in single quotes there (for example `GLANCE_ADMIN_HASH='$2a$10$...'`), so Docker Compose doesn't try to interpret the `$` signs. Then reference them in `glance.yml`:

```yaml
auth:
  secret-key: ${GLANCE_SECRET_KEY}
  users:
    admin:
      password-hash: ${GLANCE_ADMIN_HASH}

```

Glance blocks an IP after 5 failed logins within 5 minutes. For that to work behind a reverse proxy, Glance needs to see the real client IP, which brings us to the next step.

If you already run an SSO provider such as [Pocket ID](https://blog.uptime.bet/pocket-id-self-hosted-passkey-sso-oidc-docker/) with a forward-auth proxy, you can protect Glance at the proxy level instead. The configuration docs only describe username and password logins, with no built-in OIDC option.

## Running behind a reverse proxy

Tell Glance it is proxied so it trusts `X-Forwarded-For`:

```yaml
server:
  assets-path: /app/assets
  proxied: true

```

With Traefik, remove the `ports:` section and add labels along these lines (adjust the entrypoint, certresolver and network names to your setup):

```yaml
    labels:
      - traefik.enable=true
      - traefik.http.routers.glance.rule=Host(`glance.example.com`)
      - traefik.http.routers.glance.entrypoints=websecure
      - traefik.http.routers.glance.tls.certresolver=letsencrypt
      - traefik.http.services.glance.loadbalancer.server.port=8080

```

Only set `proxied: true` when Glance is actually reachable only through the proxy; otherwise clients could fake their IP. If you host it under a subpath, set `base-url` and strip the prefix in your proxy.

## Backups and updates

Glance stores no database. Everything that matters is in your `config`, `assets` and `.env` files, so a backup is a simple copy of the folder (or a Git repository, minus `.env`). To update, change the image tag and run:

```bash
docker compose pull && docker compose up -d

```

Reloading the config clears the widget cache, so avoid hammering save while tuning widgets that call rate-limited APIs.

## Limitations

- **No live updates.** Data refreshes on page load only, apart from the clock and relative times.
- **YAML only.** There's no web editor. That's great for version control, less great if you want to click your dashboard together.
- **Reddit can be fragile.** The widget has needed several fixes after Reddit API changes, and search now requires `app-auth`.
- **Server stats are still experimental**, and the remote agent is in development.
- **Login is basic.** Username and password only, no OIDC or 2FA built in.

## Glance vs. Homepage

Both are YAML-configured, self-hosted and fast. [Homepage](https://blog.uptime.bet/homepage-dashboard-homelab-docker/) shines as a service launcher with deep integrations for many homelab apps. Glance shines as a reading dashboard: RSS, Reddit, Hacker News, YouTube and releases are first-class, and the homelab widgets are a useful bonus. Plenty of people run both, Homepage for services and Glance as the browser start page. If you'd rather have a full RSS reader with read states, look at [CommaFeed](https://blog.uptime.bet/commafeed-self-hosted-rss-reader-docker/) instead.

## Conclusion

Glance is one of those tools that is easy to try and hard to give up. One container, no database, a couple of YAML files, and your morning tab marathon becomes one page. Version 0.8.8 is a solid point to start: pin the tag, add a login, put it behind your reverse proxy and build your page widget by widget.

Do you use Glance as your start page, or do you prefer Homepage, Homarr or a plain bookmark folder? Let us know.

## Sources

- [Glance repository and README](https://github.com/glanceapp/glance?ref=blog.uptime.bet) (AGPL-3.0, checked 11 November 2026)
- [Glance configuration documentation](https://github.com/glanceapp/glance/blob/main/docs/configuration.md?ref=blog.uptime.bet)
- [Glance v0.8.8 release notes](https://github.com/glanceapp/glance/releases/tag/v0.8.8?ref=blog.uptime.bet), [v0.8.7](https://github.com/glanceapp/glance/releases/tag/v0.8.7?ref=blog.uptime.bet), [v0.8.6](https://github.com/glanceapp/glance/releases/tag/v0.8.6?ref=blog.uptime.bet), [v0.8.0](https://github.com/glanceapp/glance/releases/tag/v0.8.0?ref=blog.uptime.bet)
- [Official Docker Compose template](https://github.com/glanceapp/docker-compose-template?ref=blog.uptime.bet)
- [glanceapp/glance on Docker Hub](https://hub.docker.com/r/glanceapp/glance?ref=blog.uptime.bet)