Custom status bar for macOS. Replaces the boring default bar with something actually nice to look at.
Widgets-compressed.mp4
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.
- 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-colorcan 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.
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.
- 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
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.
Pick one line in your config and the whole bar changes:
![]() Liquid Glass |
![]() Frosted |
![]() Tokyo Night |
![]() Dracula |
![]() Nord |
![]() Catppuccin |
![]() Gruvbox |
![]() Solarized |
![]() Neon |
![]() Flat Dark |
![]() Minimal |
No need to edit files if you don't want to. The Settings GUI covers presets, appearance tuning, widget order, and more.
![]() |
![]() |
Settings.functionality.mov
Change.Settings.mov
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.
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"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.
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.
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 = trueliquid-glass, frosted, flat-dark, minimal, neon, tokyo-night, dracula, gruvbox, nord, catppuccin, solarized
Uses ICU patterns: E d MMM, H:mm gives you Thu 6 Mar, 17:14. See ICU Date Format Patterns for all options.
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"
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.
- macOS 14.6 (Sonoma) or later
- Apple Silicon or Intel Mac
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.












