Skip to content
Β 
Β 

Latest commit

Β 

History

25 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Glance icon

Glance

Custom status bar for macOS. Replaces the boring default bar with something actually nice to look at.

macOS 14.6+ Swift 5 MIT License


Glance with Liquid Glass preset

Widgets-compressed.mp4

About this fork

This is ayamdobhal/glance, an independently maintained fork of azixxxxx/glance. The original project provides Glance’s native macOS bar, presets, widgets and settings. This fork builds on that work with an extensible SwiftUI widget API and improvements for everyday use with yabai.

Changes in this fork

  • Native SwiftUI widget bundles: versioned SDK, bundle discovery, lifecycle callbacks, interactive bar views and popups, build tooling and a Counter example. Widgets ship separately without rebuilding the app. See the SDK guide.
  • Claude/Codex usage: available as a separate glance-ai-usage widget, with token activity, usage limits and reset times. Provider code stays outside Glance.
  • Multiple displays: a bar on every display, yabai spaces filtered to their display, popup placement, display connection handling and display-aware window spacing.
  • Spaces: empty spaces remain visible, floating app windows are included, utility panels are excluded, and each display’s visible space is highlighted.
  • Battery fixes: health uses the system-reported maximum capacity; the battery charge graphic fills correctly at 100%.
  • System accents: built-in accents follow macOS, including popup icons and media/volume sliders. accent-color can override the system color independently of border and glow colors.
  • Network rates: optional compact upload/download readings before the network icon.
  • Bar ergonomics: tighter native widget spacing and no Command-Q shortcut; explicit Quit remains available.

Our dotfiles setup provides the transparent bar theme, widget order and Nix-managed startup/yabai spacing. These are configuration choices rather than required defaults.

What is this

Glance is a status bar replacement for macOS. It sits at the top of your screen and shows you the stuff you actually care about: workspaces, current track, volume, Wi-Fi, battery, time. Everything is configurable through a simple TOML file or a Settings GUI.

Built with native Swift and SwiftUI. No Electron, no web views, no bloat.

Features

  • Liquid Glass UI with blur, gradient borders, glow, and shadows
  • 11 built-in presets so you can match your setup
  • 16 widgets β€” spaces, now playing, weather, battery, volume, brightness, bluetooth, clipboard, pomodoro, and more
  • Native macOS Spaces out of the box (yabai and AeroSpace also supported)
  • Rich popups for every widget: calendar with events, network speed, battery health, now playing with progress bar
  • 4 bar formations: full, floating, islands, pills
  • Custom script widgets β€” run any shell command and display its output in the bar
  • Auto-updates via Sparkle
  • TOML config with live reload. Edit, save, see changes instantly
  • Settings GUI if you don't want to touch config files
  • Global hotkey (Ctrl+Option+B) to toggle bar visibility
  • Fullscreen auto-hide β€” bar fades when apps go fullscreen
  • Window gap management so maximized windows don't hide behind the bar
  • Launch at Login via native macOS login items

Widgets

Custom SwiftUI widgets can be built as separate bundles and enabled without rebuilding Glance. See the native widget SDK guide and the Counter example for interactive bar views and popups.

Widget What it shows
Spaces Your workspaces with app icons. Click to switch. 5 display modes, 4 highlight styles
Active App Name of the frontmost app
Now Playing Current track, album art, progress bar, controls (Music & Spotify)
Volume Speaker icon, scroll to adjust. Popup: slider + output device
Brightness Display brightness, scroll to adjust
Network Wi-Fi/Ethernet status. Optional bar upload/download rates: show-speed = true under [widgets.default.network]. Popup: signal, speed, IP, Tx Rate
Battery Charge level. Popup: health %, cycles, temperature
Bluetooth Connected devices with battery levels (AirPods, keyboards, mice)
Time Customizable date/time. Popup: calendar grid + upcoming events
Weather Temperature + condition. Popup: humidity, wind, feels like, 5-day forecast
System Monitor CPU % + RAM usage. Popup: usage bars, memory pressure
Disk Storage usage with free/total display
Input Language Current keyboard layout, zero-polling
Clipboard Clipboard history (20 entries), click to paste
Pomodoro Focus timer with work/break cycles and notifications
Script Run any shell command on an interval. Display output as text

Plus spacer and divider for layout.

Presets

Pick one line in your config and the whole bar changes:

Liquid Glass
Liquid Glass
Frosted
Frosted
Tokyo Night
Tokyo Night
Dracula
Dracula
Nord
Nord
Catppuccin
Catppuccin
Gruvbox
Gruvbox
Solarized
Solarized
Neon
Neon
Flat Dark
Flat Dark
Minimal
Minimal

Settings

No need to edit files if you don't want to. The Settings GUI covers presets, appearance tuning, widget order, and more.

General Settings Widgets Settings

Settings in action

Settings.functionality.mov

Switching presets

Change.Settings.mov

Installation

Build this fork from source to get the changes above. The original project's Homebrew tap and release downloads distribute upstream Glance. For local fork builds, disable upstream automatic updates in Settings to keep Sparkle from replacing the app with an upstream release.

Build from source

Requires Xcode 16+ and macOS 14.6+.

git clone https://github.com/ayamdobhal/glance.git
cd glance

xcodebuild -project Glance.xcodeproj -scheme Glance -configuration Release \
  -derivedDataPath build build \
  CODE_SIGN_IDENTITY=- CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO

# Sign a separate copy so incremental Xcode builds remain intact.
glance_install_dir=$(mktemp -d)
ditto build/Build/Products/Release/Glance.app "$glance_install_dir/Glance.app"
codesign --force --deep --sign - "$glance_install_dir/Glance.app"
open "$glance_install_dir/Glance.app"

Popup spacing and accent color

Both settings reload live from your config:

[appearance]
popup-gap = 0             # Default: 0 points; use 16 for a gap
accent-color = "system"   # Default: macOS accent, or a hex color like "#76cce0"

Negative popup gaps are clamped to zero. The accent is separate from neon-color, which controls borders and glow.

Multiple displays

Glance creates a bar on every connected display. With yabai, each bar shows only that display's spaces, including empty spaces and floating app windows. Popups follow the originating display, and display connect/disconnect events update the bars. Native widgets receive one instance per display.

Display mapping/geometry checks are available with sh scripts/test-displays.sh.

Configuration

Config loads from ~/.glance-config.toml first, then ~/.config/glance/config.toml. Changes reload automatically. See the dotfiles example.

theme = "dark"

# Switch preset and the whole look changes
preset = "liquid-glass"

# Or tweak individual values
# [appearance]
# popup-gap = 0          # Points below the bar; 0 attaches popups to the bar
# roundness = 50          # 0 = square, 50 = capsule
# border-width = 1.0
# fill-opacity = 0.04
# foreground-color = "#ffffff"
# accent-color = "system" # Default: macOS accent; also accepts "#rrggbb"

[widgets]
displayed = [
    "default.spaces",
    "divider",
    "default.activeapp",
    "default.nowplaying",
    "spacer",
    "default.weather",
    "default.systemmonitor",
    "default.disk",
    "default.volume",
    "default.network",
    "default.inputlanguage",
    "default.brightness",
    "default.clipboard",
    "default.bluetooth",
    "divider",
    "default.time",
]

# Custom script widget β€” run any command, show output in bar
# [widgets.script.vpn]
# command = "scutil --ncs | grep -q Connected && echo '🟒 VPN' || echo 'πŸ”΄ VPN'"
# interval = 10

[widgets.default.time]
format = "E d MMM, H:mm"
calendar.format = "H:mm"
calendar.show-events = true

[widgets.default.battery]
show-percentage = true

[widgets.default.spaces]
space.show-key = true
window.show-title = true

Available presets

liquid-glass, frosted, flat-dark, minimal, neon, tokyo-night, dracula, gruvbox, nord, catppuccin, solarized

Date format

Uses ICU patterns: E d MMM, H:mm gives you Thu 6 Mar, 17:14. See ICU Date Format Patterns for all options.

Window managers

Works with native macOS Spaces by default. Also supports:

  • yabai via yabai.path = "/opt/homebrew/bin/yabai"
  • AeroSpace via aerospace.path = "/opt/homebrew/bin/aerospace"

Permissions

Glance asks for a few permissions on first launch:

Permission Why
Accessibility So maximized windows leave a gap for the bar instead of hiding behind it
Automation (Apple Events) To control Music and Spotify for the Now Playing widget
Calendar To show upcoming events in the calendar popup
Location To display Wi-Fi network name and local weather (falls back to IP geolocation if denied)

All permissions are optional. The app works without them, you just lose the specific features.

Requirements

  • macOS 14.6 (Sonoma) or later
  • Apple Silicon or Intel Mac

Credits

This fork builds on Glance by azixxxxx. The upstream Glance project started as a fork of Barik by Simon Butenko. Since then, it has diverged into a heavily updated project with native macOS Spaces support, a Settings GUI, expanded widgets, presets, Sparkle updates, live config reload, and ongoing improvements.

License

MIT

About

Modern macOS status bar replacement with liquid glass UI, 16 widgets, contextual profiles, and preset sharing. Native SwiftUI, no Electron.

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages