Timelog app icon

iOS & macOS

Track time.
Natively.

A lightweight time tracking app built with SwiftUI and SwiftData. Sync across devices via self hosted middleware on Vercel; zero cloud lock in, zero subscription.

iOS 17+ macOS 14+ Swift 5.10 SwiftData SwiftUI Open Source
View on GitHub Explore features
scroll
📱

iPhone & iPad

Timelog for iOS

Full featured mobile app with real time session tracking, Live Activity on your lock screen and Dynamic Island, and automatic sync at every launch.

  • Today view; log time manually or start live sessions, with a running daily total
  • Clients & Projects; color coded, archivable, swipe to edit
  • Timer; Stopwatch or Pomodoro with ring progress and notifications
  • Live Activity on lock screen & Dynamic Island
  • Smart Tracking; session alert if you forget to stop
  • Automatic pull at launch + push with 2 second debounce
🖥

macOS 14+

Timelog for Mac

Native macOS app that lives in your menu bar. Always visible, never in the way, with a full window for deep work sessions and client management.

  • Menu bar icon; live elapsed time while timer is running
  • Today view; active sessions with live ticker and context menus
  • Clients & Projects; NavigationSplitView with native Table
  • Pomodoro / stopwatch window; Space to start/pause
  • Auto updates via Sparkle; one click updates inside the app, signed with EdDSA
  • Real time sync via SSE; changes from iPhone appear in <1 s
  • Settings window accessible via ⌘,

In Action

Native by design.

Every pixel follows the macOS HIG. No Electron, no web views, just SwiftUI rendering on Metal.

Timelog macOS, History view with weekly bar chart and date navigation
Today view, active sessions and daily entries Timer, Stopwatch and Pomodoro mode

Highlights

Every detail, considered.

Built for developers and freelancers who want a native app, not another Electron wrapper or subscription SaaS.

⚡️

Instant tracking

Tap once to start a session. Duration is logged automatically when you stop. Multiple sessions can run simultaneously.

🍅

Pomodoro built in

Configurable focus and break intervals with a ring progress view and lock screen notification when a phase ends.

🔄

Real time sync

Stop a session on iPhone and your Mac updates in under a second, no polling. Push and pull via Server Sent Events backed by MongoDB Change Streams.

🏝

Dynamic Island

Active sessions and the running timer appear live in your Dynamic Island and on the lock screen via ActivityKit.

🔐

Privacy first

All credentials live exclusively in the system Keychain. No analytics, no third party SDKs, no data leaves your infrastructure.

🎨

Color coded clients

Assign colors to each client. Projects inherit the client palette and collapse cleanly when archived.

📊

Daily totals

The Today view sums all sessions in real time. See exactly how much time went to each client without doing the math.

🛎

Smart reminders

Configure a daily reminder to start tracking, and a threshold alert if a session is still open past your end of day time.

📦

Zero dependencies (iOS)

The iOS app uses only first party Apple frameworks; no CocoaPods, no SPM cloud packages, no Electron.

⬆️

Auto updates (macOS)

Sparkle integration delivers one click updates inside the app. Each release is signed with EdDSA; the app verifies the signature before installing. No App Store, no manual DMG download after the first install.

Architecture

Sync you control.

A tiny Vercel middleware sits between your devices and MongoDB Atlas. Both iOS and macOS share the same sync engine; real time, push based, zero polling.

📱
iPhone / iPad
RestSyncService · SSEClient
push · pull · SSE
Vercel Functions
pull · sync · events (SSE)
Change Stream
🍃
MongoDB Atlas
Free M0 · upsert · multi device
🖥
Mac
RestSyncService · SSEClient
push · pull · SSE
Vercel Functions
same endpoints · same auth
iOS + macOS

RestSyncService

Unified sync engine for both platforms. Pure URLSession, zero external dependencies. Pulls at launch, pushes with 2 second debounce. Credentials load automatically from a gitignored config file.

Real time

SSEClient

Server Sent Events client backed by MongoDB Change Streams. Stop a session on your iPhone; your Mac updates in under a second, with no polling and no wasted battery.

Server

Vercel Middleware

Three serverless functions; GET /api/pull, POST /api/sync, GET /api/events. Auth via X API Key. Full Swagger UI at your deployment URL. Runs on the free tier.

Stack

First party, all the way.

No Electron, no React Native, no subscriptions. Just Swift and Apple frameworks the way they were designed to be used.

Swift 5.10 SwiftUI SwiftData @Observable ActivityKit MenuBarExtra UserNotifications Keychain Server Sent Events Vercel TypeScript Sparkle Xcode 16+

Download

Get Timelog for Mac.

Download the latest DMG, drag it to Applications, and you're done. No App Store, no account required.

🖥
Timelog for macOS
Requires macOS 14 Sonoma or later · Apple Silicon & Intel
Download DMG
1
Open the DMG and drag to Applications
Open the downloaded .dmg, then drag Timelog.app into your Applications folder.
2
Remove the quarantine attribute
macOS blocks unsigned apps with a misleading "damaged" message. Run this once in Terminal to fix it:
$ xattr -cr /Applications/Timelog.app
3
Launch Timelog
Open Timelog from Applications or Spotlight. The menu bar icon appears immediately, no setup required to start tracking.
Optional; Enable Sync
Create the file below with your Vercel server URL and API key. Timelog reads it on first launch and saves it to Keychain; the file is only needed once.
~/.config/timelog/sync.local
Future updates are automatic
Timelog uses Sparkle to deliver signed updates. The app notifies you when a new version is available; click "Install and Relaunch" and you're done. No manual DMG download required after the first install. You can also trigger a check anytime via Timelog, Check for Updates…
🧑‍💻

Free & Open Source

Timelog is fully open source. Fork it, extend it, self host the sync server, or just read the code. No vendor lock in, ever.