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 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.24.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.24.1-py3-none-win_amd64.whl (4.1 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

toolr-0.24.1-py3-none-musllinux_1_2_aarch64.whl (4.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

toolr-0.24.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.24.1.tar.gz.

File metadata

  • Download URL: toolr-0.24.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.24.1.tar.gz
Algorithm Hash digest
SHA256 7c805d428f1eed0fa3020623161b80fbd6d5166499e50fc60dbcd11e38cdbb9a
MD5 6cb9b76dfb1700f4479a2b22b8a6a15a
BLAKE2b-256 ee9dce1ade3fbb5f0648dd2892e14ac02905093d0ed00acd17de60772b391fcd

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: toolr-0.24.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.24.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 ff48de592356e9a7947e4aefc97ac9f580824176e9453d9ecdf2b706461b2498
MD5 b1993acfbcfe06b39fd5e19e4d23ec6c
BLAKE2b-256 6c4dea73bca518a3e400f787ec35cea1f9c4cbc42a85549aabca8704c56c65a6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.24.1-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3f4ad8024b04bc6d65e01fd943f68620f33f51ca6e83d8b379142cf41cc8514e
MD5 5128f58c355564d225dea2716bd09a4c
BLAKE2b-256 53f37c254d5f91169bcb5ac3456fff875a34fe138b4d00834d28595e788820ef

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.24.1-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 cb1a1aaad4c57765971583d420ef5f0b9e28ef7a0cdfdcce1f01a68ca4428ac1
MD5 2fc50be99e7f966df42daee94c4fe63c
BLAKE2b-256 5bce2a470d97d311bdbb79d9e4b20c55ae96ea2970849ef4fac39e9eba03898c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.24.1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3ff5b456599f3a1f4d1a54e7cdbbdbfc655b1bece358f66c983703eea754af6e
MD5 ae2d753e1572d03a58f5d66daf939713
BLAKE2b-256 7f9467c1197b3190e172644b9150ab44a33d19b4ec739cb37220d2cf7baf7a8b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.24.1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c9379f1128950382541ec24fd5ab7351d78059828ee69729591b4e115d7067d9
MD5 9f69ccea0818dd4081b4c8c0b9c69e5e
BLAKE2b-256 0a3758f72c1b621f12ce1a9604c221d1b62c4d46be873d33af98a416f9668070

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.24.1-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 f7019236a4cecf4741d4d2c010db059532a0fd52fc0f81d7ec81f2b98fb4d4de
MD5 481ee0b4b096dc1e0098c9f5a0dabb3d
BLAKE2b-256 2ab7abb578ff629a5e1db8de07cdcf28f2ea748e0c3e6c0e16e60a93c3f7e461

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.24.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f74ebcfbfe854d39676a7d2a63142bc20b7eb34876e8944e721ea1f15e0ea8b4
MD5 38e4ba6ce0a814eb345eb946bb99bf5f
BLAKE2b-256 5509b8565a1d03d861b1ff0eb8c4cf0b4ca091b7b8ff9e5178873c309a3f8e04

See more details on using hashes here.

Provenance

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