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 toolr bench compare (add --markdown for the table above).

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 plugin add toolr https://github.com/s0undt3ch/ToolR.git#installation/mise
mise use --global toolr@latest

For projects that already pin tool versions via .mise.toml, this is the most-natural fit — 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.20.0.tar.gz (244.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.20.0-py3-none-win_amd64.whl (4.1 MB view details)

Uploaded Python 3Windows x86-64

toolr-0.20.0-py3-none-musllinux_1_2_x86_64.whl (4.4 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

toolr-0.20.0-py3-none-manylinux_2_28_aarch64.whl (3.9 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

toolr-0.20.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.20.0.tar.gz.

File metadata

  • Download URL: toolr-0.20.0.tar.gz
  • Upload date:
  • Size: 244.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.20.0.tar.gz
Algorithm Hash digest
SHA256 c3bd810f34a590296caa35f0a336de798406be0fb4b3b8d7b145cf4d2da4fb5b
MD5 7a7e9f865253e73ef97c6ce961a9e491
BLAKE2b-256 79745da368a987df27c87b8318ebc17c7921685e581daa13bef87acbd6dd696f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: toolr-0.20.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.20.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 a42f03733f0ec30b1aff5e78ee99ce3c581a84d891df27ac6534405b5002e1a0
MD5 01291a111e43a652270187222b328b34
BLAKE2b-256 32560a08b745d9ef9932e1515df775295041fa179cb4a76df521f40cc15f3b8d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 30f3b82b39663b1f26dd2d7876e4f3532f58cf80c87dcea19c227d372afaaab0
MD5 9ee36ad74c83d4f011414ee74db45d94
BLAKE2b-256 0b51bd06162d0e4ccc452bda05bba0d06d8d371e874c11c58e036de9672cd4ec

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 eded1cd166ff3ac8fd525aef6c478f01f39f575fe4db01c73783710b8a185025
MD5 501f0e2456b2d1e4282a4f2574a3b5eb
BLAKE2b-256 2be064eb07b808f3a5f01e906e050b587f70e1012f22d8faa81751e32081c4db

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1fd2ced6d0bfb99956a25a3be0b4b3752a038442f94445419bbaff0ca9b4c1c9
MD5 f49b24cff2781edf7e09107423c1b95e
BLAKE2b-256 70c1ec260c1de5ad852fea2bab013d5b212a11714209b9aafcb665e25b4a1c2c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e861b65cce75cbe674b01a9143ca4e0ae375edff86439638dd67768889d53f62
MD5 ed10dca697c9613a5db45845045e987e
BLAKE2b-256 7f389f40cdfa64b7a468aaf4a313a1c6ad8fc79639013b22959d30779f4533e9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.0-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 61bc2c5a39c8041ae9500b44f24fc1b82dd4cc5d859f706a77bf1562d626b423
MD5 e5c159d30b169cf02ce8a9c3f2d1882a
BLAKE2b-256 6b342fd9c9273af0f73f3f96abf820b81d2e7861114a1083571afd5f4093c052

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 32503f35f3c6be8727587889364c704aea3d256879577581a9fccd2d05bae4f6
MD5 c4572f6e7c5019fbc06e6e93a11e3a37
BLAKE2b-256 566ea096da3954857a7627317069dbfcee0fd2d5c1688eb6ed012f719b15df8b

See more details on using hashes here.

Provenance

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