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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

toolr-0.23.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.23.0.tar.gz.

File metadata

  • Download URL: toolr-0.23.0.tar.gz
  • Upload date:
  • Size: 263.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.23.0.tar.gz
Algorithm Hash digest
SHA256 917b7492971f34181cef7dc67a1d387485776af1f701367b2454404ff5ad5010
MD5 e5b9a6e8567d9e5c55b89645f088078b
BLAKE2b-256 a3e70bc8aced0666e78c4cfd49c4c10d2bdb4de5655faff24de9b3971238c883

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: toolr-0.23.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.23.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 5411a398327467a07f7e40003edb9c4efeccc1843237354a02f38a05daa3f9fb
MD5 4368ad0f6d9a10862688851159a0d64e
BLAKE2b-256 65f3fd56d82da7a8cd6a719375de83b29131d6b0e8cbadcf3924c037867b3189

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.23.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 08c120dff07193dd39f64c11156353bf7a700e09cdc5f9d863d0b4fbe85d70ab
MD5 61e9583c6bd2c8ec861b62f66e3d793d
BLAKE2b-256 5986febc7885186f02231e54bedfaa795edbd8882278dd82d391e5c2f922ce56

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.23.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 be8a9c8c90f05fdbb1f888ffa8fec9b9c7299dc94a9cc956012581670d162875
MD5 da4eba672a455f7f1e55a2bc89cceab9
BLAKE2b-256 9381b1b6a2e609a1c434340ee5152ac1aa1f1f0f435d3299f378523b5b2a6765

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.23.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 25db9f1c331da1ff8941faee380ea3a9b26182cabf02190c688ceac7d713b5fe
MD5 311f6f7eb7f00d735874091fce8fcfba
BLAKE2b-256 53f13aa1cf2a2e657ab221137b2dbe7ce4cb443e7a1fc8954254f0f5f9db3964

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.23.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 69b07637f69e55f6df9b40832ce2cd30319fd8b078162d274a74211639df3098
MD5 adee343346a0b1f0d74bbed685cda178
BLAKE2b-256 98af9309af5114d54a137d9cb84756509b1bdd95d0075e9da2a09130cbf01f49

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.23.0-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 9075f729ba06d8153d3cddf5d10bcfbafff3a25ad8c38c24a5b7c5163e263bf4
MD5 c326d51cb3b3cd3df154986faf7dda0b
BLAKE2b-256 b3150f740dd2a343657872335ab7f590f8b592ce138b85aeddd1b0492b85f690

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.23.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03fdbaf5f2cf6689eeeae39a701ec27d32885adc1c73aebd2c9802eda307e8c6
MD5 437b4dba2610b24a0424ed9bbdaba042
BLAKE2b-256 55dc81ceb88ec3d52604cc78dcaa341bd50048e25ea42751fc7b65d76231bfbb

See more details on using hashes here.

Provenance

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