Skip to main content

orthodox-spinner ☦

A terminal spinner shaped like an orthodox cross that breathes in and out.

☦  npm install

The pulses from bright to dim while any command runs, then clears — replacing whatever spinner the tool would have shown.


Installation

Recommended (isolated CLI tool):

pipx install git+https://github.com/samsonofzorah/orthodox-spinner.git

macOS + Homebrew Python 3.14 note: if pipx errors with ImportError: dlopen … pyexpat, pipx's shared env is on Python 3.14 which has a broken libexpat on macOS. Fix it with:

PIPX_DEFAULT_PYTHON=/opt/homebrew/bin/python3.12 pipx install git+https://github.com/samsonofzorah/orthodox-spinner.git

Or with pip (Python 3.11–3.13 all work):

pip install git+https://github.com/samsonofzorah/orthodox-spinner.git

CLI usage

Wrap any command — its output is buffered and shown after the spinner clears:

spin npm install
spin make build
spin -m "Deploying…" ./deploy.sh
Flag Description
-m TEXT / --message TEXT Label beside the spinner (default: the command itself)
--version Print version and exit

Python library

from orthodox_spinner import Spinner

# context manager
with Spinner("installing"):
    subprocess.run(["npm", "install"])

# manual control
s = Spinner("building").start()
do_work()
s.stop()

Shell integrations

To replace the built-in spinners of common tools system-wide, source the provided shell file in your ~/.zshrc:

echo 'source /path/to/orthodox-spinner/shell/orthodox_spinner.zsh' >> ~/.zshrc

Or copy the relevant functions directly into your ~/.zshrc.

Covered tools: npm, pip, pip3, brew, yarn, cargo

Each wrapper only activates for slow subcommands (install, build, update, etc.) and falls through to the real binary for everything else.


How it works

spin <cmd> runs the command with its stdout/stderr captured, shows the breathing spinner on stderr, then flushes the buffered output once the command exits. The spinner is written to stderr so it does not pollute piped output.

The animation uses ANSI 256-color grayscale codes (no dependencies beyond the Python standard library).


Requirements

  • Python ≥ 3.8
  • A 256-color terminal (iTerm2, Terminal.app on macOS, most modern terminals)

Release files for orthodox-spinner 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for orthodox-spinner 0.1.1
File Size Uploaded
orthodox_spinner-0.1.1.tar.gz 5.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for orthodox-spinner 0.1.1
File Interpreter ABI Platform
orthodox_spinner-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 9.6 kB

Release files / orthodox_spinner-0.1.1.tar.gz

Download URL orthodox_spinner-0.1.1.tar.gz
Size 5.6 kB
Tags Source
SHA-256 checksum
How to use checksums
b2d62fbfd2add6b961b54d0afad974e4a37015ea08f967fcb0774970f94ff281
BLAKE2b-256 checksum
How to use checksums
751cb1c19596b14105d55920c17be299a4e37aadc1d8b1f7060963701f0a373f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / orthodox_spinner-0.1.1-py3-none-any.whl

Download URL orthodox_spinner-0.1.1-py3-none-any.whl
Size 4.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
94526354629267909ffdb7c1a5cf199640d176c0c0503e8939ac2e9824f6bf3f
BLAKE2b-256 checksum
How to use checksums
c1cfee516e51f191fdefccc969b22d8f592cdfaedb5ad7cac0c01cf40b450267
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page