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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

toolr-0.22.1-py3-none-macosx_11_0_x86_64.whl (4.3 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

toolr-0.22.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.22.1.tar.gz.

File metadata

  • Download URL: toolr-0.22.1.tar.gz
  • Upload date:
  • Size: 261.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for toolr-0.22.1.tar.gz
Algorithm Hash digest
SHA256 2ce4d85c17a24df13729100df15ad43807861cf610da60370703f38eb58e8034
MD5 d2f6f258396ff3d00bb2074c1d2e1437
BLAKE2b-256 39073682d124292b2d93676c037dc5b3134d2971ddae68f653a03f7287f7b8fb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: toolr-0.22.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.22.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 9cb97804324d01bb77bbe1837468b20e60d2e17423e1fbdbb53234f81ac13c1c
MD5 4ba040f7f715e612d9a7697bb0865f4a
BLAKE2b-256 d7c6eec41ac2107d83266a6aa891a4d2b06a8e86905a494381e9530e588c0e0f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.1-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0521f54b4677fb3a668bd9adcb4ffbe83e73ba70ffafa5452c19f414ec8720df
MD5 217fe23b1abd0d3d61cff3ca7da02ab9
BLAKE2b-256 6121efc9d55d923e2a9a515dbb45d53690749fdd2d4df07eb748227653de8f77

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.1-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7908cf8d3b7f444f76935a1ad67c32d8fa0bed08ab64cb286f31a6c36454191f
MD5 41e68ad661a7e32ae81e037bb8ab38e8
BLAKE2b-256 e4189bc9061a68b9d02652ef4d5a48dfcb6378bbd37692a3721bdecc9c6c3116

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c4c66e532b98f021cfacad8a8bd6c85d6a52a264f12dc4c9b03c01a863714dc0
MD5 f0440146161f2572c42eff12ffd5bc52
BLAKE2b-256 6dc91dfc95c8966ab4e5750973f5563d98bfcd141dcbdca889caa25fd545e576

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 57d488e001eb308733cdeb8b734b09fd45f7da7a2f14e54befcf14d3709979c8
MD5 17c1f3fc2af7a30c9715e884d3fc3392
BLAKE2b-256 aff7f8fa39b56f9395b97e0c63063852eb33657811e368b3e861d0b0a22866c2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.1-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 5c734802ba589d17422606c6b6dd46d8e956cad99538c12ee6922c9e14d270a4
MD5 e27426c7b13b2d65eb2d8cd770bdbc89
BLAKE2b-256 7477e17f5b6797a124960dfb7430d90481300592042e692d3dc97bd628566048

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for toolr-0.22.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6bba7142cf23f0bb0c5d783b156f58c7667baa8c0af5f6eb3501232baa50a3ee
MD5 7efc5817c5bc99672afe22cb83d8d047
BLAKE2b-256 3bc9b533d49c5473d7936215e69ac6225e32a60fa36f551079622247c27f003c

See more details on using hashes here.

Provenance

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