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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

toolr-0.25.1-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.1.tar.gz.

File metadata

  • Download URL: toolr-0.25.1.tar.gz
  • Upload date:
  • Size: 277.9 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.1.tar.gz
Algorithm Hash digest
SHA256 d43ba659bb42faee346452cd59592df073ef37dcd665408a7155db9bc5ea3d6f
MD5 0d6859a2161463c818feba7c61dd6a67
BLAKE2b-256 7a7b38290f10f1cd2b9fc6d0148d2aa60096f33b8d0583c57edddb69f53966e0

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: toolr-0.25.1-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.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 95e3456310e554d248a3103e78eef4841b4839dba5dd608dd4784e56f85a8dd3
MD5 18a159a365404f30b3a9f0c2a005e3a1
BLAKE2b-256 2e381cb86ec0d97e34dcd7d98a3914db5984970f654f331af8cd056c05d6c049

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.25.1-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c81b7fed281991eea8a0666e239ca3ec64cc66f7d03f659db418d7b4148f9ba0
MD5 3ae0efbeba47c42c2e75d3d83c015380
BLAKE2b-256 03408556740c78b345c1b06e462e797727d96f3236b32dd394df91ee5c7171d9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.25.1-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 35d791cac423535b607d2ec93a2b04c3c105b53878b72628ed9d5b683d49e67e
MD5 2b185473a721df12e8c1366cd30fb6ca
BLAKE2b-256 f9a33ccb6d3a90f6070cd655439bbe34b6f91d8b8c1e0555f1ce1f55d0944f51

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.25.1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bd308a6f88dcaa9d22af8347cb7e6736b058893dc46b89293ef7440684fde7fb
MD5 862f1a5dae555ab7a844464e4b2fe028
BLAKE2b-256 cc52092f3a24ebb42480f47f0f5ed1bb4e5eaf83a8bd15e093a7c068d593ebcc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.25.1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1b78f789d963161d9bdc11222fa385e685983e03165e7048801344ad01b29978
MD5 bbb26a797272807db781e543cbd3f48f
BLAKE2b-256 ac3c6a32e223fd10ef478a2ac01f3cda2313e2cb9858fc52d107fa6babd1a67a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.25.1-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 46291f39fea69d16fc3b0f3c9c59c3b7bd0a3f2917df1aebb2d2c3ab2bb70ceb
MD5 5ca31eee947e25cc99faf259cf007b13
BLAKE2b-256 3517bfe5ba16835b17d2d659c4639c13edb33d06ce90aa6c4f7b2a97f9928306

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.25.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d22a7b1a4dff19f8e079c536f81bf2fb8acb686432c091dab7147c00a50aa910
MD5 959b25b2ba35d46b1d862d019632394b
BLAKE2b-256 6972fe1236b7fe07a55b05202017e6ad953d8b521ffa6a1bba9fe38dbd0e5a6c

See more details on using hashes here.

Provenance

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