Skip to content

Repository files navigation

OpenWorktimeTracker app icon

OpenWorktimeTracker

Your workday, at a glance. Not another thing to manage.
Automatic time tracking for your Mac. Native, local-first, and quietly out of your way.

Download the latest release Requires macOS 14 or later View the build workflow GPL-3.0 license

Download for macOS   ·   Documentation   ·   What's new   ·   Feedback & ideas

OpenWorktimeTracker in dark and light mode: net work time, daily goal, start time, pauses, estimated finish, and recent workdays

Real app views, rendered with sample workdays. Screenshots show the current main branch; the latest release may look different.
Full-size screenshots: Dark mode · Light mode

Less clock-watching. More living.

You opened your Mac, answered a few messages, joined a meeting, and took a coffee break. But when did you actually start? And how much have you worked?

OpenWorktimeTracker keeps the answer in your menu bar. It tracks your day automatically, accounts for pauses, and lets you know when you've reached your limits. No account to create. No browser tab to keep open. No Dock icon competing for attention.

Made for your day What you get
Start working, not a stopwatch Launch at login and automatic workday detection across sleep, wake, and restarts.
Know when you're done Net work time, progress toward your daily goal, and an estimated finish time in one compact dashboard.
Meetings count, too After inactivity, choose whether the time was work or a pause. No guessing on your behalf.
Keep an eye on overtime Configurable orange/red menu-bar thresholds, notifications, recent workdays, and week/month summaries.
Make it yours Adjust times, add daily notes, customize thresholds, and switch naturally between light and dark mode.
Keep your data yours Local JSON logs, CSV export, a configurable storage folder, and optional iCloud Drive sync.

Also included: desktop widgets, pause/resume shortcuts, English and German, and Sparkle auto-updates.

A small app that understands a workday

Away from the keyboard doesn't always mean away from work

A call, a whiteboard session, or a coffee break can all look like inactivity to a computer. When you return, you decide how that time should count.

Inactivity prompt after 25 minutes, with choices to count the time as work, record a pause, or adjust the end of the workday

Your thresholds. Your pace.

Choose when the menu-bar timer changes color, how long inactivity takes to trigger a prompt, and when notifications should nudge you. Color thresholds and notification thresholds are independent.

General settings showing editable orange and red thresholds, automatic break durations, idle detection, and launch at login

Break-aware by default. The default calculation follows the 30/45-minute break thresholds in Germany's §4 ArbZG: more than 6 hours of work requires 30 minutes, more than 9 requires 45. Pauses you've already recorded reduce any additional automatic deduction.

Automatic deductions are bookkeeping, not a substitute for actually taking a break or a guarantee of legal compliance. How break calculations work →

Get started in a minute

Requires macOS 14 Sonoma or later.

  1. Download the latest release and open its .dmg.
  2. Drag OpenWorktimeTracker to Applications and launch it.
  3. Look in your menu bar, not the Dock. Click the timer to see your day.
  4. Allow notifications if you'd like reminders, and adjust your preferences under … → Settings.

That's it. With Launch at Login enabled, it's ready the next time you sign in. Future releases arrive through the built-in Sparkle updater.

Your everyday controls

Want to… Do this
Take a break Click Pause; click Resume when you're back.
Finish for today Click End Day. Your completed total stays fixed.
Correct a time Use the pencil beside the start/end time, or open … → Edit Log.
Take your data with you Choose … → Export CSV or open your log folder.
Open preferences Choose … → Settings, or press ⌘ , while the app is active.

Global shortcuts: Ctrl + Option + P to pause/resume, Ctrl + Option + E to end the day. macOS may require Accessibility permission for global keyboard monitoring.

Local first. Open by design.

Your daily logs are ordinary JSON files, not records locked inside a proprietary service. By default, they're stored here:

~/Library/Application Support/OpenWorktimeTracker/logs/
├── 2026-09-07.json
└── 2026-09-08.json
  • No account or hosted tracking backend is required.
  • CSV export makes it easy to use your hours elsewhere.
  • iCloud Drive sync is optional and off by default.
  • You can inspect, back up, or move your logs using normal files and folders.

Auto-update checks use Sparkle/GitHub; enabling iCloud sync uses Apple's iCloud Drive. Local-first doesn't mean the app never connects to the network.

Native all the way down

Built with SwiftUI + AppKit, not a web app inside a desktop window. An AppKit lifecycle owns the native menu-bar item and popover; SwiftUI renders the dashboard and settings. The tracking model uses @Observable, and persistence stays intentionally simple.

Part Built with
Interface SwiftUI, AppKit, adaptive design tokens
Workday logic Swift models, explicit state transitions, injectable clock and log store
macOS integration Login items, idle detection, notifications, WidgetKit
Storage & updates Daily JSON files, optional iCloud Drive, Sparkle 2
Development XcodeGen, XCTest, SwiftLint, GitHub Actions

Curious about the internals? Start with the architecture docs and the domain vocabulary.

Build it yourself

You'll need macOS, Xcode 16 or later, and XcodeGen. SwiftLint is used for linting.

brew install xcodegen swiftlint
git clone https://github.com/64x-lunicorn/OpenWorktimeTracker.git
cd OpenWorktimeTracker
make generate
open OpenWorktimeTracker.xcodeproj

Select your signing team in Xcode before running the app. For a local ad-hoc build without a provisioning profile, use the included Build OpenWorktimeTracker (Debug) task in VS Code. Release signing is kept separate.

make test    # Run the XCTest suite with your signing setup
make lint    # Check Swift style
make build   # Build the Release configuration with your signing setup

More details: Contributing · Build guide

Help make workdays a little better

Found a rough edge? Have an idea that would make this fit your day? Open an issue — bug reports, UI feedback, and small improvements are welcome.

Want to contribute code? See the contribution guide. If the app is useful to you, a GitHub star helps other Mac users discover it.


Less admin. A clearer workday.
Free and open source under GPL-3.0.

About

Automatic work-time tracking for macOS, living in your menu bar. Native SwiftUI, local-first storage, daily goals, pause detection, overtime thresholds and CSV export.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages