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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

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

Uploaded Python 3macOS 11.0+ x86-64

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

File metadata

  • Download URL: toolr-0.21.1.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.1.tar.gz
Algorithm Hash digest
SHA256 7336a65d52dfdf4ea49e80b9794fc9fc83eaf00fde62001f8cfe0d0e4a332122
MD5 fdb0cb10c9867030828e5073d0c743a1
BLAKE2b-256 f8947449cf5a5078599f5fb3e28999a3dcd534d73c214444ea1311d84ff1a65a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: toolr-0.21.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.21.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 b3681ad13b57a7c6301f7ef7dec33e9adca80a16ac05d230ff652310eacb0c03
MD5 aab38dd8e5f0993b496c34540721feff
BLAKE2b-256 f8e49e4dffbf73dfee7d4a7860ba699430d64cefef4d64873a0c24294282f6d3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.1-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ac1363aa2f0829695359cff88013e2da1ec53ff29a86614531488cd7efc82c78
MD5 41b146401876f428467bb45ae3bf83eb
BLAKE2b-256 2ce19f5b87dd6b07691ee633c12ebb55f803d4759b906f31084ec96a78a57363

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.1-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d85de25a600aef400ea0a6d27c91409e3fbd9825c286321b434b8a8d659641c6
MD5 1c3b9e7a8b19af03ef2bf5d0a4c09ebc
BLAKE2b-256 fa5f53f968671c9a7fd98880bf6770dcfa09d108de0e40622ce838cc90188002

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7e23828d8b78c5364757aa905e05991a8300214b10d5bc4820f28f89cd2486a0
MD5 4d7c6534cb30e8cacef3b101ce1529ae
BLAKE2b-256 6f64706e7ef67fb7f4a65d94f56c4c2e80f15f7773ec63127a49cfd5f9c1b08a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a4fb3cda877b5eeba86f04fc45611386d1770356ac92c912d547fbb861e2d7f7
MD5 41451fcc3c42d1cae39b556c2b1fd175
BLAKE2b-256 7503b57f2bd854745a7d3ac73b2ef8e950940b847f6770a9cb85be5596bcba5d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.1-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 5b23a0cc863e5f66445981eb6c2805c236980fb55ea560105392ec08eafb8834
MD5 b7cd4ed531f92697b6555bbe857952f6
BLAKE2b-256 1b71e3c11a02837bf791b16328803a219d8b5a28ffa2b6bbcf5cef7ea852e3b8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.21.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5112838e3980fcf3b36a47fb529df199b7c63d8bdba77833cfa518ec1019177
MD5 bb5bf282455107c640eb775f79383f58
BLAKE2b-256 948847a951492a5fb2a79387a890bc7041299d38c88eb618988c2c2cc49127f2

See more details on using hashes here.

Provenance

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