A no-fuss CLI for the things you actually use timers for: a quick countdown, an alarm at 3pm, and pomodoro rounds when you need to focus. Zero runtime dependencies on macOS and Linux — just the Python standard library (Windows adds one: tzdata, for the timezone database it lacks).
$ chime 10m "tea is ready"
⏳ tea is ready
target 16:42:11 · 10m from now
Ctrl-C to cancel
09:58
Features
- Countdown timers with natural durations (
10m,1h30m,90s,0.5h) - Clock-time alarms (
at 9am,at 15:30,at "tomorrow 9am") - Timezone-aware alarms (
at "9am EDT",--tz Asia/Kolkata) with a default configurable per user - Pomodoro mode — configurable work / break / rounds
- Stopwatch (count-up)
- Background alarms (
--bg) that survive shell exit, withlist/cancel - Native desktop notifications + system sounds on macOS, Linux, and Windows
- Optional spoken alerts (
--say) - Zero runtime dependencies on macOS and Linux — just the Python standard library (Windows adds
tzdata)
Install
Homebrew (macOS / Linux):
brew install MaVericKWareZ/tap/chime
pipx (cross-platform, recommended for Windows):
pipx install chime-cli
# or
pip install --user chime-cli
From source:
git clone https://github.com/MaVericKWareZ/chime
cd chime
pipx install .
Any of these puts a chime command on your PATH.
Usage
| Command | What it does |
|---|---|
chime 10m "tea" |
Countdown timer (foreground) |
chime 1h30m |
Same, longer |
chime --bg 25m focus |
Set alarm in background, get your prompt back |
chime at 9:30am standup |
Alarm at clock time |
chime at 15:30 "pick up package" |
24h clock |
chime at "tomorrow 9am" |
Skip ahead one day |
chime at "9am EDT" standup |
Alarm in a source timezone (inline) |
chime at 9am --tz Asia/Kolkata |
Same, via the --tz flag |
chime config set timezone Asia/Kolkata |
Set your default timezone |
chime config |
Show effective timezone config |
chime pomodoro |
25/5 × 4 rounds (defaults) |
chime pomodoro 50 10 3 |
50m work / 10m break × 3 rounds |
chime stopwatch |
Count-up timer |
chime list |
Show active background alarms |
chime cancel 1234 |
Cancel one (by id from chime list) |
chime cancel all |
Cancel everything |
chime sounds |
List available alarm sounds |
chime sounds Hero |
Preview a sound |
chime help |
Full help |
Options
Available on any alarm-setting command, in any position:
--bg— run in background, return immediately--sound NAME— use a different alert sound (chime soundsto list)--repeat N— repeat the alert sound N times (default 3)--tz ZONE— source timezone for the alarm (EDT,Asia/Kolkata, …); see Timezones. Can't be combined with an inline timezone--say— speak the message aloud (usessayon macOS,spd-say/espeakon Linux, PowerShell SAPI on Windows)--no-sound— silent (desktop notification only)
Duration formats
10m, 1h30m, 90s, 0.5h, 45m30s, 1d. A bare number is minutes: chime 30 = 30 min.
Time formats
15:30, 3:30pm, 9am, 9:00, tomorrow 9am. Past clock times automatically roll to tomorrow.
Timezones
By default an alarm fires at the requested wall-clock time in your system timezone. You can pin an alarm to a different source timezone two ways:
chime at "9am EDT" standup # inline, in the time string
chime at 9am --tz Asia/Kolkata # via the --tz flag
Use one or the other — supplying both an inline timezone and --tz is an error.
Accepted abbreviations. Unambiguous abbreviations resolve as zone aliases to a single IANA zone, and full IANA names (Asia/Kolkata, Europe/London) always work:
| Abbreviation | Zone |
|---|---|
EST / EDT |
America/New_York |
CDT |
America/Chicago |
MST / MDT |
America/Denver |
PST / PDT |
America/Los_Angeles |
JST |
Asia/Tokyo |
KST |
Asia/Seoul |
AEST / AEDT |
Australia/Sydney |
GMT / UTC |
UTC |
An abbreviation names the zone, not a fixed offset: EST and EDT both mean New York time, and DST is applied by zoneinfo for the target moment — you don't have to know which season you're in. (For a literal fixed offset, use an IANA form like Etc/GMT+5.)
Rejected abbreviations. Ambiguous abbreviations map to more than one region, so Chime refuses to guess and errors with the candidates — supply the IANA name instead:
| Abbreviation | Could mean |
|---|---|
IST |
Asia/Kolkata, Europe/Dublin, Asia/Jerusalem |
CST |
America/Chicago, Asia/Shanghai, America/Havana |
BST |
Europe/London, Asia/Dhaka, Pacific/Bougainville |
AST |
America/Halifax, Asia/Riyadh |
Note CST errors even though CDT resolves cleanly — the daylight form happens to be unambiguous while the standard form isn't.
A configured default. Set a timezone once and every bare chime at uses it:
chime config set timezone Asia/Kolkata
Abbreviations are resolved to their IANA name when you set them (chime config set timezone EDT stores America/New_York and echoes back the typed form). The effective timezone for any command is resolved in order: inline timezone → --tz → configured default → system timezone.
chime config shows the current setting; chime config get timezone prints just the value (script-friendly); chime config unset timezone clears it; chime config reset wipes the whole config.
Config file. Settings live in a single JSON file:
- POSIX (macOS / Linux):
$XDG_CONFIG_HOME/chime/config.json(defaults to~/.config/chime/config.json). - Windows:
%APPDATA%\chime\config.json.
Platform support
| Platform | Notifications | Sound | Speech |
|---|---|---|---|
| macOS | osascript |
afplay + system sounds |
say |
| Linux | notify-send (libnotify) |
paplay / aplay |
spd-say / espeak |
| Windows | PowerShell toast (Win 10+) | winsound (stdlib) |
PowerShell SAPI |
Linux users typically already have these tools; on a fresh system: sudo apt install libnotify-bin pulseaudio-utils (Debian / Ubuntu) gets you notifications + sound.
Windows has no system IANA timezone database, so the install pulls in tzdata (the only runtime dependency, and only on Windows) to power the timezone features. macOS and Linux read zones from the OS and install nothing extra.
Background alarms
When you use --bg, chime detaches from your shell — you can close the terminal and the alarm still fires.
- POSIX (macOS / Linux): double-fork +
setsid. State at$XDG_STATE_HOME/chime/alarms.json(defaults to~/.local/state/chime/alarms.json). - Windows:
subprocess.PopenwithDETACHED_PROCESSflags. State at%LOCALAPPDATA%\chime\alarms.json.
For an alarm set in a non-local source timezone, chime list appends the source wall-clock and label in parens (e.g. Fri 18:30:00 … (09:00 EDT)) so you can audit what you scheduled.
Stale entries from killed processes are pruned automatically the next time you run chime list or chime cancel.
Development
git clone https://github.com/MaVericKWareZ/chime
cd chime
python -m venv .venv && source .venv/bin/activate
make install # editable install + dev deps + pre-commit hooks
make help # discover every dev / build / release target
make test, make lint, make fmt, make build are the common ones. See CONTRIBUTING.md for the contributor guide and the release process.
Links
- Changelog — what changed, version by version
- Contributing — dev setup, code style, release flow
- Security policy — how to report a vulnerability
- Issue tracker
License
MIT © Sarthak Mahapatra
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chime_cli-0.2.0.tar.gz.
File metadata
- Download URL: chime_cli-0.2.0.tar.gz
- Upload date:
- Size: 32.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4fcea2155d140c7b9c770e1cb8bef8e8d7bcd92168701778007c2029a611fa4f
|
|
| MD5 |
3e73988c1e2a2c1d99656f230f379e4e
|
|
| BLAKE2b-256 |
ae7d9f23e08073e886de7fafda994afdcd7f2f6423bcb1188e9ba6dc85a630bc
|
Provenance
The following attestation bundles were made for chime_cli-0.2.0.tar.gz:
Publisher:
release.yml on MaVericKWareZ/chime
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chime_cli-0.2.0.tar.gz -
Subject digest:
4fcea2155d140c7b9c770e1cb8bef8e8d7bcd92168701778007c2029a611fa4f - Sigstore transparency entry: 2097983748
- Sigstore integration time:
-
Permalink:
MaVericKWareZ/chime@0f267cfd8c47e1646f34560b08de6d315da41cea -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/MaVericKWareZ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0f267cfd8c47e1646f34560b08de6d315da41cea -
Trigger Event:
push
-
Statement type:
File details
Details for the file chime_cli-0.2.0-py3-none-any.whl.
File metadata
- Download URL: chime_cli-0.2.0-py3-none-any.whl
- Upload date:
- Size: 26.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4def5e6b778050fe09c04475215b4a36348a84619ae701b87abeac7639397d8f
|
|
| MD5 |
f961d4b7cedc3191312ad4dde7adec0b
|
|
| BLAKE2b-256 |
6d2e43356b9f7d16b5c92387712f5b664bbe71de397d684827ac1b2db58bd64b
|
Provenance
The following attestation bundles were made for chime_cli-0.2.0-py3-none-any.whl:
Publisher:
release.yml on MaVericKWareZ/chime
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chime_cli-0.2.0-py3-none-any.whl -
Subject digest:
4def5e6b778050fe09c04475215b4a36348a84619ae701b87abeac7639397d8f - Sigstore transparency entry: 2097983867
- Sigstore integration time:
-
Permalink:
MaVericKWareZ/chime@0f267cfd8c47e1646f34560b08de6d315da41cea -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/MaVericKWareZ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0f267cfd8c47e1646f34560b08de6d315da41cea -
Trigger Event:
push
-
Statement type: