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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

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

File metadata

  • Download URL: toolr-0.20.1.tar.gz
  • Upload date:
  • Size: 247.5 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.1.tar.gz
Algorithm Hash digest
SHA256 14ff56c7324c5d0a47d4a6a3ca992c6f353b049b114fa48a73738c35049a1fa2
MD5 9bacaf632747ee5b473b3a237b43ab53
BLAKE2b-256 058d9dd4e308dfd5eab254de397d455977264216789c2db59d40fe97f75b3619

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: toolr-0.20.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.20.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 cbf84c9d82b4f08ca3c2e880813e2aadffb84afb9b5aee32a2b8dfa232b718ef
MD5 73f3cc3cb86c258012549e545c78b0fc
BLAKE2b-256 7bc5d0ae5fde1229da1f4da94167c5eb026e0efb01b9425433044b5e44638ea7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.1-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4a0338353dc3a881167235dbf065138c9a639ee5b941a56e4ce56930f72a0edb
MD5 95a85a5744ea5bdcfb7556b08e02f9e0
BLAKE2b-256 40c408d51f03ee23fe5bb4d38ba9e660f0263cba2f8c387a21a7db8a5cec31ac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.1-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f0a9c67df2c59690d2e9173645f72aaffb44d0775aa0091315d577323e98326f
MD5 dbb8de69cb137241655f23f7c68e9a5b
BLAKE2b-256 e6b1273bdbb2af8ea6ef18cbbb53d171bccef5bfa16cd360824d77aedc7fa437

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4fa68412267d8b94ecf0a422d64d168d8a5f931c7efd3b6fb0bcc11d6871b0a5
MD5 025ee34387c114d019dc518e7aa4d83b
BLAKE2b-256 dd145529bd0525a567969aad38bb4449ed91d5410354d907bf3dd350b57c5339

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2731665f1156915cf3f74da35293d456a08597f6d59186b26fa347087e5acbb8
MD5 a7a7cc9f46baa2254a33b250c6c19d8a
BLAKE2b-256 cceb8770f522ecd3b2f4082a0488054aade658506023b88c394b7cef7b2b2797

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.1-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 db708b36aec05c9232c7aaad9eb3a2e45a868c8632dca0e8b49ca9468b5e454c
MD5 82b9f170f70144719b287cec21584846
BLAKE2b-256 a956fbf9fbdeec326fcaaaf60d9dda839c2810360a8ea248e53efb6133690582

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.20.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4ce4bb28e0d661b2f7e8efce9ecbb7cdaaa1a59681fac8dbb739246348e5b1e
MD5 d784fc7a5533b7618d06be8b1c1cee07
BLAKE2b-256 46f07acf6128ee5d8a9e687a2ab67eb3ca53f54c1f85098b1653646cb15dd760

See more details on using hashes here.

Provenance

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