A lightweight macOS menu bar Pomodoro timer built with Swift 6 and SwiftUI.
Download Latest Release
·
Report Bug
·
Request Feature
- Menu Bar App — Lives in your menu bar, always accessible without cluttering your dock
- Visual Progress — Circular progress indicator shows time remaining at a glance
- Task Management — Create, complete, and track tasks alongside your Pomodoro sessions
- Calendar Integration — Import today's calendar events as tasks via EventKit
- Keyboard Shortcuts — Start/pause timer with customizable global shortcuts
- Customizable Timers — Adjust focus, short break, and long break durations
- Auto-start — Optionally auto-start the next Pomodoro after a break
- Notifications — Get notified when a session ends
- Launch at Login — Start automatically when you log in
- i18n — English, Korean, and Simplified Chinese
brew install --cask craftowen/pomodoro/pomodoroDownload the latest .app from the Releases page.
git clone https://github.com/craftowen/pomodoro.git
cd pomodoro
./run.shThe app follows the Pomodoro Technique:
| Phase | Default Duration | Description |
|---|---|---|
| Focus | 25 min | Work on a task with full concentration |
| Short Break | 5 min | Take a quick break |
| Long Break | 15 min | Rest after 4 focus sessions |
All durations are configurable in settings.
- macOS 14.0 (Sonoma) or later
- Swift 6.0 / Xcode 16+ (build from source only)
Project Structure
Pomodoro/
├── PomodoroApp.swift # App entry point, menu bar setup
├── Models/
│ ├── PomodoroState.swift # Timer state machine
│ ├── PomodoroSession.swift # Session history
│ ├── UserSettings.swift # Persisted user preferences
│ └── TaskItem.swift # Task model
├── ViewModels/
│ ├── TimerViewModel.swift # Timer logic
│ ├── TaskViewModel.swift # Task management
│ └── CalendarViewModel.swift # Calendar integration
├── Views/
│ ├── PopoverView.swift # Main popover container
│ ├── TimerView.swift # Timer display & controls
│ ├── TaskListView.swift # Task list
│ ├── TaskRowView.swift # Individual task row
│ ├── InlineSettingsView.swift # Settings panel
│ └── DesignTokens.swift # Color & style tokens
└── Services/
├── StorageService.swift # Data persistence
├── NotificationService.swift # User notifications
└── CalendarService.swift # EventKit integration
Contributions are welcome! Feel free to open an issue or submit a pull request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- KeyboardShortcuts by Sindre Sorhus
Distributed under the MIT License. See LICENSE for details.
