glanceapp Release Notes

Last updated: Mar 14, 2026

glanceapp Products

All glanceapp Release Notes (10)

  • Jun 10, 2025
    • Date parsed from source:
      Jun 10, 2025
    • First seen by Releasebot:
      Mar 14, 2026
    glanceapp logo

    glance by glanceapp

    v0.8.4

    glanceapp unveils Material Design icon support with mdi prefix and auto-invert for library icons, enabling theme-aware color inversion. Fixes include multi-widget to-do on a page and S shortcut search for non English layouts. Docker health check removed. New contributors join the project.

    New

    Added support for Material Design icons via mdi prefix (thanks @NextBlaubeere)

    Made the auto-invert icon prefix work for icons from libraries, so you can now do things like icon: auto-invert sh:glance-dark which will automatically invert dark icons to light depending on your theme

    Fixes

    Fixed multiple to-do widgets on a single page not working (thanks @rhijjawi & @tty2)

    Fixed the search widget shortcut (S) not working when using a keyboard layout other than English (thanks @NikD0T)

    Changed

    The Docker image health check has been removed, for more information see #676

    New Contributors

    @chenkhuaning0816 made their first contribution in #687

    @thallada made their first contribution in #689

    @chenrui333 made their first contribution in #693

    @rhijjawi made their first contribution in #705

    @septechx made their first contribution in #699

    Original source Report a problem
  • May 19, 2025
    • Date parsed from source:
      May 19, 2025
    • First seen by Releasebot:
      Mar 14, 2026
    glanceapp logo

    glance by glanceapp

    v0.8.3

    glanceapp highlights a major v0.8.0 release with new customization power: disable the theme picker, mod function and safeHTML in the custom API widget, JSON options support, and root theme styling for dynamic themes. Also fixes proxy vars and hover text. Visit release notes for details.

    New

    • Added the ability to disable the theme picker via disable-picker: true under theme (thanks @NeoNyaa)
    • Added mod function (modulo) to the custom API widget (thanks @anant-j)
    • Added safeHTML function to the custom API widget which prevents HTML from being escaped (thanks @sudoexec)
    • Added .Options.JSON to the custom API widget which takes any nested option value and turns it into a JSON string (thanks @ralphocdol)

    View example

    • type: custom-api
      options:
      request-body:
      service: Session
      method: login
      params:
      username: ${USERNAME}
      password: ${PASSWORD}

      useful if you need to send JSON in a request body

      template: |
      ...
      | withStringBody (.Options.JSON "request-body")

    Added the theme key to the document root so that you can apply styles based on the selected theme (thanks @EricKotato)

    View example

    :root[data-theme="default-dark"] {
    .color-primary-if-not-visited {
    color: #ff0000;
    }
    }
    :root[data-theme="default-light"] {
    .color-primary-if-not-visited {
    color: #00ff00;
    }
    }
    :root[data-theme="your-theme-name"] {
    .color-primary-if-not-visited {
    color: #0000ff;
    }
    }
    

    Fixes

    • Fixed HTTP_PROXY and HTTPS_PROXY environment variables not getting used (thanks @mazzz1y)
    • Fixed truncated links' hover text having unnecessary whitespace (thanks @ralphocdol)

    Visit the release notes for v0.8.0 to learn about all new features

    Original source Report a problem
  • All of your release notes in one feed

    Join Releasebot and get updates from glanceapp and hundreds of other software products.

  • May 16, 2025
    • Date parsed from source:
      May 16, 2025
    • First seen by Releasebot:
      Mar 14, 2026
    glanceapp logo

    glance by glanceapp

    v0.8.0

    glanceapp unveils a major update with authentication, a theme picker, nested config, Docker secrets, a to-do widget and new widgets plus a refreshed logo. The release expands customization, improves widgets, and boosts navigation and PWA setup for a richer personal dashboard experience.

    Another big update is here! This one includes authentication, a theme picker, new customization options, a to-do widget and lots of improvements to existing widgets. Before we get to details of all that...

    Feedback wanted

    Deciding what features to add to a project like this is no easy task. Most self-hosted services focus on doing one thing and adding features around that thing, but with a personal dashboard/feed aggregator you can practically display anything, so how do you decide what does and doesn't belong? So far I've been prioritizing feature requests with a high number of upvotes and those I believe fit with the vision of the project, although admittedly Glance has deviated quite a bit from its initial purpose.

    As with almost all communities, a minority of people are very vocal about their wants and needs, while the majority are just riding along. Rather than guessing what the community as a whole would benefit from the most moving forward, I thought I could just ask through a short survey.

    Link to the survey
    It's entirely anonymous, should only take about 1 to 3 minutes to complete, and I'd be happy to share the results once there are enough responses. Thank you to those who take the time to fill it out.

    Jump to section

    Community widgets

    New logo

    New features

    Nested config includes and new include syntax

    Using Docker secrets within the config

    Theme picker

    Authentication

    To-do widget

    Hiding widget titles

    Head widgets

    Separate navigation and page widths

    PWA configuration

    Widget enhancements

    [Docker containers] Container customization in the config, support for proxies, category and format-container-names properties

    [Custom API] Synchronous API calls and options property

    [Reddit] Support for application auth

    [RSS] Conditional requests

    [Monitor] basic-auth and timeout properties

    [DNS Stats] Support for Technitium

    Community widgets

    If you weren't aware, there's now a repository for widgets made by the community with 40+ widgets available so far. Most are made using the custom-api widget, so adding them is as simple as copying them into your glance.yml. It's a great place to find new widgets, and if you have a widget that you think others would benefit from, please consider sharing it there. Thank you to everyone who has contributed!

    New logo

    Big thanks to @Tom607 for offering help with the logo and going over dozens of different iterations!

    I believe it does a great job at conveying the widgety layout of Glance, while also being simple and clean, as is the rest of the design language.

    New features

    Nested config includes and new include syntax

    Up until now, you could only use the !include directive in your glance.yml file, but not within any of the included files. This has been changed so that you can includes files from within included files as many times as you need, meaning you can have a separate file for each page, a separate file for each column, and even a separate file for each widget if you wanted to:
    glance.yml
    ├── home.yml
    │ ├── column1.yml
    │ │ ├── widget1.yml
    │ │ └── widget2.yml
    │ └── column2.yml
    │ ├── widget3.yml
    │ └── widget4.yml
    In addition, the !include directive can now instead be written as $include. The reason for this change is that it turns out !include, with the way it was used in Glance, is not actually valid YAML (whoops), meaning it makes YAML validators and syntax highlighters angry. The new $include syntax is valid YAML and will be the preferred syntax moving forward. You can also add a - at the beginning of a line when including array items, since that's the expected syntax for YAML arrays.

    Before:
    theme:
    !include: theme.yml
    pages:
    !include: home.yml
    !include: homelab.yml
    !include: startpage.yml

    Now:
    theme:
    $include: theme.yml
    pages:

    • $include: home.yml
    • $include: homelab.yml
    • $include: startpage.yml

    Using Docker secrets within the config

    Along with environment variables, you can now use Docker secrets in your config file using the following syntax:
    token: ${secret:github_token} # Reads the contents of /run/secrets/github_token
    token: ${GITHUB_TOKEN} # Environment variable
    (thanks @gomeology)

    Theme picker

    You can now define multiple theme presets and switch between them in the UI, no more config changes needed to change the theme!

    View config
    theme:
    presets:
    neon-focus:
    background-color: 255 14 6
    primary-color: 156 50 65
    negative-color: 342 65 65
    contrast-multiplier: 0.9
    text-saturation-multiplier: 0.8
    gruvbox-dark:
    background-color: 0 0 16
    primary-color: 43 59 81
    positive-color: 61 66 44
    negative-color: 6 96 59
    catppuccin-macchiato:
    background-color: 232 23 18
    contrast-multiplier: 1.2
    primary-color: 220 83 75
    positive-color: 105 48 72
    negative-color: 351 74 73
    peachy:
    light: true
    background-color: 28 40 77
    primary-color: 155 100 20
    negative-color: 0 100 60
    contrast-multiplier: 1.1
    text-saturation-multiplier: 0.5

    Glance will include its own default dark and light themes in the list of presets, which you can override by using the default-dark and default-light keys.
    (thanks @hecht-a)

    Authentication

    You can now add authentication via username and password:
    auth:
    secret-key: # this must be set to a random value generated using the secret:make CLI command
    users:
    admin:
    password: ${ADMIN_PASSWORD}

    While there is support for multiple users, you cannot customize the dashboard per user at this time, so all users will see the same dashboard.

    To generate the secret key, use the secret:make CLI command:
    docker run --rm glanceapp/glance secret:make

    Or with the binary:
    /opt/glance/glance secret:make

    If you do not want to store plain passwords in environment variables or in files, you can hash your password and provide it via the password-hash property instead:
    auth:
    secret-key: # this must be set to a random value generated using the secret:make CLI command
    users:
    admin:
    password-hash: $2y$10$...
    To hash your password, use the password:hash CLI command:
    docker run --rm glanceapp/glance password:hash mypasswordishunter2

    Or with the binary:
    /opt/glance/glance password:hash mypasswordishunter2

    To-do widget

    A fairly simple to-do widget with the ability to add, edit, reorder and delete tasks:

    • type: to-do

    There are a number of keyboard shortcuts available that make it easier to use, which you can find over at the config docs.
    The tasks are stored in the browser's local storage, so they won't be available on all devices. If you want to add multiple todo widgets, you must specify a unique id for each one:

    • type: to-do
      title: Work tasks
      id: work
    • type: to-do
      title: Personal tasks
      id: personal
      (thanks @AMS003010)

    Hiding widget headers

    A fairly simple addition, but one that's been requested quite a few times - you can now hide widget headers by setting the hide-header property to true:
    widgets:

    • type: calendar
      hide-header: true

    If you do this for all widgets, you get something like this:

    Note that you cannot hide the header of the group widget since it's used to switch between each widget.

    Head widgets

    You can now define "head widgets" on each page, which are basically widgets that sit above all columns and take up the full width. Combined with the hide-header property, you get something like this:
    View config
    pages:

    • name: Home
      head-widgets:
    • type: markets
      hide-header: true
      markets:
    • symbol: SPY
      name: S&P 500
    • symbol: BTC-USD
      name: Bitcoin
    • symbol: NVDA
      name: NVIDIA
    • symbol: AAPL
      name: Apple
    • symbol: MSFT
      name: Microsoft
      columns:
    • size: small
      widgets:
    • type: calendar
    • size: full
      widgets:
    • type: hacker-news
    • size: small
      widgets:
    • type: weather
      location: London, United Kingdom

    This works well for displaying mostly horizontal widgets such as the videos widget, RSS widget with horizontal-cards style, or widgets which span their items horizontally, such as the markets widget.

    Separate navigation and page widths

    You can now have different desktop navigation and content widths:
    pages:

    • name: Home
      width: slim
      desktop-navigation-width: wide
      columns:
      ...
      By default desktop-navigation-width will inherit the value of width, but can explicitly be set to a different value (default, slim or wide). Using this property, if one of your pages has a different width than the rest, you can set the navigation to be the same width as the rest of the pages, meaning no more jankiness when switching between pages of different widths!

    PWA configuration

    You can now configure PWA things such as the app name, icon and theme color:
    branding:
    app-name: Not Glance
    app-icon: /assets/path/to/icon.png
    app-background-color: '#000000' # ideally in hex format, since support for other formats is inconsistent between browsers
    (thanks @dvdpearson)

    Widget enhancements

    [Docker containers] Container customization in the config, support for proxies and category property

    Instead of using docker labels to customize the containers, you can now do so within your glance.yml:

    • type: docker-containers
      containers:
      container_name_1:
      name: Container Name
      description: Description of the container
      url: https://container.domain.com
      icon: si:container-icon
      hide: false
      container_name_2:
      name: Other Container Name
      description: Other description of the container
      url: https://other-container.domain.com
      icon: si:container-icon
      hide: false
      (thanks @mike391)

    You can now also specify a proxied docker socket URI instead of a path to a socket file:

    The new category property allows you to split up categories of containers into different widgets:
    glance.yml:

    This will only list containers which have the glance.category label "tools"

    • type: docker-containers
      title: Tools
      category: tools

    This will only list containers which have the glance.category label "arr"

    • type: docker-containers
      title: Arr
      category: arr
      docker-compose.yml:
      services:
      my-container:
      image: my-image
      labels:
      glance.category: tools
      my-other-container:
      image: my-image
      labels:
      glance.category: arr
      (thanks @shareef945)

    [Custom API] Synchronous API calls and options property

    So far you could only run asynchronous API calls, meaning you couldn't use the result of one API call in another. There is now support for synchronous API calls within the template itself:

    • type: custom-api
      url: https://api.example.com/get-id-of-something
      template: |
      {{/* The ID is taken from the first API call /}}
      {{ $theID := .JSON.String "id" }}
      {{/
      Then used in the second API call */}}
      {{
      $something := newRequest (concat "https://api.example.com/something/" $theID)
      | withParameter "key" "value"
      | withHeader "Accept" "application/json"
      | getResponse
      }}
      {{ $something.JSON.String "title" }}
      You can optionally add query parameters using withParameter, headers with withHeader, and turn the request method into POST with a string body via withStringBody. This also means that you can conditionally execute requests within if statements, unlike with the subrequests property which executes all requests every time the cache expires.

    In addition, the url property is now optional, meaning you can execute requests solely within the template. This is useful if you need to supply dynamic parameters to the endpoint:

    • type: custom-api
      title: Events from the last 24h
      template: |
      {{
      $events := newRequest "https://api.example.com/events"
      | withParameter "after" (offsetNow "-24h" | formatTime "rfc3339")
      | getResponse
      }}
      {{ if eq $events.Response.StatusCode 200 }}
      {{ range $events.JSON.Array "events" }}
      <div>{{ .String "title" }}</div>
      <div {{ .String "date" | parseTime "rfc3339" | toRelativeTime }}></div>
      {{ end }}
      {{ else }}
      <p>Failed to fetch data: {{ $events.Response.Status }}</p>
      {{ end }}

    There's a new options property which allows you to specify configurable options within the widget, rather than within the template.
    View example

    Instead of defining options within the template and having to modify the template itself like such:

    • type: custom-api
      template: |
      {{ /* User configurable options */ }}
      {{ $collapseAfter := 5 }}
      {{ $showThumbnails := true }}
      {{ $showFlairs := false }}
      <ul class="list list-gap-10 collapsible-container" data-collapse-after="{{ $collapseAfter }}">
      {{ if $showThumbnails }}
      <li>
      <img src="{{ .JSON.String "thumbnail" }}" alt="" />
      </li>
      {{ end }}
      {{ if $showFlairs }}
      <li>
      <span class="flair">{{ .JSON.String "flair" }}</span>
      </li>
      {{ end }}
      </ul>

    You can use the .Options object to retrieve and define default values for these variables:

    • type: custom-api
      template: |
      {{ $collapseAfter := .Options.IntOr "collapse-after" 5 }}
      {{ $showThumbnails := .Options.BoolOr "show-thumbnails" true }}
      {{ $showFlairs := .Options.BoolOr "show-flairs" false }}
      <ul class="list list-gap-10 collapsible-container" data-collapse-after="{{ $collapseAfter }}">
      {{ if $showThumbnails }}
      <li>
      <img src="{{ .JSON.String "thumbnail" }}" alt="" />
      </li>
      {{ end }}
      {{ if $showFlairs }}
      <li>
      <span class="flair">{{ .JSON.String "flair" }}</span>
      </li>
      {{ end }}
      </ul>

    This way, you can optionally specify the collapse-after, show-thumbnails and show-flairs properties in the widget configuration:

    • type: custom-api
      options:
      collapse-after: 5
      show-thumbnails: true
      show-flairs: false

    Which allows you to reuse the same template multiple times with different options:

    Note that custom-widgets isn't a special property, it's just used to define the reusable "anchor", see https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/

    The contents of the widget could also be included from its own file

    custom-widgets:

    • &example-widget
      type: custom-api
      template: |
      {{ .Options.StringOr "custom-option" "not defined" }}
      pages:
    • name: Home
      columns:
    • size: full
      widgets:
    • <<: *example-widget
      options:
      custom-option: "Value 1"
    • <<: *example-widget
      options:
      custom-option: "Value 2"

    Currently, the available methods on the .Options object are: StringOr, IntOr, BoolOr and FloatOr.

    [Reddit] Support for application auth

    Instead of using a proxy to bypass Reddit's restrictions of VPS IPs, you can now use your own Reddit application credentials to authenticate with Reddit's API:

    • type: reddit
      subreddit: technology
      app-auth:
      name: ${REDDIT_APP_NAME}
      id: ${REDDIT_APP_CLIENT_ID}
      secret: ${REDDIT_APP_SECRET}
      To create an app on Reddit, go to this page.
      (thanks @s0ders)

    [RSS] Conditional requests

    RSS feeds are usually the slowest widgets to load, leading to longer than necessary loading times. To help with this, the RSS widget now supports conditional requests, meaning it will use either the ETag or Last-Modified headers provided by the server, if available, to conditionally request the feed only if it has changed since the last request. This should speed things up in some cases and make sysadmins a little happier.
    (thanks @charlesharries)

    [Monitor] basic-auth and timeout properties

    The monitor widget now has support for basic authentication and a timeout property:

    [DNS Stats] Support for Technitium

    The DNS stats widget now has support for Technitium DNS:

    • type: dns-stats
      service: technitium
      token: ${TECHNITIUM_TOKEN}
      (thanks @anarqist and @KevinFumbles)

    Fixes

    Fixed an issue with the weather widget where some locations were not being returned properly (thanks @MooToYou)

    Fixed an issue with some widgets where user-provided URLs were being escaped when they shouldn't be (thanks @Kamalaja)

    Thank you

    Thank you to everyone who has continued to sponsor the project, and to those who have contributed in any way. I really appreciate it!

    Merged PRs

    Added Technitium Service Option to DNS-Stats Widget by @KevinFumbles in #339
    feat(monitor): add basic-auth feature for protected sites by @ejsadiarin in #367
    feat: add parameters and array parameters support by @ralphocdol in #378
    fix: full width clickable link for monitor-site by @ralphocdol in #405
    feat: custom-api multiple API queries by @ralphocdol in #385
    make title-url of pihole and pihole-v6 default to /admin by @ralphocdol in #466
    Add bing and perplexity as search engines by @jpinz in #476
    Add Kagi and Startpage as search engines by @stripedew in #480
    Add replaceMatches function to custom-api by @ralphocdol in #542
    Add filter on already seen links for RSS feeds by @HtFilia in #494
    added unique to filter arrays with unique items in custom-api by @ralphocdol in #580
    [sensors] allow sensor readings when there are warnings by @anxdpanic in #583
    Support embed icons on bookmarks URLs by @hitalos in #578
    Dynamize manifest.json with configurable options by @dvdpearson in #602
    update error reporting for custom-api JSON validation by @anxdpanic in #594
    Feat: Added support for configuring Docker containers through glance.yaml instead of labels by @mike391 in #453
    Minor design tweak, polishing up the polyline corners by @mmshivesh in #623
    feat: Use conditional requests for RSS feeds by @charlesharries in #462
    feat: theme switcher by @hecht-a in #299
    v0.8.0 by @svilenmarkov in #648

    New Contributors

    @KevinFumbles made their first contribution in #339
    @ejsadiarin made their first contribution in #367
    @jpinz made their first contribution in #476
    @stripedew made their first contribution in #480
    @HtFilia made their first contribution in #494
    @anxdpanic made their first contribution in #583
    @hitalos made their first contribution in #578
    @dvdpearson made their first contribution in #602
    @mike391 made their first contribution in #453
    @mmshivesh made their first contribution in #623
    @charlesharries made their first contribution in #462

    Full Changelog: v0.7.13...v0.8.0

    Original source Report a problem
  • May 14, 2025
    • Date parsed from source:
      May 14, 2025
    • First seen by Releasebot:
      Mar 14, 2026
    glanceapp logo

    glance by glanceapp

    v0.8.2

    glanceapp releases v0.8.0 with fixes for navigation, favicons, head-widgets crash, video URL escaping, and new startOfDay endOfDay APIs.

    Release notes

    • Fixed hide-deskop-navigation not working (thanks @LZStealth)
    • Fixed custom favicons not working in Chromium browsers (thanks @AWildLeon)
    • Fixed server crash when using head-widgets with the releases widget (thanks @aykhans)
    • Fixed URLs getting escaped when using video-url-template in the videos widget with the vertical-list style (thanks @Kamalaja)
    • Added startOfDay and endOfDay functions to the custom API widget (thanks @ralphocdol)

    Visit the release notes for v0.8.0 to learn about all new features

    Original source Report a problem
  • May 13, 2025
    • Date parsed from source:
      May 13, 2025
    • First seen by Releasebot:
      Mar 14, 2026
    glanceapp logo

    glance by glanceapp

    v0.8.1

    glanceapp fixes an error that blocked page loading when hide-desktop-navigation is true and points users to v0.8.0 release notes for new features.

    Fixed an error that prevented the page from loading when hide-desktop-navigation is set to true (thanks @Geffreyvanderbos and @Blooym)

    Visit the release notes for v0.8.0 to learn about all new features

    Original source Report a problem
  • Apr 22, 2025
    • Date parsed from source:
      Apr 22, 2025
    • First seen by Releasebot:
      Mar 14, 2026
    glanceapp logo

    glance by glanceapp

    v0.7.13

    glanceapp announces Custom API parseLocalTime, adds search widget target, and fixes server stats temperature sensors and reddit URL escaping.

    New

    • [Custom API] Added parseLocalTime function, which works like parseTime, however in the absence of a timezone it uses the local timezone instead of UTC.
    • [Search widget] Added target property which is used when opening the search results in a new tab (thanks @Jacksaur)

    Fixes

    • [Server stats widget] Fixed being unable to retrieve temperature sensors in some instances (thanks @anxdpanic)
    • [Reddit widget] Fixed the URL not being correctly escaped when using request-url-template (thanks @yurigiu)
    Original source Report a problem
  • Apr 14, 2025
    • Date parsed from source:
      Apr 14, 2025
    • First seen by Releasebot:
      Mar 14, 2026
    glanceapp logo

    glance by glanceapp

    v0.7.12

    glanceapp fixes a server crash when a widget is configured to fetch a single resource, improving stability across configurations.

    Fixed server crash in some configurations when a widget is provided with a single resource to fetch instead of multiple

    Original source Report a problem
  • Apr 13, 2025
    • Date parsed from source:
      Apr 13, 2025
    • First seen by Releasebot:
      Mar 14, 2026
    glanceapp logo

    glance by glanceapp

    v0.7.11

    glanceapp releases widget tweaks and fixes, including RSS filter, API widget updates, mountpoint:info CLI, richer sensors output, and fixes.

    What's changed

    • [RSS widget] Duplicate post links will now be filtered out (thanks @HtFilia)
    • [Custom API widget] Added replaceMatches and unique functions (thanks @ralphocdol)
    • Added mountpoint:info CLI command
    • Added more details to the output of sensors:print CLI command

    Fixes

    • [Twitch channels widget] Fixed live channels with 0 viewers getting incorrectly sorted lower than offline channels
    • [Server stats widget] Potential fix for missing mountpoint stats
    • Fixed the Yahoo finance test request in the diagnose CLI command
    Original source Report a problem
  • Apr 9, 2025
    • Date parsed from source:
      Apr 9, 2025
    • First seen by Releasebot:
      Mar 14, 2026
    glanceapp logo

    glance by glanceapp

    v0.7.10

    glanceapp releases v0.7.9 to v0.7.10 with bigger mobile tap targets, a sensors:print CLI, and dependency bumps.

    What's Changed

    • Slightly increased the scale of everything on mobile to make things easier to tap on
    • Added sensors:print CLI command that lists all temperature sensors that Glance has access to
    • Bumped versions of dependencies

    New Contributors

    • @diceroll123 made their first contribution in #528
    • @FranklyFuzzy made their first contribution in #499
    • @daot made their first contribution in #486
    • @Panonim made their first contribution in #553

    Full Changelog: v0.7.9...v0.7.10

    Original source Report a problem
  • Mar 29, 2025
    • Date parsed from source:
      Mar 29, 2025
    • First seen by Releasebot:
      Mar 14, 2026
    glanceapp logo

    glance by glanceapp

    v0.7.9

    glanceapp unveils a small release centered on the custom-api widget: newline JSON support via JSONLines with skip-json-validation, new concat and time helpers (now, offsetNow, parseTime), and a Widget-Title-URL header for extension widgets. Also fixes for negative prices and integer/float math consistency.

    Changed

    You no longer need to convert numbers to float before doing math operations with them. When adding two integers together, the result will be an integer. Adding two floats together or an integer and a float will result in a float.

    Before:

    {{ (add (.JSON.Int "foo" | toFloat) (.JSON.Int "bar" | toFloat)) | toInt }}
    

    Now:

    {{ add (.JSON.Int "foo") (.JSON.Int "bar") }}
    

    (this is consistent for all math operations, not just addition)

    New

    skip-json-validation and .JSONLines

    Some API's return newline separated JSON objects instead of a single JSON array. This is not valid JSON, so the custom-api widget will fail to parse it. You can now set skip-json-validation to true to skip the validation step and parse the response as a list of JSON objects within your template.

    {"name": "Steve", "age": 30}
    {"name": "Alex", "age": 25}
    {"name": "John", "age": 35}
    

    You can then access the JSON objects using .JSONLines:

    {{ range .JSONLines }}
    {{ .String "name" }}
    {{ end }}
    

    New functions

    concat
    
    {{ concat "foo" "bar" "baz" }}
    

    will return foobarbaz.
    (thanks @ralphocdol)

    now

    Returns the current time as a time.Time object.

    {{ now }}
    {{ now.Hour }}:{{ now.Minute }}:{{ now.Second }}
    {{ now.Unix }}
    
    2025-03-29 17:20:18.4905224 +0000 GMT m=+376.954385401
    17:20:18
    1743268818
    

    This can also be used to convert time to your current timezone:

    {{ $parsedTime := .JSON.String "date_created" | parseTime "rfc3339" }}
    {{ $created := $parsedTime.In now.Location }}
    {{ $created.Hour }}:{{ $created.Minute }}:{{ $created.Second }}
    

    (thanks @not-first & @ralphocdol)

    offsetNow

    Returns the current time offset by a given amount:

    {{ offsetNow "1h" }}
    
    {{ now }}
    
    {{ offsetNow "-1h" }}
    
    2025-03-29 18:44:04.2719241 +0000 GMT m=+4178.324981601
    2025-03-29 17:44:04.2719241 +0000 GMT m=+578.324981601
    2025-03-29 16:44:04.2719241 +0000 GMT m=-3021.675018399
    

    This can be used to check if something happened within a certain time frame:

    {{ $created := .JSON.String "date_created" | parseTime "rfc3339" }}
    {{ if ($created.After (offsetNow "-1h")) }}
    Created less than 1 hour ago
    {{ end }}
    

    Widget-Title-URL header for extension widget

    The extension widget can now return a Widget-Title-URL header to set the link of the widget's title if it has not already been set by the user.
    (thanks @not-first)

    Fixes

    The markets widget will now properly display prices of markets where the price is less than 0.01 (thanks @nsdont)

    Original source Report a problem

Related vendors