A macOS menu bar Pomodoro timer with task management, session logging, web-based task editor, and analytics.
Pomodoro Menu Bar App is built for those who value both their deep work and their peace of mind. It stays quietly in your menu bar, honoring your focus by staying out of the way while gently guiding you through a rhythm of intentional work and necessary rest. Itβs not just about getting things done; itβs about ending your day with a sense of clarity, knowing exactly where your energy went.
If this app helps you focus, please support the project: and share it with a friend. It really helps the project grow!
- Stays in your menu bar β Keeps your workspace clean and minimizes distractions.
- Force break with Zen Mode β A beautiful fullscreen interface that helps you truly disconnect during breaks.
- Deep Focus Analytics β Track exactly where your time goes and monitor your productivity and mood over time.
- Autopilot Scheduling β Automatically follows your scheduled workday without needing to start sessions manually.
- Recurring Habit System β Tasks can repeat daily, weekly, or on specific weekdays to help build long-term routines.
- Mood & Reflection Journaling β Log how you feel and what blocked your progress to improve focus quality.
- Smart Task Queueing β Plan your next move during breaks so you can hit the ground running when the timer starts.
- Batch Mode β Quickly add multiple tasks at once via copy-paste to streamline your planning.
- Off-Hours Flexibility β One-click manual sessions for deep work anytime, even outside your normal schedule.
Download Latest Release (Source Code .zip) (Note: Requires Python to run)
- Menu bar timer showing elapsed time, emoji, priority badge, and progress bar
- Web-based task management (add, edit, delete) with modern UI
- Repeat scheduling - tasks can repeat daily, weekly, monthly, or yearly with day-of-week filtering
- Automatic task selection before each work session
- Session feedback (mood, reflection, blockers) during breaks
- Session logging to
session_logs.jsonwith detailed analytics - Statistics menu with daily/weekly summaries, mood analysis, and task duration breakdowns
- Automated Fixed Schedule - Morning (09:00-12:00) and Afternoon (13:00-18:00) sessions with predefined work/break cycles.
- End-of-day page - automatically opens
go_home.htmlat the end of the scheduled workday. - Zen Mode - fullscreen break interface (
break.html) with calming animations and stress-relief links. - Off-Hours Mode - Dynamic schedule generation for manual work sessions outside 9-5.
- Smart Sleep Detection - Automatically saves session and pauses timer when computer sleeps or locks.
- Auto-Refreshing Menu - Menu items and durations update in real-time without needing an app restart.
- Runs as LaunchAgent - starts automatically on login.
Easily select your next focus directly from the menu bar. If you haven't selected a task, Pomodoro Menu Bar App gently reminds you.

Watch how Pomodoro Menu Bar App helps you disconnect by automatically opening the Zen Mode fullscreen interface when your session ends.

Capture your thoughts and blockers during breaks to maintain high-quality focus throughout the day.

Need to start working outside your regular hours? Fire up a dynamic session with a single click and let the app handle the rest.

The menu bar timer showing active work session with task name and progress
Web-based task creation with repeat scheduling and day selection
Fullscreen break interface with calming animations
If you already have Python installed, you can use the included manual.sh script which handles setup and dependency installation automatically:
chmod +x manual.sh
./manual.shEnsure you have Python 3.9+ installed on your macOS.
git clone https://github.com/gaweki/pomodoro_menubar.git pomodoro_work
cd pomodoro_work# Create virtual environment (recommended)
python3 -m venv venv
source venv/bin/activate
# Install required packages
pip install -r requirements.txt# Make executable
chmod +x main.py
# Run
./main.pyThe timer icon (π ) should appear in your menu bar.
Setting up a LaunchAgent allows the application to run automatically in the background as soon as you log into your Mac.
- Why do this? To ensure your Pomodoro schedule and session tracking are always active without manual intervention. It makes the app truly "set-and-forget."
- Who is it for? Highly recommended for daily users who want the timer to follow their workday schedule automatically.
- What happens? The app will start silently on boot/login, and you'll see the π icon in your menu bar immediately.
Option A: Using the provided plist file
# Copy the plist to LaunchAgents directory
cp com.pomodoro.menubar.plist ~/Library/LaunchAgents/
# Edit the plist to update paths
nano ~/Library/LaunchAgents/com.pomodoro.menubar.plist
# Load the agent
launchctl load ~/Library/LaunchAgents/com.pomodoro.menubar.plistOption B: Manual plist creation
- Create a file at
~/Library/LaunchAgents/com.pomodoro.menubar.plist. - Replace
YOUR_USERNAMEandPATH_TO_PROJECTwith your actual Mac username and the folder where you cloned the repo. - Note: We recommend using the python executable inside your
venvto ensure dependencies likerumpsare found.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.pomodoro.menubar</string>
<key>ProgramArguments</key>
<array>
<!-- Path to python inside your virtual environment -->
<string>/Users/YOUR_USERNAME/PATH_TO_PROJECT/venv/bin/python3</string>
<!-- Path to your main.py file -->
<string>/Users/YOUR_USERNAME/PATH_TO_PROJECT/main.py</string>
</array>
<key>WorkingDirectory</key>
<string>/Users/YOUR_USERNAME/PATH_TO_PROJECT</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/pomodoro_menubar.err</string>
<key>StandardOutPath</key>
<string>/tmp/pomodoro_menubar.out</string>
</dict>
</plist>Then load it:
launchctl load ~/Library/LaunchAgents/com.pomodoro.menubar.plist# Stop the agent
launchctl unload ~/Library/LaunchAgents/com.pomodoro.menubar.plist
# Restart the agent
launchctl unload ~/Library/LaunchAgents/com.pomodoro.menubar.plist&&launchctl load ~/Library/LaunchAgents/com.pomodoro.menubar.plist
# Check if running
launchctl list | grep pomodoroThe application follows a structured workday. It automatically switches activities based on the time:
| Period | Time | Session Numbers | Activity Pattern |
|---|---|---|---|
| Morning | 09:00 - 12:00 | 1 - 6 | 25m Work / 5m Break (Long break after session 4) |
| Lunch | 12:00 - 13:00 | - | 60m Break |
| Afternoon & Evening | 13:00 - End | 1 - 15+ | 25m Work / 5m Break (Cycles continue based on SCHEDULE) |
- Fixed Schedule: The app follows the
SCHEDULElist defined inmain.py. - Off-Hours: Outside these times (or on weekends), the app defaults to Manual Mode.
Customizing the Schedule: You can modify the
SCHEDULElist at the beginning ofmain.pyto match your own work hours and break preferences. Simply update thestartandendtimes for each session.
For detailed information on how to configure the application, schedules, and advanced settings, please refer to the docs directory.
pomodoro_work/
βββ main.py # Main application
βββ add.html # Add task web interface
βββ edit_task.html # Edit task web interface
βββ break.html # Zen Mode break interface
βββ go_home.html # End-of-day page
βββ tasks.json # Task storage (auto-generated)
βββ session_logs.json # Session logs (auto-generated)
βββ com.pomodoro.menubar.plist # LaunchAgent config
βββ requirements.txt # Python dependencies
βββ README.md # This file
# Remove LaunchAgent
launchctl unload ~/Library/LaunchAgents/com.pomodoro.menubar.plist
rm ~/Library/LaunchAgents/com.pomodoro.menubar.plist- Check logs:
tail -f ~/pomodoro_menubar_error.log(or path defined in your.plist) - Verify Python path in plist matches your system:
which python3 - Ensure script is executable:
chmod +x main.py
- Check if port 7878 is available:
lsof -i :7878 - Try changing the port in
main.py
- Check
tasks.jsonfor valid JSON syntax - Verify task has correct
allowed_daysandrepeat_unitsettings - Check if task is marked as deleted
MIT - feel free to fork and improve!