Skip to content

Repository files navigation

UTCMenuBar

A lightweight macOS menu bar app that shows UTC time, designed to be visually distinct from your system clock so you never confuse the two.

🌐 14:30:25 UTC

Status: 1.0. Shipped: display options, visual distinction, English + δΈ­ζ–‡ UI (switchable at runtime), bidirectional timezone converter, Liquid-Glass popover, in-app launch-at-login, and an About/version panel.


Why this exists

If you work across timezones β€” on-call rotations, distributed teams, aviation / shipping logs, log files in UTC, AWS console regions, etc. β€” you usually want both your local time and UTC visible at a glance.

The standard approaches all have issues:

  • macOS lets you switch the system clock to UTC, but then you lose local time.
  • Adding a second clock via iStat Menus costs money and brings a lot of features you may not need; full multi-timezone planners like Clocker or There work great but optimize for tracking people across cities, not for one clean UTC display.
  • Most free menu-bar UTC clocks render UTC in the same font, weight, and color as the system clock right next to them, which defeats the point β€” you have to read the digits to tell them apart.

UTCMenuBar's whole pitch: show UTC, and let you make it look obviously different from the system clock with a few clicks. No account, no subscription, no telemetry, ~5 MB binary.


Features

  • UTC time in the menu bar, prefixed with 🌐 and suffixed with UTC
  • Display options (toggleable from the dropdown):
    • Show date alongside time
    • Compact time (HH:mm instead of HH:mm:ss)
    • Compact date (MM/dd instead of yyyy-MM-dd)
  • Visual distinction options (Appearance submenu and Settings window):
    • Font family β€” System / Menlo / SF Mono, plus any installed font via the macOS font panel
    • Weight β€” Regular / Medium / Semibold / Bold
    • Size β€” Small / Standard / Large (Β±2pt around the menu bar default)
    • Color β€” Default / Blue / Green / Orange / Purple / Red (system dynamic colors, dark-mode safe)
    • Icon prefix β€” Globe 🌐 / Clock πŸ• / Compass 🧭 / Earth 🌍 / none (5 options)
    • Decorator β€” none / [brackets] / (parentheses) / β”‚barsβ”‚
  • Liquid-Glass popover β€” left-click the menu bar icon to open a popover (ultraThinMaterial) with a large live UTC readout and quick buttons for Settings, the Converter, and Quit. Right-click still shows the classic menu.
  • Bidirectional timezone converter (⌘T) β€” type a UTC time and see the equivalent in selected zones, or type a local time and read back UTC.
  • Localized UI β€” English and Simplified Chinese, switchable at runtime from the Appearance β–Έ Language submenu or the Settings window; defaults to your system language on first launch.
  • Launch at login β€” toggle inside Settings (backed by SMAppService); no manual System Settings drag required.
  • Settings window with live preview, opens with ⌘,
  • About / version panel β€” shows the version baked in from the release tag
  • Persists all settings to UserDefaults; survives restarts
  • Multi-display aware β€” the popover clamps its position to the active screen's visible frame (menu-bar/notch safe)
  • Dock-less (LSUIElement); pure menu bar accessory app
  • Free, open source, no account, no telemetry, no network requests

Screenshots

Screenshots are being added β€” see Releases for the app in the meantime.


Install

Requirements: macOS 13+, Apple Silicon. (Intel Macs: build from source β€” see below.)

Option A β€” Download a release (recommended)

  1. Grab the latest UTCMenuBar-vX.Y.Z-arm64.zip from Releases.

  2. Unzip it and move UTCMenuBar.app to /Applications.

  3. First launch β€” important: the build is not signed or notarized (this is a free hobby project without a paid Apple Developer account), so macOS Gatekeeper will block a plain double-click with a message like β€œUTCMenuBar can’t be opened because Apple cannot check it for malicious software.” This is expected. To open it the first time:

    • Right-click (or Control-click) UTCMenuBar.app β†’ Open β†’ click Open in the dialog. macOS remembers your choice, so every launch after that is a normal double-click.
    • If you don’t see an Open button, go to System Settings β†’ Privacy & Security, scroll to the message about UTCMenuBar, and click Open Anyway.

    Prefer not to bypass Gatekeeper? Build from source instead (Option B) β€” a build you compiled yourself runs without any prompt.

  4. (Optional) Verify the download against the SHA-256 printed in the release notes:

    shasum -a 256 UTCMenuBar-vX.Y.Z-arm64.zip

To start it automatically at login: open Settings (⌘,) and toggle Launch at login β€” the app registers itself via SMAppService, no manual drag into System Settings required.

Option B β€” Build from source

No Gatekeeper prompt, and works on Intel too. Requirements: macOS 13+, the Swift 6 toolchain (Xcode 15+).

git clone https://github.com/NestDream/UTCMenuBar.git
cd UTCMenuBar
./scripts/build-app.sh          # produces UTCMenuBar.app in the repo root
cp -R UTCMenuBar.app /Applications/
open /Applications/UTCMenuBar.app

Run as an SPM executable (for development)

swift run UTCMenuBar

This works, but the menu bar icon only stays visible while the process is running β€” it is not daemonized. Use the .app bundle for daily driving.


Usage

Left-click the 🌐 icon to open the Liquid-Glass popover β€” a large live UTC readout with quick buttons for Settings, the Converter, and Quit.

Right-click the icon for the classic dropdown menu:

  • Toggle Show date / Compact time / Compact date
  • Open the Appearance submenu to pick font / weight / size / color / icon / decorator (pick Custom… under font to choose any installed font)
  • Pick a Language (English / δΈ­ζ–‡) β€” same submenu, switches instantly
  • Open the Timezone converter (⌘T) to convert UTC ↔ other zones
  • Open Settings… (⌘,) for the same controls in a window with live preview, plus the Launch at login toggle
  • Quit (⌘Q) to exit

UI is available in English and Simplified Chinese. The app picks one based on your system language on first launch and you can switch any time.


Build & test

swift build                   # debug build
swift run UTCMenuBar          # run from CLI
./scripts/test.sh             # run the full test suite
./scripts/build-app.sh        # build release UTCMenuBar.app
./scripts/build-app.sh debug  # build debug UTCMenuBar.app

The test suite is a custom runner (no XCTest / swift-testing) β€” see Tests/UTCMenuBarTests/. Property tests run 100 randomized iterations per case.


Architecture

Package.swift                  # SPM manifest, single source of truth
Sources/
  main.swift                   # AppDelegate + NSApp entry point
  SettingsWindowController.swift
  StyleOptionsStore.swift      # observable single source of truth for StyleOptions
  UTCMenuBarLib/               # testable, Sendable-clean library
    DisplayOptions.swift       # show date / compact time / compact date
    StyleOptions.swift         # font / weight / size / color / decorator enums
    TimeFormatter.swift        # Date + DisplayOptions -> "🌐 14:30:25 UTC"
    StyledTextBuilder.swift    # plain text + StyleOptions -> NSAttributedString
    MenuBuilder.swift          # builds the NSMenu from current options
    SettingsViewModel.swift    # backing model for the Settings window
Tests/UTCMenuBarTests/         # custom runner; one file per module
specs/
  display-options/             # requirements.md / design.md / tasks.md
  visual-distinction/          # requirements.md / design.md / tasks.md
scripts/
  build-app.sh                 # assembles UTCMenuBar.app
  test.sh                      # runs the test executable

Three small modules in UTCMenuBarLib:

  • DisplayOptions β€” toggleable display flags + UserDefaults round-trip.
  • TimeFormatter β€” pure function: (Date, DisplayOptions) -> String, always wrapping in 🌐 … UTC.
  • StyleOptions + StyledTextBuilder β€” visual styling enums and the NSAttributedString builder applied to the status item's attributedTitle.
  • MenuBuilder β€” stateless builder that re-emits the whole NSMenu on every change (cheap; small menu).

The AppDelegate in main.swift wires those together with a 1 s Timer, the NSStatusItem, and the StyleOptionsStore listener.

For deeper docs, see the per-feature spec directories (specs/<feature>/) and CLAUDE.md. Specs follow a requirements / design / tasks split, written in Chinese and using EARS-style (WHEN / IF / THE) acceptance criteria.


How UTCMenuBar compares to other Mac timezone apps

Most pages like this overclaim. Below is a feature-by-feature comparison against the Mac menu-bar timezone tools that actually exist on GitHub or in the wild as of May 2026, with star counts and last-commit dates so you can sanity-check the landscape yourself.

UTCMenuBar is deliberately narrow: show UTC, make it visually distinct. It is not a meeting planner, world-clock dashboard, or people tracker. For those, the right answer is one of the other tools below.

What's actually out there (May 2026)

A search for macos menu bar UTC clock, macos status bar timezone swift, and topic:menubar timezone on GitHub plus the well-known paid players turns up roughly four useful clusters of tools:

  1. UTC-only OSS clocks. netik/UTCMenuClock, jonblatho/SwiftUTCMenuClock, tra0x/ZuluBar, and this project.
  2. Multi-timezone OSS clocks / planners. n0shake/Clocker, dena-sohrabi/There, kartik-venugopal/world-clock, patrik-bernas/whenish, shivanshthapliyal/meridian.
  3. Closed-source paid suites. iStat Menus (system monitoring + clocks); App Store options like Menu World Time and World Clock Pro (closed source, paid, not benchmarked here because public feature pages don't disclose enough to compare fairly).
  4. The "people, not timezones" niche. There β€” a distributed-team tracker that the open-source dena-sohrabi/There repo mirrors.

Activity / popularity reality check

Project Stars Last push License Notes
n0shake/Clocker 608 2026-05-13 MIT Most-starred OSS option; full meeting planner
dena-sohrabi/There 272 2024-09-18 MIT Free; closely tied to there.pm
netik/UTCMenuClock 252 2025-12-12 Apache-2.0 The OG; macOS 15+; Objective-C
amiantos/dotbeat 40 2024-06-16 MPL-2.0 Swatch Internet Time, not regular zones
kartik-venugopal/world-clock 21 2024-01-10 MIT macOS 10.12+; minimal
jonblatho/SwiftUTCMenuClock 13 2021-10-26 MIT Effectively abandoned (no commits in 4+ years)
tra0x/ZuluBar 0 2026-05-10 MIT New; signed build is $5, source build free
patrik-bernas/whenish 0 2026-05-09 MIT New; multi-zone with availability bars
shivanshthapliyal/meridian 2 2026-04-01 MIT New; macOS 26.0 (Tahoe) only
NestDream/UTCMenuBar (this) n/a active MIT (planned) UTC-only, focuses on visual distinction

Takeaway: most OSS UTC-specific tools are either dead (SwiftUTCMenuClock) or pre-1.0 (ZuluBar, this project). The OG netik/UTCMenuClock is alive again as of late 2025 but requires macOS 15+ and is Objective-C only. The well-maintained options are multi-timezone planners (Clocker, There, Whenish), not bare UTC clocks.

Feature comparison

The columns below are: UTCMenuBar (this app), netik/UTCMenuClock (the OG OSS UTC clock), ZuluBar (recent OSS UTC clock), Clocker (most-starred OSS multi-timezone), There (people tracker, OSS + paid web companion), iStat Menus (commercial system suite). Cells: βœ“ = supported, βœ— = not supported, ◐ = partial, ? = not documented on the public page.

Dimension UTCMenuBar UTCMenuClock ZuluBar Clocker There iStat Menus
License / cost MIT, free Apache-2.0, free MIT (free source / $5 signed build) MIT, free MIT, free Closed source, paid 1
Last commit (2026-05) active 2025-12 2026-05 2026-05 2024-09 continuous
macOS minimum 13 15 14 14 13 varies (current 6.x)
Open-source βœ“ βœ“ βœ“ βœ“ βœ“ βœ—
No account / no telemetry βœ“ βœ“ βœ“ βœ“ βœ“ ?
Time display
Shows UTC in menu bar βœ“ βœ“ βœ“ βœ“ 2 ◐ 3 βœ“
Multiple timezones in menu bar βœ— βœ— βœ— βœ“ βœ“ βœ“
Per-timezone labels / avatars βœ— βœ— βœ— βœ“ (custom labels) βœ“ (photos/handles) βœ“ (custom labels)
24h / 12h toggle βœ— 4 βœ“ ? βœ“ βœ“ βœ“
Show seconds toggle βœ“ βœ“ βœ“ βœ“ ? βœ“
Date display βœ“ βœ“ βœ“ ? ? βœ“
Compact time / date format βœ“ βœ— ◐ (seconds only) ◐ (compact menubar mode) ? βœ“
ISO-8601 / RFC 3339 menubar βœ— βœ“ βœ— ? βœ— ?
Custom format string βœ— βœ— βœ— βœ— βœ— βœ“
Visual distinction
Custom font family βœ“ (System / Menlo / SF Mono + any installed font) βœ— βœ— βœ— βœ— ?
Custom font weight βœ“ βœ— βœ— βœ— βœ— ?
Custom font size βœ“ (Β±2pt) βœ— βœ— βœ— βœ— ?
Custom color βœ“ (6 system-dynamic colors) βœ— βœ— βœ“ (4 themes, popover only) βœ— ?
Decorator / brackets / bars βœ“ (4 styles) βœ— ◐ (Z / UTC suffix) βœ— βœ— βœ—
Custom emoji prefix βœ“ (5 options) βœ— βœ— βœ— βœ— βœ—
Interactions
Click-to-copy current time βœ— 4 βœ“ (current format + ISO-8601) βœ“ (display / Unix / RFC 3339) ? βœ— ?
Bidirectional timezone converter βœ“ βœ— βœ— ◐ (time scrubber) βœ— ?
Time-travel slider / scrubber βœ— βœ— βœ— βœ“ (Β±7 days, 15-min steps) βœ— βœ—
Global hotkey βœ— βœ— βœ“ βœ“ (⌘L) ? ?
Settings window with live preview βœ“ βœ— βœ— βœ“ βœ“ βœ“
Integrations
Launch at login (in-app) βœ“ βœ“ ? βœ“ ? βœ“
Calendar / meeting integration βœ— βœ— βœ— βœ“ (Apple Calendar, one-click join Zoom/Meet/Teams) βœ— βœ“
Sun / moon data βœ— βœ— βœ— ◐ (day/night) βœ— βœ“
Weather data βœ— βœ— βœ— βœ— βœ— βœ“
iCloud sync βœ— βœ— βœ— βœ“ βœ— ?
Multi-display awareness βœ— 5 βœ— 5 βœ— 5 βœ— 5 βœ— 5 βœ— 5
Localization (UI) βœ“ (English + δΈ­ζ–‡) βœ— (English) βœ— (English) βœ“ (Crowdin community) βœ— (English) βœ“
Distribution (.app available) unsigned binary on GitHub + source unsigned binary on GitHub source build free / signed $5 Homebrew cask + GitHub release Homebrew cask + there.pm direct buy + Setapp

1 iStat Menus' single-license price is no longer published on the vendor's public page (shows as $? placeholder); historically it has been in the ~US$10–15 range. It is also bundled in Setapp at $9.99/month. 2 Clocker can pin any timezone to the menu bar, including UTC, but it's a multi-timezone tool first. 3 There supports raw UTC offsets per person, but its primary unit is "a person in a city," not "UTC." 4 On the Roadmap for UTCMenuBar. 5 No menu-bar app on macOS gets per-display menu bars; this is a macOS limitation, not a per-app one.

Sources verified May 2026: GitHub repo metadata (stars, last push, license) via the GitHub API; READMEs of Clocker, There, UTCMenuClock, ZuluBar, SwiftUTCMenuClock, world-clock, whenish, meridian; vendor pages there.pm, iStat Menus, abhishekbanthia.com/clocker. A ? means the public docs don't say either way β€” not a guess.

Pick the right tool

This list isn't trying to win every row. Pick the one that matches your job:

  • Pick UTCMenuBar if you only need UTC, you want it to look unambiguously different from the system clock right next to it, you want a Swift / AppKit OSS app you can audit, no account / payment / telemetry, and you'd use the built-in UTC ↔ zone converter. Best for: SREs / on-call / aviation / log triage / AWS console work.

  • Pick netik/UTCMenuClock if you want a long-established OSS UTC clock with built-in launch-at-login and click-to-copy in ISO-8601, and you're already on macOS 15+. It's the most-starred UTC-only OSS option (252 stars, active again in late 2025); Objective-C, no visual styling, but solid.

  • Pick tra0x/ZuluBar if click-to-copy in multiple formats (display, Unix epoch, RFC 3339) and a global hotkey are your top priorities, and you don't need visual styling. Pay $5 for the signed build or build from source. Brand-new project, low star count β€” buyer beware on stability.

  • Pick n0shake/Clocker if you need a real meeting planner β€” multiple timezones, calendar integration, time scrubbing, one-click Zoom/Meet/Teams join, iCloud sync. It's the most capable OSS option and it's free. Worth trying first if you're not sure you specifically need UTC.

  • Pick There (there.pm or the GitHub project) if you manage a distributed team and want to see people (with photos and Twitter/Telegram handles) rather than timezones. Free. Shines in 1:1 lead / IC contexts.

  • Pick patrik-bernas/whenish if you want a free OSS multi-timezone view with per-city availability bars and overlap visualization, and don't care about UTC specifically.

  • Pick iStat Menus if you already want CPU / RAM / network / battery / weather widgets in the menu bar β€” its world clock is a small bonus. Don't buy it just for the clock.

Honest limitations of UTCMenuBar

Things competitors do better, today:

  • Single timezone (UTC) in the menu bar. If you need UTC and PT both pinned in the menu bar at once, UTCMenuBar can't do it today. Clocker, There, Whenish, world-clock, and Meridian all can. (The shipped converter handles ad-hoc UTC ↔ zone math, but that's a different shape from "multi-timezone in the menu bar.")
  • No click-to-copy yet. ZuluBar and UTCMenuClock both ship this; it's on the roadmap here.
  • No 24h/12h toggle. Currently 24h-only. (Planned.)
  • No calendar / meeting integration. Clocker is the gold standard here; this app explicitly does not try to compete.
  • No Mac App Store build, and release binaries are unsigned / not notarized. Prebuilt .app zips are on GitHub Releases, but because they aren't signed you need a one-time right-click β†’ Open (see Install), or build from source to avoid the prompt.
  • Just reached 1.0 β€” young project, modest star count, not yet battle-tested. Bug reports welcome.

Roadmap

Concrete next steps, roughly in priority order:

  • 24h / 12h toggle. Currently 24h-only.
  • Click-to-copy the current UTC timestamp in multiple formats (Unix epoch, ISO 8601 / RFC 3339).
  • ISO-8601 / custom format string for the menu bar readout.
  • Free-text prefix / suffix + full emoji picker. Beyond the five built-in icons, let users supply any string or emoji (e.g. Z, Zulu).
  • Global hotkey to open the popover, Settings, or the converter.
  • Mac App Store distribution.
  • Signed / notarized release builds + GitHub Releases artifacts.

Lower priority:

  • Multiple-timezone menu bar display (would expand scope significantly β€” may stay out of scope on purpose).
  • More decorators / more colors / per-glyph styling.

Contributing

Contributions are welcome. The project follows a spec-driven workflow:

  1. Open an issue to discuss the feature first.
  2. Add specs/<feature>/{requirements,design,tasks}.md mirroring the existing two specs (Chinese is fine; English also fine β€” match the existing style if you're extending an existing spec).
  3. Implement against tasks.md, ticking boxes as you go.
  4. Add a corresponding test file under Tests/UTCMenuBarTests/ and register it in TestRunner.swift. Each correctness property in design.md should have a matching test.
  5. Run ./scripts/test.sh and ./scripts/build-app.sh before sending a PR.

Conventions worth knowing:

  • No external dependencies. AppKit + Foundation only.
  • Library code in UTCMenuBarLib must be public and Sendable-clean.
  • UserDefaults keys use a feature-prefix (displayOptions.*, styleOptions.*).
  • Don't edit anything under _archive/ β€” that's a frozen Xcode project.

See CLAUDE.md for the full set of conventions.


License

Licensed under MIT.

About

A macOS menu bar UTC clock that's hard to confuse with the system clock

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages