Files

4.7 KiB

modern-glance

InstallEditorConfigurationThemes

A fork of glanceapp/glance that adds a web-based dashboard editor so you can manage your config without touching YAML.

Upstream credit: All core functionality — widgets, theming, layout engine, hot-reload — is the work of the Glance project and its contributors. This fork adds an editing UI on top and nothing else. If you find Glance useful, consider sponsoring the upstream project.

⚠️ Vibe coded: The editing UI in this fork was built entirely with AI assistance and has not been rigorously tested. It may have bugs, edge cases, or security issues — particularly around config file handling. Use it on a trusted network, keep backups, and don't be surprised if something breaks. PRs welcome.


What's added

In-place edit mode

A pencil button in the dashboard header toggles edit mode. While active you can:

  • Drag and drop widgets between columns and reorder them
  • Add widgets via a form dialog (for most widget types) or a YAML editor fallback
  • Edit widgets inline with per-field forms — includes live lookup for weather locations, market symbols, and RSS feed validation
  • Delete widgets
  • Add, delete, resize, and reorder columns
  • Add and manage head widgets (the row above the columns)

Page management (/edit)

  • Add, delete, and reorder pages
  • Per-page settings: name, slug, width, navigation options, mobile header

Site settings (/edit/site-settings)

  • App name, logo, favicon, footer — all editable without touching YAML

Theme settings (/edit/theme-settings)

  • Color pickers for background, primary, positive, and negative colors (hex input, stored as HSL)
  • Contrast and text saturation multipliers
  • Light mode toggle, hide-picker toggle, custom CSS file path
  • Preset management: add, edit, and delete named theme presets with live preview swatches
  • Built-in theme catalog: 14 themes from the upstream docs (Dracula, Catppuccin variants, Gruvbox, and more) importable with one click

Multi-step undo

/edit keeps a 10-step numbered backup chain (glance.yml.bak.1.bak.10). Each save rotates the chain; any backup can be restored individually.

Auth gate

/edit returns 403 unless auth.users is configured or admin.allow-without-auth: true is set. See docs/glance.yml for examples of both.


Installation

# docker-compose.yml
services:
  glance:
    image: ghcr.io/uhlwoogi/modern-glance:latest
    ports:
      - "8080:8080"
    volumes:
      # Config dir — glance.yml lives here and is written by /edit
      - ./config:/app/config
      # Optional: custom CSS / images (set server.assets-path: /app/assets in glance.yml)
      - ./assets:/app/assets
    restart: unless-stopped
    # environment:
    #   MY_SECRET_TOKEN: abc123   # reference as ${env:MY_SECRET_TOKEN} in glance.yml
  1. Create the config directory and grab the starter config:

    mkdir -p config assets
    curl -o config/glance.yml https://raw.githubusercontent.com/uhlwoogi/modern-glance/main/docs/glance.yml
    
  2. Start:

    docker compose up -d
    
  3. Open http://localhost:8080 — click the pencil icon in the header to start editing.

The starter glance.yml has admin.allow-without-auth: true so /edit is open by default. Switch to the auth block in the file before exposing to a network you don't fully trust.

Updating

docker compose pull && docker compose up -d

Original Glance features

Everything from upstream is intact:

  • Widgets: RSS, Reddit, Hacker News, weather, YouTube, Twitch, markets, Docker containers, server stats, bookmarks, calendar, monitors, and many more
  • Fast and lightweight: low memory, minimal JS, single ~20 MB binary, pages load in ~1s
  • Highly customizable: multiple layouts, pages, themes, custom CSS
  • Mobile optimized
  • Themeable: tweak a few numbers or pick from the theme gallery

Full configuration reference: docs/configuration.md


Building from source

# Run locally
go run .

# Build binary
go build -o glance .

# Build and push Docker image
docker build -t ghcr.io/uhlwoogi/modern-glance:latest .
docker push ghcr.io/uhlwoogi/modern-glance:latest

Requires Go ≥ 1.23.