A terminal Pomodoro timer written in Rust. Keep focus without leaving the terminal β with automatic daily logs, a todo list, and native desktop notifications.
- Pomodoro timer with configurable work, short break, and long break durations
- Task tracking β pick from a todo list or type a custom task
- Todo list β add, edit, delete, and check off tasks in-app
- Daily logs β sessions appended to quarterly markdown files (
YYYY-Q?.md) - Sleep-aware β detects when your machine sleeps mid-session
- Manual breaks β take an open-ended break between sessions
- Helping mode β track time spent helping others separately
- Distraction button (
d) β add 5 minutes of paused time - Early end with notes (
e) β end a session early and record what you did - Desktop notifications on macOS (via
terminal-notifier) - Energy bar showing hours logged today
cargo install rustodoroShips as a pre-built binary β no Rust toolchain required. Supports macOS (arm64 & x86_64) and Linux (arm64 & x86_64) β works with Linuxbrew.
brew install alvisf/tap/rustodoroOr tap once, then install:
brew tap alvisf/tap
brew install rustodoroRequires Rust 1.85+ (2024 edition).
git clone https://github.com/alvisf/rustodoro.git
cd rustodoro
cargo install --path .macOS:
brew install terminal-notifierLinux: uses notify-send from libnotify, pre-installed on most desktops. Install with your distro's package manager if missing:
# Debian / Ubuntu
sudo apt install libnotify-bin
# Fedora
sudo dnf install libnotify
# Arch
sudo pacman -S libnotifyWithout a notifier, the timer still works β you just won't get system notifications.
On first launch you'll see an onboarding screen asking where to save your daily logs. The default is ~/Documents/Notes/daily-logs. Press Enter to accept or type a different path. ~ expands to your home directory, and missing directories are created automatically.
Your choice is saved to ~/.config/rustodoro/config (respects $XDG_CONFIG_HOME).
rustodoroThe app opens on your todo list. Pick a task with Enter, or press n for a custom task. Adjust work/break durations on the setup screen, then Enter to start the timer.
Arrow keys and hjkl are both supported for navigation.
| Key | Action |
|---|---|
Enter |
Confirm log directory |
Ctrl+R |
Reset to default |
Esc |
Quit |
| Key | Action |
|---|---|
ββ / jk |
Move cursor |
Enter |
Start timer (picker) / toggle done (manager) |
Space |
Toggle done |
a |
Add todo |
e |
Edit todo |
d |
Delete todo |
n |
Enter a custom task |
l |
Open daily log |
b |
Start manual break |
Esc |
Quit / back |
| Key | Action |
|---|---|
ββ / jk |
Navigate fields |
ββ / hl |
Decrease / increase by 1 |
Enter |
Start session |
Esc |
Back |
| Key | Action |
|---|---|
Space |
Pause / resume |
Enter |
End work, start break |
e |
End session early (notes) |
h |
End as "helping others" (notes) |
s / n |
Skip phase |
d |
Distraction β add 5 min |
w |
Wrap up β shorten by 5 min |
r |
Rename current task |
t |
Open todo manager |
l |
Open daily log |
q / Esc |
Quit |
| Key | Action |
|---|---|
Space |
Pause / resume |
Enter |
End break (manual) |
l |
Open daily log |
q / Esc |
Quit |
| Key | Action |
|---|---|
ββ / jk |
Navigate past days |
Enter |
Expand / collapse |
Esc / Backspace |
Back |
Sessions are appended to quarterly markdown files (e.g. 2026-Q2.md):
# 2026 Q2
## 2026-04-28
- [x] 09:15 AM β 09:40 AM (25:00) Implement onboarding
> Finished the happy path
- [h] 10:00 AM β 10:15 AM (15:00) Helped Priya with deploy
- [ ] 11:00 AM β 11:10 AM (10:00) Email triageMarks: [x] completed, [h] helping, [ ] skipped.
Config file: ~/.config/rustodoro/config (or $XDG_CONFIG_HOME/rustodoro/config).
work_secs=1500
break_secs=300
long_break_secs=900
sessions_before_long=4
log_dir=/Users/you/Documents/Notes/daily-logs| What | Where |
|---|---|
| Config | ~/.config/rustodoro/config |
| Daily logs | <log_dir>/YYYY-Qn.md |
| Todo list | <log_dir>/.pomodoro_todos |
Nothing leaves your machine. No telemetry, no network calls.
cargo build --release
cargo test
cargo clippy-
--reconfigureCLI flag - Weekly / monthly summaries
- Export to CSV / JSON
PRs welcome. Run cargo test && cargo clippy && cargo fmt before submitting.
MIT Β© Alvis Felix
