Task Timer (tt) is a dead simple TUI task timer.
homebrew:
brew install caarlos0/tap/ttapt:
echo 'deb [trusted=yes] https://repo.caarlos0.dev/apt/ /' | sudo tee /etc/apt/sources.list.d/caarlos0.list
sudo apt update
sudo apt install ttyum:
echo '[caarlos0]
name=caarlos0
baseurl=https://repo.caarlos0.dev/yum/
enabled=1
gpgcheck=0' | sudo tee /etc/yum.repos.d/caarlos0.repo
sudo yum install ttarch linux:
yay -S tasktimer-bindeb/rpm/apk:
Download the .apk, .deb or .rpm from the releases page and install with the appropriate commands.
manually:
Download the pre-compiled binary for your platform from the releases page and place it somewhere on your $PATH.
To build from source, see CONTRIBUTING.md.
To get started, just run tt:
ttYou'll be presented with something like this:
Type a description of what you're working on and press Enter to start timing.
Press Enter again (with an empty input) to stop the current timer, or type a new task description and press Enter to stop the previous task and immediately start the new one.
Each task has its own timer. The total time across all tasks is shown in the header:
By default, all tasks are saved under a project named default. Use the -p flag to work with a named project:
tt -p myprojectThis flag is supported by all subcommands.
Control timers without launching the TUI — useful in scripts, shell aliases, or CI hooks:
tt start writing tests # stop any running task, start a new one
tt pause # freeze the current timer (time stops accumulating)
tt resume # continue the paused task from where it left off
tt stop # stop all running or paused tasksThese commands respect the -p flag for named projects:
tt -p myproject start "fixing the build"
tt -p myproject pauseA paused task shows [paused] in the TUI task list and its elapsed time is frozen until resumed. Press p in the TUI to toggle pause/resume on the active task.
Generate a Markdown report for the current project:
tt report
# or
tt rOutput goes to STDOUT, so you can save or pipe it:
tt report > report.md
tt -p myproject report | pbcopyFilter by date range with --since and --until (format: YYYY-MM-DD):
tt report --since 2026-05-19 --until 2026-05-23 # this week only
tt report --since 2026-05-22 # today onwardsThe total time shown in the report header reflects only the filtered tasks.
If you forgot to stop a timer, use the edit command to fix it:
tt edit
# or
tt eThe current project is exported to a temporary JSON file and opened in your $EDITOR. Save and close the file to apply the changes.
Note:
$EDITORmust be set in your environment (e.g.export EDITOR=vim).
List all projects that have recorded data:
tt listAdd -v to see task counts and total time per project:
tt list -v
# default (42 tasks, 3h 15m)
# work (18 tasks, 9h 40m)Export and import task data as JSON:
tt to-json backup.json
tt from-json backup.jsonDepends on the OS. Run this to see the paths used on your machine:
tt pathsPass --help to any command:
tt --help
tt report --help



