A tiny, fast CLI utility written in Rust that works just like sleep but shows a live progress bar. Supports human-friendly durations (psleep 1m30s), multiple animation styles, and is configurable via flags or environment variables. Never stare at a blank terminal wondering "is this thing still going?" again.

| Platform | Architecture | Tested | Binary |
|---|---|---|---|
| Linux | x86_64 | CI | .tar.gz |
| Linux | aarch64 | - | .tar.gz |
| macOS | x86_64 | CI | .tar.gz |
| macOS | aarch64 | CI | .tar.gz |
| Windows | x86_64 | CI | .zip |
Pre-built binaries are attached to each GitHub Release.
# Homebrew (macOS)
brew install Yesh-02/tap/psleep
# From crates.io
cargo install psleep
# From source
cargo install --git https://github.com/Yesh-02/psleep.git
# Or download a pre-built binary from Releases
# Basic — sleep 10 seconds with a progress bar
# (uses native OSC 9;4 if your terminal supports it, otherwise falls back to in-terminal bar)
psleep 10
# Human-friendly durations
psleep 1m30s
psleep 2h5m
psleep 0.5
# Force a specific in-terminal style (overrides OSC 9;4)
psleep 30 --style bar # ━━━━━━━━━╸━━━━━━━━━━
psleep 30 --style blocks # ████████▓░░░░░░░░░░░
psleep 30 --style dots # ⣿⣿⣿⣿⣿⣦⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀
psleep 30 --style emoji # 🟩🟩🟩🟩🟨⬜⬜⬜⬜⬜⬜⬜
psleep 30 --style classic # #####>--------------
psleep 30 --style spinner # ⠹ 00:00:12 sleeping... (18s remaining)
# Short flag
psleep 30 -s dots
# Custom indicatif template (advanced, forces in-terminal rendering)
psleep 60 --template "{elapsed} [{wide_bar}] {percent}%"
# Disable native OSC 9;4 (always use in-terminal bar)
psleep 30 --no-osc
# Adjust tick rate (smoother animation)
psleep 10 --tick-ms 50
When your terminal supports it, psleep uses native progress reporting — progress shows in your tab bar, taskbar, or title. This is the default and requires no configuration.

Supported terminals: Windows Terminal, iTerm2, WezTerm, Kitty, Ghostty, VS Code terminal, ConEmu, Contour, foot, Rio.
To force in-terminal rendering instead, pass --style or --no-osc.
Set defaults without passing flags every time:
export PSLEEP_STYLE=blocks # forces in-terminal style (disables OSC)
export PSLEEP_TICK_MS=50
export PSLEEP_TEMPLATE="{elapsed} [{wide_bar}] {eta}"
export PSLEEP_NO_OSC=1 # disable native terminal progress
Flags always override environment variables.
| Input | Duration |
|---|---|
10 |
10 seconds |
0.5 |
500 milliseconds |
1m30s |
1 min 30 sec |
2h5m |
2 hrs 5 min |
1h2m3s |
1 hr 2 min 3 sec |
psleep clears the progress bar on completion, so it works cleanly in pipelines:
echo "Deploying..." && psleep 30 && ./deploy.sh
psleep 5m && notify-send "Break's over!"
cargo install psleepsleep accuracySIGWINCH and redraw the progress bar on terminal width changes--quiet / -q) — sleep without any output, behaves exactly like sleepHH:MM:SS instead of a bar--color or PSLEEP_COLOR--notify) when sleep finishes--sound, --bell)psleep 1m 30s (separate args summed, like GNU sleep)SIGINT/SIGTERM, print elapsed time--completions~/.config/psleep/config.toml for persistent defaultsProgressSleep struct for use in other Rust programs.deb and .rpm for apt/dnfApache-2.0
$ claude mcp add psleep \
-- python -m otcore.mcp_server <graph>