Hard Pomodoro is a minimalist, productivity-focused Pomodoro timer designed to force you to take breaks by locking your system and optionally blocking all screens in fullscreen mode.
Unlike traditional timers, Hard Pomodoro doesn't just notify you—it enforces your breaks, making it ideal for deep work and avoiding burnout.
- ✅ Set Pomodoro and break durations (default: 50/10 minutes).
- ✅ GUI with intuitive controls.
- ✅ Two blocking modes:
hard: locks the system and covers all screens with fullscreen black windows (kiosk mode).light: locks the system only.
- ✅ Multi-monitor support.
- ✅ Cross-platform system lock (Windows, Linux, macOS).
- ✅ Break warning notification (45 seconds before lock).
- ✅ Python-based and open-source.
- Python: Version 3.11 or higher is recommended.
- Tkinter: Required for the GUI. It is usually installed by default with Python, but verify its availability.
Check your Python version:
python --versionVerify Tkinter installation:
python -m tkinterIf a small window opens, Tkinter is installed correctly.
✅ Virtual Environment (Highly Recommended) It is highly recommended to create a virtual environment before installing dependencies to keep your setup isolated. Official Python documentation: venv
Example Commands:
Windows:
python -m venv .venv
.venv\\Scripts\\activatemacOS/Linux:
python3 -m venv .venv
source .venv/bin/activateAfter activation, install dependencies:
pip install -r requirements.txt- Clone the official repository:
git clone https://github.com/johnma96/hard-pomodoro.git
cd hard-pomodoro- Install dependencies:
pip install -r requirements.txtpython main.pyYou’ll be prompted to enter:
- Pomodoro duration (in minutes)
- Break duration (in minutes)
- Mode:
hardorlight
You can also use the underlying functions from core.py directly:
from hard_pomodoro.core import countdown_console, lock_screen, kiosk_break
countdown_console(50 * 60, "Pomodoro")
lock_screen()
kiosk_break(10 * 60)Want to use it as a native app on Windows?
- Install PyInstaller:
pip install pyinstaller- Build the executable:
Traditional .exe:
pyinstaller --noconfirm --onefile --windowed main.py --name HardPomodoro --hidden-import=plyer.platforms.win.notificationOr add an icon to the .exe:
pyinstaller --noconfirm --onefile --windowed main.py --name HardPomodoro --hidden-import=plyer.platforms.win.notification --icon=assets/icon.icoThe .exe file will appear in the dist/ folder.
To install dev dependencies (e.g. for building the .exe):
pip install -r requirements-dev.txthard_pomodoro/
├── .gitignore # Git exclusions
├── LICENSE # MIT License
├── main.py # Entry point (launches GUI)
├── pyproject.toml # Project metadata and dependencies
├── README.md # Project documentation
├── requirements.txt # Runtime dependencies
├── requirements-dev.txt # Dev-only dependencies (e.g. pyinstaller)
├── assets/
│ └── icon.ico ← Here your personal icon.ico
└── hard_pomodoro/ # Package source code
├── __init__.py
├── core.py # Core logic: timer, lock, kiosk
└── gui.py # GUI logic (Tkinter)
This project is licensed under the MIT License.
Developed by John Mario Montoya Zapata
Feel free to open issues or contribute via pull request.