Built for the distracted, the hyper-focused, and anyone who looks up and realizes hours just vanished. When you're deep in work — or deep in a rabbit hole — time stops feeling like it's passing. Glint fixes that.
It floats above every window and every Space (like Picture-in-Picture), ticks like a real mechanical clock, and flashes in bold color the moment a minute or hour changes — so time keeps gently tapping you on the shoulder, even when you've forgotten to look.
Some of us have no felt sense of time. You sit down to work, blink, and three hours are gone — meetings missed, breaks skipped, the day eaten. A normal clock doesn't help: it just sits there, easy to ignore. You have to remember to look, and remembering is exactly the thing you can't do when you're absorbed.
Glint is ambient time-awareness. Instead of waiting to be checked, it reaches out to you:
- A warm amber → red wash builds up over the final 10 seconds of a minute (a calm peripheral-vision warning that a change is coming).
- A teal burst flashes the whole card when the minute rolls over.
- A bigger orange → magenta burst + a double chime marks every hour — a clear, unmissable "an hour just passed."
You don't have to look. Glint makes you feel time moving — so you stay in control of your day instead of losing it.
And inspired by Time Timer's research — which finds that a visual, number-free depiction of remaining time improves self-regulation and lowers anxiety — Glint can show time as a shrinking ring or disk you simply watch empty, no digits to decode.
- 🪟 Always on top, every Space — borderless floating panel, rides over full-screen apps too (PiP-style).
- 🕐 Big, glanceable face —
H:MMlarge up top,SS+AM/PMbelow, monospaced so it never jitters. - 🔔 Real tick-tock — alternating tick (high) and tock (low) every second, plus chimes on the minute and hour. All sound is synthesized in code — no audio files bundled.
- 🎨 Attention palette — high-contrast indigo base with cyan glow, escalating to red as a change approaches and a bold flash at the change.
- ⏰ Interval nudges — pick 15 / 25 / 30 / 60 min and Glint blinks + triple- chimes at each mark: a deliberate "time check / take a break" tap on the shoulder, the heart of staying aware of your day.
- 🎯 Focus blocks — start a 25 or 50 min Pomodoro; a live countdown shows on the face and Glint celebrates with a blink + chime when the block ends.
- ⏱️ Stopwatch — a manual count-up timer (start / pause / resume / reset) shown right on the clock face.
- ⏳ "Time sitting" — optional readout of how long you've been at it this session, with a one-click reset.
- 📞 Auto-mute in calls — silences ticking while your mic is in use, so it never leaks into a meeting (no mic permission needed — it only reads device state).
- ⏲️ Visual time depletion — a shrinking ring around the card or a Time Timer-style disk that empties over your focus block, nudge interval, or the hour. You see time run out instead of reading digits.
- 🔴 Dial Mode — the whole face becomes a Time Timer-style dial: white case, red disk depleting toward 0, a 0–55 minute ring, tick marks and a pointer hand. Pure, number-light, glanceable time.
- 🔢 Number-display modes — Full, Hide Seconds, or Hide All (pure visual, number-free — easiest to feel for time-blind users).
- 🧘 Calm Mode — swaps the alarm-style bursts for gentle depletion, to lower anxiety while still keeping you aware.
- 🎨 Color themes — Indigo, Midnight, Forest, Slate, Crimson.
- ⚙️ Preferences — 24-hour clock, three sizes, three flash intensities; all remembered between launches.
- 🚀 Launch at login — one toggle to have Glint always there.
- 🖐️ Drag anywhere — grab it and move it to any corner.
- 🔇 One-click mute & quit from the menu-bar item.
- 🪶 Tiny & native — pure Swift / AppKit / SwiftUI, no dependencies, no Dock
clutter (
LSUIElementagent app).
| Calm | Buildup (last 10 s) | Minute flash |
|---|---|---|
![]() |
![]() |
![]() |
| Ring depletion | Time sitting (Forest) | Number-free disk (Slate) |
![]() |
![]() |
![]() |
| State | When | Card | Sound |
|---|---|---|---|
| Calm | :00–:49 |
Deep indigo, white digits, cyan glow | tick / tock |
| Buildup | :50–:59 |
Amber→red wash fades in, glow reddens, border brightens | tick / tock |
| Minute | minute rolls over | Teal→cyan burst flash | single chime |
| Hour | hour rolls over | Orange→magenta burst flash (bigger, longer) | double chime |
| Nudge | your chosen interval | Violet→cyan blink (pulses several times) | triple chime |
- Download
Glint-<version>.dmgfrom the latest release. - Open it and drag Glint into Applications.
- First launch: right-click Glint → Open → Open. Glint isn't notarised yet, so macOS asks once. On macOS 15+, if there's no Open button: System Settings → Privacy & Security → Open Anyway.
Universal app: runs natively on Apple silicon and Intel Macs, macOS 13 Ventura or later.
git clone https://github.com/salahu01/glint-app.git
cd glint-app
# Run straight away (dev):
swift run
# …or build the universal app bundle and the DMG:
./tools/bundle.sh # -> build/Glint.app
./tools/make-dmg.sh # -> build/Glint-<version>.dmgRequires macOS 13+ and a Swift 5.9+ toolchain (Xcode 15+).
Glint launches into the top-right corner. Control it from the clock icon in the menu bar:
| Action | How |
|---|---|
| Move the clock | Drag it anywhere on screen |
| Set a time-check nudge | Menu → Nudge Me Every → 15 / 25 / 30 / 60 min |
| Start a focus block | Menu → Focus Block → Start 25 / 50 min (countdown on the face) |
| Stopwatch | Menu → Stopwatch → Start/Pause · Reset (count-up on the face) |
| Show / reset "time sitting" | Menu → Show Time Sitting · Reset Session Timer |
| 24-hour clock | Menu → 24-Hour Clock |
| Size / flash strength | Menu → Clock Size · Flash Intensity |
| Color theme | Menu → Color Theme → Indigo / Midnight / Forest / Slate / Crimson |
| Show visual depletion | Menu → Show Time Depletion |
| Depletion shape | Menu → Depletion Style → Ring / Disk |
| Hide numerals | Menu → Number Display → Full / Hide Seconds / Hide All |
| Calm (low-anxiety) mode | Menu → Calm Mode |
| Dial face | Menu → Dial Mode |
| Auto-mute during calls | Menu → Auto-Mute in Calls |
| Launch at login | Menu → Launch at Login |
| Mute / unmute ticking | Menu → Mute Ticking (⌘M) |
| Quit | Menu → Quit Glint (⌘Q) |
All preferences persist between launches.
- Always-on-top: a borderless, non-activating
NSPanelwithlevel = .floatingandcollectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary, .stationary]. - Tick accuracy: the loop reschedules itself to the next whole-second boundary each tick, so it fires exactly when the displayed second flips — no drift.
- Sound:
AVAudioEngineplays short PCM buffers synthesized at launch — a sine burst shaped by an exponential decay for the clicks, and a fundamental + harmonics ring for the chimes. - Flashes: SwiftUI color overlays animated on
minuteTick/hourTickcounters — no window resizing, so nothing clips.
See CONTRIBUTING.md for the source layout, build tools and dev tips.
- App icon
- Interval nudges (time-check every N minutes)
- "Time sitting" indicator + reset
- Auto-mute during meetings / calls
- Preferences: sizes, 24-hour mode, flash intensity (persisted)
- Launch-at-login toggle in the menu
- Pomodoro / focus blocks with a visual countdown
- Custom color themes
- Visual time depletion — ring / disk, number-free modes, Calm Mode (Time Timer-inspired)
- Notarization tooling (
notarize.sh) - DMG installer, universal build, release workflow
- Developer ID signing + notarisation (needs a paid Apple Developer account; tooling is ready:
SIGN_ID="Developer ID Application: …" ./notarize.sh)
MIT © Swalahu · Contributing · Security · Code of conduct







