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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

toolr-0.21.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.21.0.tar.gz.

File metadata

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

File hashes

Hashes for toolr-0.21.0.tar.gz
Algorithm Hash digest
SHA256 e3cf90643f41dce46cb9503b8ec3fcb18f4a3c016032c1bd05702ed18bb62c0e
MD5 33fa421215cf6c20bc02d8cb54f24638
BLAKE2b-256 4eac6be9ac9499677285b47dbc93518b590113172df92317748261df10ebdb9f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: toolr-0.21.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.21.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 2b6cfc005680e2f454e036f5a78762f45f497b311fd299018ec2bbdb3c5a4b9f
MD5 5a9c5ad12671885f7137fbe58261c919
BLAKE2b-256 2b9274f677fbfdc64fa2116698cbe3b466926b2a722518b15f0a74bf9b938e1c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0910a53c38706754267ed92b356b9a7566ad7ec80ef16693bc5cdec64791b49f
MD5 920665eb1b56a642aa058b8b6aa7e210
BLAKE2b-256 e07ca8179550ecb8d1c1ef33efe5a048b4624bb749161f7a20cdc11f2ace9163

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e1f0490213b969f8f8a41f4cc1b649349140cb7f1e0060505c78740ec8f0b00a
MD5 c971dbc531574431f7206327606bc90b
BLAKE2b-256 7c90b8e4c082d5ea4a09d6be763ea913d26237187a9ba96f3097e1daeaace2c3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d63cefa7ea3c02d31c9bb647e68ac9900aef03f8d0a78f93eb1e85c95c49879e
MD5 0412f12cff6ca1abc07a611d9393ccda
BLAKE2b-256 38866e8ea0ab11e80fc7b7a9d40f8e4e5c280f652b11ebb245e05e4858564285

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6fd701e93417b0688a219553743fb66402cf67a06c5a59eb55822171b50964e3
MD5 cab16a911e488850030eef0291fcf71b
BLAKE2b-256 813778c7c2092fb181eec305fe2416785b427ef05c7f14c38af3ffa890e1dbe5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.0-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 ed5f25084cf24251699041d6b003b22ed4a4d460663fe704e64e6956b1e1742e
MD5 338298a0639bd1e96129db78d4e8561d
BLAKE2b-256 66deb41133973cc4844d4a9e9edf647dd5e460ceef20f39b47cbd151301490ea

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d456402ed49d6b6941b5f60763b98701ffb5a3c2bffd7747fca0e68ff8834fc
MD5 c4b514ac5364a99ada766b0fc01048ce
BLAKE2b-256 302814d7737786407fa6e47bc7489087aea0298e75ec865ae76265df0f2552e8

See more details on using hashes here.

Provenance

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