Skip to content

Releases: glanceapp/glance

v0.7.2

15 Feb 15:24
Compare
Choose a tag to compare

New

  • Added hide-mountpoints-by-default property to the server-stats widget

Fixed

  • Potential fix for crash on OpenBSD when using server-stats widget
  • Fixed URL of Dashboard Icons to point to new repository
  • Fixed small visual glitch with the popover functionality

v0.7.1

10 Feb 11:27
Compare
Choose a tag to compare

Fixed an error when using the new playlists property in the videos widget (thanks corbin)

v0.7.0

09 Feb 19:45
d8a4d39
Compare
Choose a tag to compare

Jump to section

Docker container breaking changes

Until now, setting up Glance using its Docker container involved a somewhat unusual step where the config file was solely mounted as a volume. This tripped up some users and caused unnecessary confusion due to a few odd behaviors.

The default location of the config file has now been changed to /app/config/glance.yml from /app/glance.yml. That means your docker-compose.yml file should now look like the following:

services:
  glance:
    image: glanceapp/glance
    volumes:
      - ./config:/app/config

This also requires that you place your glance.yml file in a config directory in the same location as your docker-compose.yml file. If you're unsure what changes you need to make, there is an upgrade guide available here as well as a new recommended docker compose directory structure available here.

CLI breaking changes

Previously, you could run the following to validate your config file without starting Glance:

glance --config /path/to/config.yml --check-config

For the sake of consistency with the few new added comands (and because this shouldn't have been a flag in the first place), this has now been changed to:

glance --config /path/to/config.yml config:validate

New widgets

Docker containers

Display the status of your Docker containers along with an icon and an optional short description.

docker-containers-preview

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

Note

The widget requires access to docker.sock. If you're running Glance inside a container, this can be done by mounting the socket as a volume:

services:
  glance:
    image: glanceapp/glance
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Configuration of the containers is done via labels applied to each container:

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

For services with multiple containers you can specify a glance.id on the "main" container and glance.parent on each "child" container:

View docker-compose.yml
services:
  immich-server:
    image: ghcr.io/immich-app/immich-server
    labels:
      glance.name: Immich
      glance.icon: si:immich
      glance.url: https://immich.domain.com
      glance.description: Image & video management
      glance.id: immich

  redis:
    image: docker.io/redis:6.2-alpine
    labels:
      glance.parent: immich
      glance.name: Redis

  database:
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0
    labels:
      glance.parent: immich
      glance.name: DB

  proxy:
    image: nginx:stable
    labels:
      glance.parent: immich
      glance.name: Proxy

This will place all child containers under the Immich container when hovering over its icon:

docker-container-parent

If any of the child containers are down, their status will propagate up to the parent container:

docker-container-parent2

(thanks @baranovskis & @reality-exe, inspired by https://github.com/DVDAndroid/glance-docker-container-ext)

Custom API

Display data from any JSON API in an entirely customizable template.

Note

With great power come great requirements.

The configuration of this widget requires some basic knowledge of programming, HTML, CSS, the Go template language and Glance-specific concepts.

custom-api-preview-1

View glance.yml
- type: custom-api
  title: Random Fact
  cache: 6h
  url: https://uselessfacts.jsph.pl/api/v2/facts/random
  template: |
    <p class="size-h4 color-paragraph">{{ .JSON.String "text" }}</p>

custom-api-preview-2

View glance.yml
- type: custom-api
  title: Immich stats
  cache: 1d
  url: https://${IMMICH_URL}/api/server/statistics
  headers:
    x-api-key: ${IMMICH_API_KEY}
    Accept: application/json
  template: |
    <div class="flex justify-between text-center">
      <div>
          <div class="color-highlight size-h3">{{ .JSON.Int "photos" | formatNumber }}</div>
          <div class="size-h6">PHOTOS</div>
      </div>
      <div>
          <div class="color-highlight size-h3">{{ .JSON.Int "videos" | formatNumber }}</div>
          <div class="size-h6">VIDEOS</div>
      </div>
      <div>
          <div class="color-highlight size-h3">{{ div (.JSON.Int "usage" | toFloat) 1073741824 | toInt | formatNumber }}GB</div>
          <div class="size-h6">USAGE</div>
      </div>
    </div>

custom-api-preview-3

View glance.yml
- type: custom-api
  title: Steam Specials
  cache: 12h
  url: https://store.steampowered.com/api/featuredcategories?cc=us
  template: |
    <ul class="list list-gap-10 collapsible-container" data-collapse-after="5">
    {{ range .JSON.Array "specials.items" }}
      <li>
        <a class="size-h4 color-highlight block text-truncate" href="https://store.steampowered.com/app/{{ .Int "id" }}/">{{ .String "name" }}</a>
        <ul class="list-horizontal-text">
          <li>{{ div (.Int "final_price" | toFloat) 100 | printf "$%.2f" }}</li>
          {{ $discount := .Int "discount_percent" }}
          <li{{ if ge $discount 40 }} class="color-positive"{{ end }}>{{ $discount }}% off</li>
        </ul>
      </li>
    {{ end }}
    </ul>

(thanks @reality-exe)

Server stats

There are other projects dedicated to providing this kind of functionality and this is not meant to be a replacement for any of them, it's intended for people who just want the most basic information about their server without setting up a separate monitoring solution. Things will get improved based on feedback, but the goal is to keep it simple and minimal. If you're looking for a more feature-rich server monitoring solution, Beszel looks like a good choice. With that out of the way:

server-stats-preview

- type: server-stats
  servers:
    - type: local
      name: Services
      # optionally override the sensor used to determine CPU temperature
      # cpu-temp-sensor: thermal_zone0

      # optionally hide swap
      # hide-swap: true

      # optionally hide or rename mountpoints
      # mountpoints:
      #   "/boot/efi":
      #     hide: true
      #     name: EFI

There's a bunch of bars and their purpose might not be immediately obvious:

  • CPU - 1m and 15m average load
  • RAM - RAM and SWAP
  • Disk – the two mountpoints with the highest usage percentages

If your CPU is feeling a little spicy (assuming Glance was able to determine your CPU sensor) and reaches >=80°C, you'll see a little flame icon next to it. The progress indicators will also turn red (or the equivalent of your negative color) to hopefully grab your attention if anything is unusually high:

![server-stats-preview-1](https://github.com/user-attachments/assets/40597baf-e6e6-4d9c-be3b...

Read more

v0.6.4

26 Dec 13:37
Compare
Choose a tag to compare

Security

  • Updated dependencies to address a security vulnerability in golang.org/x/net.

Fixes

  • Fixed broken thumbnails of Reddit posts marked NSFW and those containing videos

v0.6.3

11 Dec 19:10
24f93d8
Compare
Choose a tag to compare

Changes

  • Changed simple icons provider from cdnjs.cloudflare.com to cdn.jsdelivr.net and switched to always using the latest version (was previously stuck on 11.14.0, plenty of icons have been added/updated since)

Fixes

  • Fixed a couple of graphical bugs such as the rain indicator in the weather widget not showing as well as the DNS stats widget having its graph displayed incorrectly
  • Fixed a bug with the weather widget graph in instances where the temperature for the entire day was the same

Heads up

v0.7.0 will likely come with a backwards-incompatible change in the Docker image which will require a slight tweak to your docker-compose file.

v0.6.2

29 Sep 23:54
Compare
Choose a tag to compare

New

  • Added /api/healthz endpoint that just returns a status code 200, useful for checking if Glance is running and is reachable (thanks @xunleii)

Fixes

  • Fixed a bug with the collapsing behavior of the videos widget using grid-cards style inside of a group widget on chromium based browsers (thanks Atlas)
  • Fixed a bug with the dns-stats widget for Pi-hole instances where the privacy setting was used to hide domain names (thanks @SimJunYou)
  • Fixed a bug with the bookmarks widget where icons for links with long titles were unintentionally shrinking (thanks @cody-at-ats)

v0.6.1

10 Sep 04:45
Compare
Choose a tag to compare

New

  • [Releases widget] Added the ability to fetch releases from Codeberg via codeberg: prefix (thanks @micash545 #210)

Fixed

  • [DNS stats widget] Fixed AdGuard not displaying graph data when statistics retention isn't set to 24 hours (thanks @samcro1967 #211)
  • Mobile navigation links wrapping

v0.6.0

08 Sep 03:30
066e512
Compare
Choose a tag to compare

More information about each new widget and property can be found in the configuration docs.

New

Preconfigured pages

There's a new document with a couple of example preconfigured pages for those who are looking for inspiration or just want to copy-paste something without going through the effort of configuring entire pages from scratch. Pull requests are welcome if you'd like to share your page configs!

Group widget

group-widget

- type: group
  widgets:
    - type: reddit
      subreddit: gamingnews
      show-thumbnails: true
    - type: reddit
      subreddit: games
      show-thumbnails: true
    - type: reddit
      subreddit: pcgaming
      show-thumbnails: true

Grouping widgets of any type is possible, not just reddit. It also works for both small and full columns! The only exception is that you can't have a group within a group, for those who were going to be cheeky and try that.

(thanks @VeryEvilHumna #169)

DNS stats widget

dns-stats-widget

Supports showing stats from both AdGuard Home and Pi-hole.

- type: dns-stats
  service: adguard
  url: https://adguard.domain.com/
  username: ...
  password: ...
- type: dns-stats
  service: pihole
  url: https://pihole.domain.com/
  token: ...

Branding customization

You can now change things such as the logo, favicon, footer, etc through the new top level branding property:

branding:
  # With support for HTML
  custom-footer: |
    <p>Powered by <a href="https://github.com/glanceapp/glance">Glance</a></p>

  # Or remove the footer entirely
  hide-footer: true

  logo-url: /assets/logo.png
  favicon-url: /assets/logo.png

(thanks @realdavidops #75)

Releases widget now supports showing releases from Docker Hub and GitLab

releases-widget

To help distinguish the source of each repository, there is also a new show-source-icon property:

- type: releases
  show-source-icon: true
  repositories:
    - go-gitea/gitea
    - jellyfin/jellyfin
    - glanceapp/glance
    - gitlab:fdroid/fdroidclient
    - dockerhub:gotify/server

(thanks @bigsk1 #120 & @Fumesover #165)

New customization properties for pages

You can now change the maximum width of pages with the new width property:

  - name: Startpage
    width: slim

Possible options are slim and wide. The maximum width for each is:

  • default: 1600px
  • slim: 1100px
  • wide: 1920px

Note that when set to slim, the maximum number of columns you can have goes down from 3 to 2.

You can now hide the desktop navigation for individual pages, useful for creating minimalsitic pages:

- name: Startpage
  hide-desktop-navigation: true

You can now vertically center the content on the page:

- name: Startpage
  center-vertically: true

Combining all 3 properties can give you a pretty clean startpage:

startpage-preview

The config for this page is available in the preconfigured pages doc.

New base-url property under server

This allows you to host Glance behind a reverse proxy and under a path rather than having to give Glance its own subdomain:

server:
  base-url: /glance

Without base-url:

https://glance.yourdomain.com/

With base-url (assuming you have your reverse proxy setup correctly):

https://yourdomain.com/glance/

(thanks @fenying #125 & @CremaLuca #167)

New commits-limit property for the Repository widget

Along with showing the latest issues and pull requests, you can also show the latest commits made to the main branch of a repository:

- type: repository
  commits-limit: 3

(thanks @aharivel #77)

New new-tab and autofocus properties for the Search widget

- type: search
  # defaults to showing results in a new tab when pressing Enter and same tab when pressing Ctrl + Enter
  new-tab: true

  # Automatically focuses the search input on page load so you can start typing immediately
  autofocus: true

(thanks @ralphocdol #137 & @tversteeg #170)

New instance-url and custom-url properties for the Lobsters widget

  - type: lobsters
    instance-url: # lobsters instance hosted somewhere other than https://lobste.rs/
    custom-url: # custom URL to a lobsters instance that returns posts in JSON format

(thanks @bersace #129)

New title-url and css-class properties for all widgets

You can now set links for widget titles:

- type: calendar
  title-url: https://calendar.google.com/calendar/u/0/r

- type: weather
  title-url: # link to your favorite weather provider

Some widgets (hacker-news, lobsters, reddit, twitch-channels and twitch-top-games) have sensible URLs set by default, though they can be changed to whatever you like.

To help with styling specific widgets using custom CSS, you can now add your own CSS classes to individual widgets:

  - type: rss
    css-class: my-custom-class-that-makes-links-glow

(thanks @DickenSerm #147)

New check-url for the Monitor widget

- type: monitor
  sites:
    - title: Jellyfin
      # this is the URL that will open when you click on the title
      url: https://jellyfin.yourdomain.com

      # this is the URL that will be requested to determine the status
      check-url: https://jellyfin.yourdomain.com/healthcheck

(thanks @MrExplode #154)

New show-flairs property for the Reddit widget

When set to true, shows post flairs.

New show-failing-only property for the Monitor widget

When set to true shows only the sites which were unreachable or returned an error response. Useful if you're monitoring a lot of sites and only want to look for issues.

  - type: monitor
    show-failing-only: true
    sites:
      ...

New single-line-titles property for the RSS widget with default styling

When set to true, truncates titles if they are longer than a single line. Useful if you're using the RSS widget with default styling in a small column and are unreasonably annoyed by frequent orphans.

Changed

Removed style: dynamic-columns-experimental and made it the default behavior

You no longer need to specify the style in order to have the bookmarks, monitor and markets widgets scale in full sized columns.

(thanks @DVDAndroid)

Shorts are now removed by default from the Videos widget

You can revert to showing them again using the new include-shorts property:

- type: videos
  include-shorts: true
  channels:
    ...

(thanks @3rd #176 & @bigsk1 #106)

You can now use custom bangs in the Search widget without a query

Before, if you had a custom bang that simply takes you to a link rather than perform a search, you couldn't use it unless you entered something after it:

doesn't work:

"!jellyfin"

works:

"!jellyfin 123"

This has now been changed and you can simply enter "!jellyfin" with nothing else and it will open the link for you.

(thanks @dracarys18 #163)

Twitch avatars are now clickable

... and they open the channel in a new tab. Neat.

(thanks @DVDAndroid #172)

RSS feeds without any items will no longer show an error

Before, if your RSS feeds didn't return any items you'd get a scary looking error message telling you no content could be fetched. This has now been changed for a more neutral message.

(thanks @DickenSerm #156)

Fixes

  • [Reddit widget] fixed crossposts so that they now show the subreddit of the original post in place of the link domain
  • [RSS widget] fixed feeds without titles so that the descriptions are used instead (thanks @ssrtw #145)
  • [RSS widget] fixed additional instances where the thumbnail wasn't showing when it should have
  • [RSS widget] fixed a crash when items had an empty link (thanks @ccjjxl #197)
  • [Releases widget] fixed instances where the version would include an extra v in the beginning (thanks @jbonadiman #202)
  • [Twitch channels widget] fixed streams without a category showing incorrect live since (thanks @DVDAndroid #171)

Notable community contributions

DVDAndroid/glance-docker-container-ext - a Glance extension that shows the status of Docker containers:

docker-containers-extension

Milestones

Glance has surpassed 100,000 downloads on Docker Hub. I did not expect my little side project to grow this much in the span of a couple of months. Thank you so much to everyone who's helped by contributing or simply spreading the word.

Sponsors

A special thank you to the people who have sponsored Glance:

If you'd also like to sponsor the project you can do so here. Thank you!

v0.5.1

09 Aug 15:13
b37f8a8
Compare
Choose a tag to compare

This is a small release that backports fixes from beta v0.6.0

Fixes

  • [Releases widget] fixed missing latest releases for repositories with lots of pre-releases (thanks @wfg)
  • [RSS widget] fixed missing thumbnails in a lot of scenarios
  • [Search widget] fixed input color when using light theme

v0.6.0-beta.2

07 Aug 18:05
Compare
Choose a tag to compare
v0.6.0-beta.2 Pre-release
Pre-release

More information about the configuration for this release can be found here.

New

  • Added group widget that allows grouping multiple widgets into one via tabs (thanks @VeryEvilHumna)
  • [Monitor widget] Added check-url property which allows having a different URL that gets pinged versus the one in the UI (thanks @MrExplode)
  • Added width property for each page with options slim and wide
  • Added base-url property to server which allows serving Glance behind a proxy and under a directory rather than a subdomain (thanks @CremaLuca)
  • Added hide-desktop-navigation property for each page which hides the desktop navigation for that page when set to true

Changed

  • [Videos widget] Shorts from YouTube channels are now filtered by default, to include them again use include-shorts: true (thanks @3rd)

Fixes

  • Fixed crash when using custom-css-file (thanks @DVDAndroid)
  • [Twitch channels widget] Fixed Twitch streams that don't have a category (thanks @DVDAndroid)