Skip to main content

toolr command-line interface (Rust binary distribution)

Project description

ToolR - AI Generated Logo

In-project CLI tooling, with a Rust front-end.

Pronounced /ˈtuːlər/ (tool-er)

ToolR is a Python task runner that boots in milliseconds because the front-end is a Rust binary. Python only runs when you invoke a command, inside a per-repo uv-managed venv.

Tool runner -h steady-state First run Second run
toolr 10.4 ms 277.0 ms 21.8 ms
doit 83.4 ms 143.0 ms 88.9 ms
invoke 84.6 ms 101.7 ms 77.4 ms
nox 91.8 ms 395.9 ms 115.3 ms
duty 166.4 ms 188.5 ms 252.4 ms
python-tools-scripts 252.2 ms 340.3 ms 189.0 ms

<tool> -h, 20 runs, steady-state = mean of last 18. Measured on Apple M3 Pro / macOS 26.5 / arm64. Reproduce locally with python3 scripts/bench.py (stdlib-only; emits the table above to stdout).

Why ToolR

  • Sub-millisecond discovery. The CLI is a Rust binary. --help and Tab completion read a cached static manifest; Python never boots for non-execute paths.
  • No system-Python dependency. Toolr resolves a per-repo Python venv via uv on first invocation. The host OS doesn't need Python at all to install toolr — it's a single static binary.
  • Write Python, not framework boilerplate. Drop a tools/*.py file with a command_group and a @command decorator. Type hints become CLI arguments; Google-style docstrings become --help text.
  • First-class third-party command packages. Plugins ship a static toolr-manifest.json inside the wheel. Discovery is a glob + JSON parse; no Python import to find them.
  • Signed releases. Every release archive ships with a SLSA build-provenance attestation. The install scripts verify it automatically when gh is on PATH.

Two wheels, two roles

Package What it is Where it lives
toolr The Rust CLI binary you run from the shell. On $PATH, installed once.
toolr-py The Python runtime your tools/*.py import. In your tools/pyproject.toml.

Most projects want both: the CLI installed globally, toolr-py declared in the per-repo tools/pyproject.toml so from toolr import Context, command_group works when your commands run.

Install

Five first-class install paths.

mise

mise use aqua:s0undt3ch/ToolR@latest

Pulls toolr from the aqua registry via mise's built-in aqua backend — no plugin to register. For projects that already pin tool versions via .mise.toml, toolr's version becomes part of your project's reproducible tool set. See docs/installation/mise/.

pip

pip install toolr   # Rust CLI binary

This installs the toolr binary into whatever venv pip is pointing at. Do not pip install toolr-py into that same venv — toolr-py is the Python runtime your tools/*.py files import, and it belongs in the per-repo tools venv that toolr project init scaffolds for you (where it's declared in tools/pyproject.toml and materialised via uv sync). See "Two wheels, two roles" above for the split.

curl | sh (Linux + macOS)

curl -fsSL https://raw.githubusercontent.com/s0undt3ch/ToolR/main/installation/install.sh | sh

Verifies the SLSA attestation when gh is on PATH. Pin a version with sh -s -- --version X.Y.Z. Custom prefix: sh -s -- --prefix /opt/toolr/bin.

PowerShell (Windows)

irm https://raw.githubusercontent.com/s0undt3ch/ToolR/main/installation/install.ps1 | iex

GitHub release archives

Download toolr-<version>-<target-triple>.tar.gz (or .zip for Windows) from https://github.com/s0undt3ch/ToolR/releases, verify the .sha256 sibling and the SLSA attestation, drop the binary on $PATH. Useful in locked-down environments that audit binaries before allowing them on a machine.

Scaffold your repo

After the binary is on $PATH:

toolr project init                  # writes tools/{pyproject.toml,.gitignore,example.py}
toolr example hello                 # run the generated example
toolr self completion install bash  # or zsh / fish

The full install matrix (per-OS notes, attestation flags, prefix overrides) lives in docs/installation/.

What you write

# tools/example.py
"""Example commands."""
from toolr import Context, command_group

example = command_group("example", title="Example", description=__doc__)


@example.command
def hello(ctx: Context, name: str = "world") -> None:
    """Say hello to <name>.

    Args:
        name: who to greet.
    """
    ctx.print(f"Hello, {name}!")
$ toolr example hello --name Pedro
Hello, Pedro!

toolr project init writes a richer four-command starter than this two-liner — open it and edit, or delete it and start from scratch.

Where to go next

Project status

ToolR is pre-1.0. The on-disk manifest is versioned (schema_version in tools/.toolr-manifest.json); the binary refuses to load a higher version than it understands. The public Python surface is toolr.__all__; anything not listed there is implementation detail. Backwards-incompatible changes will be explicit in the changelog (generated by git-cliff on release).

Contributing

See CONTRIBUTING.md.

License

Apache-2.0.

Project details


Download files

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

Source Distribution

toolr-0.24.0.tar.gz (275.0 kB view details)

Uploaded Source

Built Distributions

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

toolr-0.24.0-py3-none-win_amd64.whl (4.1 MB view details)

Uploaded Python 3Windows x86-64

toolr-0.24.0-py3-none-musllinux_1_2_x86_64.whl (4.5 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

toolr-0.24.0-py3-none-musllinux_1_2_aarch64.whl (4.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

toolr-0.24.0-py3-none-manylinux_2_28_x86_64.whl (4.4 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

toolr-0.24.0-py3-none-manylinux_2_28_aarch64.whl (4.0 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

toolr-0.24.0-py3-none-macosx_11_0_x86_64.whl (4.2 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

toolr-0.24.0-py3-none-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file toolr-0.24.0.tar.gz.

File metadata

  • Download URL: toolr-0.24.0.tar.gz
  • Upload date:
  • Size: 275.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for toolr-0.24.0.tar.gz
Algorithm Hash digest
SHA256 c92f7e3fe5d0c5faf05b16bb35b01cfe55190c292a67ffbb0a1325c0855ff735
MD5 47af3fb250c3ee62dd838d048156e879
BLAKE2b-256 61e8e1180b301190990f9f2a810dea4a591bdb6a7d70d43e826cfd9c4afa1f32

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.24.0.tar.gz:

Publisher: release.yml on s0undt3ch/ToolR

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file toolr-0.24.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: toolr-0.24.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 4.1 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for toolr-0.24.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 8f6748e53701d0217337c306a64e9629ce58037d1b52d04a82dd5da9d5d42669
MD5 ddc245b9e214d8bf28365e2b7d325bcf
BLAKE2b-256 3b8a3dbfa15633f0e42d5cd1b3c62dd24fa7c2e9c74ba14e30d88e3a28113b22

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.24.0-py3-none-win_amd64.whl:

Publisher: release.yml on s0undt3ch/ToolR

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file toolr-0.24.0-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for toolr-0.24.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 72af9055fa5e2586e5d18c09bf71172c3ecadbaff702d2563f720cd75fb738d7
MD5 4c76bb0d878daa74054c6501be027aa8
BLAKE2b-256 8a96be5304026a4c11feb45efda5e81573147cd4de88517002faa38a8909b6ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.24.0-py3-none-musllinux_1_2_x86_64.whl:

Publisher: release.yml on s0undt3ch/ToolR

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file toolr-0.24.0-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for toolr-0.24.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3cca166ef396358b28049498c660a3de8ce21256ff02c4810a6c5c81885d19ec
MD5 abbf7f9337e49c1fbcff5d749b8077f3
BLAKE2b-256 9825519a76e4f381e22d4c04f77f924aba602cbda41976bea36b4d47ea0bb5b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.24.0-py3-none-musllinux_1_2_aarch64.whl:

Publisher: release.yml on s0undt3ch/ToolR

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file toolr-0.24.0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for toolr-0.24.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 16da4ddf92c3cf3b34eed9e7e00909b0b2a43827d7da940115e1ab8cc7984f33
MD5 95fdd98ebb0bb515279f45876c98dc7e
BLAKE2b-256 829ea55be5254c2939bd72dfbab977ef96e259f9dadf8effe7476413f0b2ff74

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.24.0-py3-none-manylinux_2_28_x86_64.whl:

Publisher: release.yml on s0undt3ch/ToolR

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file toolr-0.24.0-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for toolr-0.24.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d529ade219aa2a30ab433633bb3d4d7cacf0f0282fecc4ea0e876f542eea5bed
MD5 54d48ea424f7359242cb50939e954e5b
BLAKE2b-256 090b1c2dda4d82580774f73ade56e6c47a23cc7a1205832a3170782500424d47

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.24.0-py3-none-manylinux_2_28_aarch64.whl:

Publisher: release.yml on s0undt3ch/ToolR

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file toolr-0.24.0-py3-none-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for toolr-0.24.0-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 04008adf78cd334021bc6ef11299c73a9d565fc586aec33d49b77b1767ed645c
MD5 4dd49e9cf21e719f7d61dbbeb837d1bc
BLAKE2b-256 6a8f1a6f03252f976fe399e55746a525ac288d9e7d228d16f3241a30ca006280

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.24.0-py3-none-macosx_11_0_x86_64.whl:

Publisher: release.yml on s0undt3ch/ToolR

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file toolr-0.24.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for toolr-0.24.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7b1c5db4309034f396d91755a732d3054fda2ac14b1c11496e9011a657803d68
MD5 7984665c4152ad51b4c5afadf5d5fbdc
BLAKE2b-256 8c1499d541f37ecd7b9fead15b1814f8ddf623bebbd5d6511dc8bceb59bc1464

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.24.0-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on s0undt3ch/ToolR

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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