pomo

June 6, 2026 Β· View on GitHub

Demo

Latest Release Build Status

A simple, customizable Pomodoro timer for your terminal, built with Bubble Tea.

Features

  • πŸ… Work and break timer sessions
  • πŸ”„ Pomodoro cycles with long break
  • πŸ”— Task chaining with user confirmation prompts
  • πŸ“Š Real-time progress bar visualization
  • ⌨️ Keyboard shortcuts to adjust time mid-session
  • ⏸️ Pause and resume sessions
  • ⏭️ Skip to next session
  • πŸ”” Cross-platform desktop notifications
  • 🎨 Clean, minimal terminal UI with ASCII art timer fonts
  • πŸ› οΈ Custom commands when timers complete

Statistics

Track your productivity with pomo stats:

  • Duration ratio β€” total work vs break time
  • Weekly bar chart β€” daily work hours for the past 7 days
  • 4-month heatmap β€” GitHub-style activity visualization

Heatmap icons require a Nerd Font

Stats

Desktop Notifications

pomo sends native desktop notifications when sessions complete

πŸ”” View notification examples

Linux (GNOME)

Linux Notification

Windows

Windows Notification

Note: Actual notification appearance varies by operating system and desktop environment

Timer Fonts

mono12rebel
mono12rebel
ansiansiShadow
ansiansiShadow

Usage

Work sessions:

pomo                    # work session
pomo 30m                # 30m work session
pomo 45m 15m            # 45m work with 15m break
pomo -t "write report"  # work session with custom title (or --title)

Break sessions:

pomo break              # break session
pomo break 10m          # 10m break session

View statistics:

pomo stats              # View your productivity stats

Installation

Homebrew (macOS)

brew install --cask bahaaio/pomo/pomo

Winget (Windows)

winget install Bahaaio.pomo

Go

go install github.com/Bahaaio/pomo@latest

Pre-built Binaries

Download pre-built binaries from the releases page.

Nix

❄️ Nix flake installation

Option 1: Add to flake inputs and system packages

In your flake.nix:

pomo = {
  url = "github:Bahaaio/pomo";
  inputs.nixpkgs.follows = "nixpkgs";
};

Then add to your system packages:

environment.systemPackages = with pkgs; [
  inputs.pomo.packages.${pkgs.stdenv.hostPlatform.system}.default
];

Option 2: Run directly

nix run github:Bahaaio/pomo

Build from Source

git clone https://github.com/Bahaaio/pomo
cd pomo
go build .

Configuration

πŸ“ Config file search order

pomo looks for its config file in the following order:

  1. Current directory: pomo.yaml (highest priority)
  2. System config directory:
    • Linux/macOS: ~/.config/pomo/pomo.yaml
    • Windows: %APPDATA%\pomo\pomo.yaml
  3. Built-in defaults if no config file is found

Example pomo.yaml:

# action to take after session completion
# options: "ask" | "start" | "quit"
onSessionEnd: "ask"

asciiArt:
  # use ASCII art for timer display
  enabled: true

  # available fonts: "mono12" | "rebel" | "ansi" | "ansiShadow"
  # default: mono12
  font: ansiShadow

  # color of the ASCII art timer
  # hex color or "none"
  color: "#5A56E0"

work:
  duration: 25m
  title: work session

  # cross-platform notifications
  notification:
    enabled: true
    urgent: true # persistent notification with alert sound (platform-dependent)
    title: work finished πŸŽ‰
    message: time to take a break
    icon: ~/my/icon.png

break:
  duration: 5m

  # will run after the session ends
  then:
    - [spd-say, "Back to work!"]

longBreak:
  # enable long break after a certain number of work sessions
  enabled: true

  # number of work sessions before long break
  after: 4

  # long break duration
  duration: 15m

Check out pomo.yaml for a full example with all options.

Sound Notifications

You can play sounds when sessions complete by running commands in the then section.

work:
  then:
    - [paplay, ~/sounds/work-done.mp3] # Linux
    # - [afplay, ~/sounds/work-done.mp3] # macOS
    # - [powershell, start, work-done.mp3] # Windows

Commands run with a 5 second timeout and are automatically cancelled when starting the next session.

Key Bindings

Timer Controls

KeyAction
↑ / kIncrease time by 1 minute
SpacePause/Resume timer
← / hReset to initial duration
sSkip to next session
q / Ctrl+CQuit

Skip button skips directly to the next session, bypassing any prompts

Confirmation Dialog

KeyAction
yConfirm (Yes)
nCancel (No)
sStart short session (2 minutes)
TabToggle selection
EnterSubmit choice
q / Ctrl+CQuit

Short sessions extend the current session by 2 minutes, useful when you need a bit more time

License

This project is licensed under the MIT License. See the LICENSE file for details.