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 by default (requires the gh CLI); pass --verify-attestation=skip to bypass, accepting the supply-chain risk.

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 by default (requires the gh CLI; pass --verify-attestation=skip to bypass). 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.25.0.tar.gz (277.6 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.25.0-py3-none-win_amd64.whl (4.1 MB view details)

Uploaded Python 3Windows x86-64

toolr-0.25.0-py3-none-musllinux_1_2_x86_64.whl (4.3 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

toolr-0.25.0-py3-none-musllinux_1_2_aarch64.whl (4.0 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

toolr-0.25.0-py3-none-manylinux_2_28_x86_64.whl (4.3 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

toolr-0.25.0-py3-none-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for toolr-0.25.0.tar.gz
Algorithm Hash digest
SHA256 dd79594f93edc68a515ad069d26689deb4831b81ed28302ebc8ec72f2e05c3ed
MD5 46c18e8f282482c326b7b340ecd04508
BLAKE2b-256 eeb8e50e646bcaafff993a440786fc73306d0047d00dd99f804c1cab0b8a337b

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.25.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.25.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: toolr-0.25.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.25.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 0c48d73cab78df6aa9566c24c0be1d4916bf2bf08e12a1328a729039f5757635
MD5 73e9d826b0a65148dc5775103e8532cb
BLAKE2b-256 f99913ce1f0c4c9cc18039514d5126287e368646c3d74ba58d089c02d54d728f

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.25.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.25.0-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for toolr-0.25.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a8f6739456e5bcb6e3c489addeadd8facfac57501c2d031061b357a531f01b8f
MD5 e6f7e0e6ce299bf97ee8bc4ff0b7eb05
BLAKE2b-256 b2d2aaa711058e83c1eb6e1f2441389961ec2364c596153aed4892f68274b2d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.25.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.25.0-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for toolr-0.25.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 847663538fa89e323da66747fdca973bcde3638b89063d661d9389434f1555c8
MD5 4097b2e4fde09afdfe46743a2347ef0a
BLAKE2b-256 3d3e77a532efce6cea79daa00c96f499c8e03b02ff0dbe207cd0ed9bf147de09

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.25.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.25.0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for toolr-0.25.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1c15ab037df486950605d63af4d85a4b11ba94fdac7546e555de512bd9326ff6
MD5 ac01a055b60762b80f23e9a376bda54a
BLAKE2b-256 efdec9fccf7c8cf44236c8d01d83bc0ade06469f086cc097e1e8c5623d1845e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.25.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.25.0-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for toolr-0.25.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 94413f7ae9053c5179cddd248317bc0dd2ea64ac5d97626ea41c2a89da9c67b7
MD5 1794e8e74ba3e46ebec3a9014b91c041
BLAKE2b-256 95b292b2aa2f78e56a5ea757dd20878be786783bfd4c3dea1d284fa909f2905f

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.25.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.25.0-py3-none-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for toolr-0.25.0-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 8485dd5d6232d1c15261e8383e4e737e06d3a04fe7ca3affea01ee3ee46be1da
MD5 08c70c72555f78f1fdf0ae79896dd762
BLAKE2b-256 5a4eb137f3322eea4045d698d6cefe9f9934877c8a2d97a4814148ba1de5bd6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.25.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.25.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for toolr-0.25.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a1732bb18bc30d28df86fcc12774d7f2c545dfeee486dad0ad4259d4d70dee3d
MD5 853494deabd4e98dd54bececf40f044c
BLAKE2b-256 f8e8c85a8b6e9d12bb21fa717bf41d4f7da56982e199655366f24992f3895cb1

See more details on using hashes here.

Provenance

The following attestation bundles were made for toolr-0.25.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