Skip to main content

A terminal based stopwatch and countdown timer

Project description

timeman

A terminal based stopwatch and countdown timer, built with OpenTUI and shipped as standalone binaries — no runtime required.

  • CLI interface (default): Lightweight inline mode that lives in your scrollback.
  • TUI interface: Full-screen terminal UI via -i/--interactive.
  • Notifications: Bell + toast when a countdown completes.
  • Session timeline: Stopwatch summary with per-session start/end times in your local time zone.
  • Drift-proof timing: Durations use a monotonic clock, so a system clock jump (DST, NTP sync) never corrupts them.

Stopwatch TUI Screenshot

Installation

curl (Linux, macOS):

curl -fsSL https://raw.githubusercontent.com/rehanhaider/time-manager/main/install.sh | bash

npm:

npm install -g timeman

bun:

bun add -g timeman

pip / uv (same binary, published as time-manager for continuity with the original Python package):

pip install time-manager
# or
uv tool install time-manager

All methods install the tm command, plus timeman (npm/bun/curl) or time-manager (pip) as an alias.

Supported platforms: Linux x64/arm64 (glibc and musl), macOS x64/arm64, Windows x64 (via npm/bun).

Usage

tm sw              # stopwatch            (also: tm stopwatch)
tm cd 5 m          # 5-minute countdown   (also: tm countdown 5 m)

Stopwatch

tm sw
tm sw -p "Project Alpha"   # name the session for the summary
tm sw -i                   # full-screen TUI

Keys: space start/stop · r reset · q quit.

On exit you get a session timeline — one bar per start/stop run, with total time:

╭──────────────── Project Alpha: 0 hrs 25 mins ────────────────╮
│   Session #1   13:53 ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ 14:03 IST  (0 hrs 10 mins) │
│                                                              │
│   Session #2   14:10 ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ 14:25 IST  (0 hrs 15 mins) │
╰──────────────────────────────────────────────────────────────╯

Countdown

tm cd 90 s         # units: s/sec/seconds, m/min/minutes, h/hr/hours
tm cd 5            # unit defaults to minutes
tm cd 1 h -i       # full-screen TUI

Keys: space pause/resume · q quit. The display turns yellow under 30 seconds and red under 10; when time is up you get a terminal bell and a toast.

Development

Requires Bun >= 1.3.14.

bun install                      # install dependencies
bun run dev sw                   # run from source
bun test                         # tests
bunx tsc --noEmit                # typecheck

Building distribution artifacts:

bun install --os="*" --cpu="*"   # stage native packages for every platform (one-time)
make build                       # compile binaries for all 7 targets into dist/bin
make package                     # assemble npm packages (dist/npm) + release tarballs (dist/release)

Releasing

Everything publishes locally from this machine — no CI, no secrets on GitHub.

  1. make bump (or TYPE=minor make bump), commit.
  2. make package — builds all binaries, npm packages, wheels, and release tarballs.
  3. make publish — rehearsal: npm --dry-run + TestPyPI.
  4. PROD=TRUE make publish — the real thing: npm packages, PyPI wheels, and a GitHub release v<version> with the binaries (which the curl installer downloads).

Credentials: npm token in ~/.npmrc, PyPI tokens in .env (PYPI_PUBLISH_TOKEN, TEST_PYPI_PUBLISH_TOKEN), and an authenticated gh CLI for the release upload.

History

This project was originally written in Python with Textual and published to PyPI as time-manager (last Python release: 0.3.1; the implementation is preserved in git history). From 0.4.0 on, the PyPI package ships the same compiled binary as the npm package — pip install time-manager keeps working with no Python runtime involved.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

time_manager-0.4.0-py3-none-win_amd64.whl (39.9 MB view details)

Uploaded Python 3Windows x86-64

time_manager-0.4.0-py3-none-musllinux_1_2_x86_64.whl (42.6 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

time_manager-0.4.0-py3-none-musllinux_1_2_aarch64.whl (42.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

time_manager-0.4.0-py3-none-manylinux_2_27_x86_64.whl (40.3 MB view details)

Uploaded Python 3manylinux: glibc 2.27+ x86-64

time_manager-0.4.0-py3-none-manylinux_2_27_aarch64.whl (39.9 MB view details)

Uploaded Python 3manylinux: glibc 2.27+ ARM64

time_manager-0.4.0-py3-none-macosx_12_0_x86_64.whl (28.0 MB view details)

Uploaded Python 3macOS 12.0+ x86-64

time_manager-0.4.0-py3-none-macosx_12_0_arm64.whl (25.5 MB view details)

Uploaded Python 3macOS 12.0+ ARM64

File details

Details for the file time_manager-0.4.0-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for time_manager-0.4.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 ef0c9f24a7ce01bd26f5f9017f0c540773eb3f0b29c76595e9a1520d8a3cff39
MD5 0d03c55c26f74c677c15292cd6b35e76
BLAKE2b-256 958a3bfe363a6d1f078bbdaae13af43f150c9605bc253cd10c6d4fc4b8625763

See more details on using hashes here.

File details

Details for the file time_manager-0.4.0-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for time_manager-0.4.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8e6de3e027e65b9872a108267149800fbb8f538ee920a2a0731606272e945f83
MD5 d8dbad9c13ac242c214bbb2eef5278df
BLAKE2b-256 01419fc37aa1d9a237a962f8d51ce2dbe5c8f04a1c577b4aa3641a08e701d9db

See more details on using hashes here.

File details

Details for the file time_manager-0.4.0-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for time_manager-0.4.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a51422dd1fa72f00364086aebe7f7ce2f621bd3cbf33797ed1ab24c5c284856b
MD5 748f6d6e31f58cb088f09bd55dcb89c4
BLAKE2b-256 eb0b93dd86b49923e7ca189a0a874a5141e1cc754f455fb02b464056c1cad40c

See more details on using hashes here.

File details

Details for the file time_manager-0.4.0-py3-none-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for time_manager-0.4.0-py3-none-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 3b32e3f55c5ad63382f279a345b6577f1aa1c59a13c50c490bf0937a969dac22
MD5 31ba27710a793b503f1aa8b3c9091255
BLAKE2b-256 489c40b3e79ac540b5d0377fb3b11127fcb719bb77c6b50d5fa24973e1c345f2

See more details on using hashes here.

File details

Details for the file time_manager-0.4.0-py3-none-manylinux_2_27_aarch64.whl.

File metadata

File hashes

Hashes for time_manager-0.4.0-py3-none-manylinux_2_27_aarch64.whl
Algorithm Hash digest
SHA256 72bc41c4a76b713cfaac6e9530cc03910dc2ea566e81f8a9a7b8abfb0e635df7
MD5 b6118386e786450f28be84942f632914
BLAKE2b-256 e8420ec996d9f6302bb5f197ca977a9910c6c8646e1daef5b97b8cec58c86c0c

See more details on using hashes here.

File details

Details for the file time_manager-0.4.0-py3-none-macosx_12_0_x86_64.whl.

File metadata

File hashes

Hashes for time_manager-0.4.0-py3-none-macosx_12_0_x86_64.whl
Algorithm Hash digest
SHA256 0b99a91b6889dc0bf178705ad16a8afcb812842e75ee9e94de0724447188ec0c
MD5 dcba0f17c2cb6ef42b6df7873b9ffaa7
BLAKE2b-256 941f449408abee34d0969cac431960ec78cf01257c798d25e252bd71849dcdc6

See more details on using hashes here.

File details

Details for the file time_manager-0.4.0-py3-none-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for time_manager-0.4.0-py3-none-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 ca462ccedda92b61e38bbf0a636f59ebf89e5739b482f3b8155320ff355b23e6
MD5 13a77e67e48036eb98973c399599af81
BLAKE2b-256 b7996694bc65f2ef945873c6171ba165428f2a5d99ef0f8abd9fbccc84d969a7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page