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 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.22.0.tar.gz (260.3 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.22.0-py3-none-win_amd64.whl (4.1 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

toolr-0.22.0-py3-none-macosx_11_0_x86_64.whl (4.3 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

toolr-0.22.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.22.0.tar.gz.

File metadata

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

File hashes

Hashes for toolr-0.22.0.tar.gz
Algorithm Hash digest
SHA256 de7a2264d5ef0f6e1249d4567cf86aa58007174e685f586eb9b8a97c03a402cf
MD5 a81dfc50e3773a343193ad8a4a94dcc0
BLAKE2b-256 fc62de61e52449785f2233a5ed67e10f964169eed90504c4af1aad987e98bada

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: toolr-0.22.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.22.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 292a39676b7877b5d90aa76412abf70a425030d03ac31b4e5ac1782d4e11cb95
MD5 0303e778578c3859c6786f301244a4d9
BLAKE2b-256 f9bc46eca5896175c882cee60b81bd3d42075a9baf33d6282432c6a568eb9dbd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 412bf659fe5c99d383c5f18b0a85b742cf884ac53c6333c72d3eb0fe1ceff2d4
MD5 ed6024517cad4b6b775e767d07f8d915
BLAKE2b-256 164416281f84bbce667303b41a397276aaaff1edb845f2dcc61b8ae432ef5f8c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5be8d922989a189ee68951d7b9c14f9961123dfad5d6ebb0878d48491883e3e8
MD5 462970b227a2619f5ca6040d333ad0ff
BLAKE2b-256 2eb2163614fd669af7d482dc5df6f4144b71cbde583a51f1b0e2b4d740bf7b5f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 258f311b620467cfea8b5218f56ef9927fa430c20b17fab953dcd4c7267f7d19
MD5 200bb6e6436fdc6250d34960f3adef6a
BLAKE2b-256 7e09e3ab21d537902a92f6c82deaf9b1f1821c763f64e840eb67987d8a911d74

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fe180964bcd72038f6ed4b51829fd29096a2414e40f2ac73a583cf76208981b1
MD5 0e24c9a8f8805b947aa651b2f7800f14
BLAKE2b-256 53ff605132b377dd352b6da267bf1dfe7806d19e10da653968561183e7ac1d83

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.0-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 7da861af537725e95a7afad06a409eca5cf6dfea4bbfbab4f4105e4573bd47be
MD5 fa015fb2271df6f7489d65df37a7f84e
BLAKE2b-256 866d16471cdedcd2830e911d29a1536f72314124f4bf2aca5da5daf3469c2844

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 637b49fdb42fb7b203ae1a5cc88ae430801f50fcddc19973520eaaa62905b96d
MD5 cf8e02b56b95aec6f8bb970bafc948c1
BLAKE2b-256 bdd131f2df2f7bd0db77363fa54ec4181096845c18f58691af62c347431c1617

See more details on using hashes here.

Provenance

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