Skip to main content

uvxy

uvxy runs uv tool run, and it supplies the --from argument.

The problem

uvx infers a package name from the command you type. Many packages install a command under a different name. uvx sphinx-build therefore fails, because the package is sphinx and the command is sphinx-build. You must type the package name every time:

$ uvx --from sphinx sphinx-build docs build

uvxy reads that --from value from a configuration file:

$ uvxy sphinx-build docs build

uvxy is a drop-in replacement for uvx. It accepts every uvx argument, and each argument means the same thing.

Install

$ uv tool install uvxy

uvxy is a Rust binary. PyPI ships it as a wheel for each platform. The wheel contains no Python code, and uvxy needs no Python interpreter at run time.

Configure

Create uvxy.toml in the uv configuration directory:

Scope Path
User $XDG_CONFIG_HOME/uv/uvxy.toml, default ~/.config/uv/uvxy.toml
User %APPDATA%\uv\uvxy.toml on Windows
System /etc/uv/uvxy.toml
Override $UVXY_CONFIG_FILE

The user file wins over the system file, one command at a time. $UVXY_CONFIG_FILE replaces every other file.

uvxy.toml sits beside uv.toml in the same directory, and it is a separate file. uv validates uv.toml against a closed list of keys and rejects an unknown table, so a [uvxy] table in uv.toml would break every uv command on the machine.

uvxy does not search the working directory or any parent directory. uv tool run reads the same three sources and ignores the working directory, and uvxy copies that behavior. A command therefore means the same thing in every directory.

Example

Copy this table into uvxy.toml:

[commands]
aws = "awscli"
ansible-playbook = "ansible-core"
chardetect = "chardet"
f2py = "numpy"
fab = "fabric"
http = "httpie"
markdown_py = "Markdown"
pip-compile = "pip-tools"
pybabel = "Babel"
pygmentize = "Pygments"
rst2html = "docutils"
sphinx-build = "sphinx"
sqlformat = "sqlparse"

ansible-core provides the ansible-playbook command. The larger ansible package provides the community collections, and it depends on ansible-core. ansible-playbook = "ansible" therefore also runs. uv finds the command in the dependency, and it prints a warning each time. Use "ansible" when you need the collections, and accept that warning.

uvxy reads one table, and that table is commands. uvxy reports an error when the file holds any other name. uv applies the same rule to uv.toml.

Each key is a command. Each value is a package spec. A package spec is the value that uvxy gives to --from, so it accepts any requirement that --from accepts, including a version:

[commands]
mytool = "acme-mytool==2.1"

uvxy matches a key exactly. It does not normalize the key.

Pin a version on the command line

Write command@version. uvxy reads the mapping for command, and adds the version to the package spec:

$ uvxy mytool@1.2      # runs: uvx --from acme-mytool@1.2 mytool

uvxy exits with an error if the package spec already carries a version.

The --uvxy- flags

uvxy sends every other argument to uvx without a change, so uvxy --help prints the uvx help. uvxy reads its own flags from the --uvxy- namespace. uv will never ship a --uvxy- flag, so uvxy can add a flag later and shadow no uv flag.

Flag Result
--uvxy-help Print the uvxy help
--uvxy-version Print the uvxy version
--uvxy-explain Print the command that uvxy would run, and run nothing

Use --uvxy-explain to see the result of a mapping:

$ uvxy --uvxy-explain sphinx-build docs build
/usr/local/bin/uv tool run --from sphinx sphinx-build docs build
command: sphinx-build
mapping: sphinx-build = "sphinx"
source:  /home/you/.config/uv/uvxy.toml
config:  /home/you/.config/uv/uvxy.toml

uvxy --version fails, because uvx rejects --version today. Type uvxy --uvxy-version instead.

uvxy reads a namespaced flag only before the command. uvxy mytool --uvxy-foo sends --uvxy-foo to mytool.

How it works

  1. uvxy reads the arguments from left to right, and finds the command.
  2. uvxy reads the mapping for that command from uvxy.toml.
  3. uvxy inserts --from <spec> directly before the command.
  4. uvxy replaces its own process with uv tool run.

uvxy changes nothing when no mapping names the command, and when you pass --from yourself.

Step 1 needs the arity of each uv flag. uvxy --with sphinx-rtd-theme sphinx-build contains one command, and a rule that takes the first argument without a leading dash returns sphinx-rtd-theme. uvxy therefore runs uv generate-shell-completion and reads which flags take a value. It caches that table under $XDG_CACHE_HOME/uvxy/, or under %LOCALAPPDATA%\uvxy\cache on Windows. The cache key is the path, the modification time, and the size of the uv binary.

Documentation

  • docs/adr/ records the decisions and the rejected alternatives.
  • CONTEXT.md defines the terms.

License

MIT

Metadata

Release files for uvxy 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for uvxy 0.0.1
File Size Uploaded
uvxy-0.0.1.tar.gz 56.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for uvxy 0.0.1
File
uvxy-0.0.1-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
uvxy-0.0.1-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details
uvxy-0.0.1-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details
uvxy-0.0.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
uvxy-0.0.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
uvxy-0.0.1-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
uvxy-0.0.1-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 2.6 MB

Release files / uvxy-0.0.1.tar.gz

Download URL uvxy-0.0.1.tar.gz
Size 56.7 kB
Tags Source
SHA-256 checksum
How to use checksums
b229ca4830c2c081e46c6d487c1db848b7c776889f5ce4e19f4f92765add121d
BLAKE2b-256 checksum
How to use checksums
2334116564e47fae17af57df382872048d66898028f9184438b125d5fa576370
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / uvxy-0.0.1-py3-none-win_amd64.whl

Download URL uvxy-0.0.1-py3-none-win_amd64.whl
Size 295.9 kB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
7bf1663840b48f4513172c60772102aa03e89d0e90232fc6b2021112132896c1
BLAKE2b-256 checksum
How to use checksums
0edb767a87b7274fbe0960e0f668c4e17d3f2752f059a0c5a33d0ce1480d7e3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / uvxy-0.0.1-py3-none-musllinux_1_2_x86_64.whl

Download URL uvxy-0.0.1-py3-none-musllinux_1_2_x86_64.whl
Size 427.4 kB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
c4ac4ec67e6800bb81996651c5b48fed5dbff9b1097448d998d5f169467a6cfa
BLAKE2b-256 checksum
How to use checksums
d0dc3ac07771916aff8007e7795e58ec085da2b539929a2d357bb3f4939b2bb7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / uvxy-0.0.1-py3-none-musllinux_1_2_aarch64.whl

Download URL uvxy-0.0.1-py3-none-musllinux_1_2_aarch64.whl
Size 400.5 kB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
0ce1cf3dccccad0f04bca03c7279820dffd5bcf2d9c283ac520d662996b726f0
BLAKE2b-256 checksum
How to use checksums
b4e5b1217845b9e8bd57f02dc788a5ec683cec8674a38939585a35ad7be02fa1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / uvxy-0.0.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL uvxy-0.0.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 378.2 kB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
a7dea783a3f2735b75f63f575e502d8057a131360a592a71c6ecec8db2e81d25
BLAKE2b-256 checksum
How to use checksums
551c5c04d472f783adc91f482645a1a19bf43b61bd4eee8441602ff6da039215
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / uvxy-0.0.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL uvxy-0.0.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 358.0 kB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
687400e5d061ba936685932eb4cdf02975214fbd204ee633e91be1878eb10436
BLAKE2b-256 checksum
How to use checksums
1b94f744c92b30549349ac4294441ffa1b0652fa0df1cd297abdb3a76017a446
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / uvxy-0.0.1-py3-none-macosx_11_0_arm64.whl

Download URL uvxy-0.0.1-py3-none-macosx_11_0_arm64.whl
Size 349.5 kB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
83b8a752224f1898b8216df7ccbd4a1b29ec9078e368cf4d649dba7473c943ac
BLAKE2b-256 checksum
How to use checksums
c26bbd2f6dd56f0e5d0e1ca079d6053c0a2be23d82846c952540d6bc70103695
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / uvxy-0.0.1-py3-none-macosx_10_12_x86_64.whl

Download URL uvxy-0.0.1-py3-none-macosx_10_12_x86_64.whl
Size 364.4 kB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
4ec7ded571903cec270354a1e84d11418e15faac14730d38e6ac17df87bdcce9
BLAKE2b-256 checksum
How to use checksums
2f43ce9b7ef1966ee99a868278c11608d816172ac6c3291006644e23b19b0732
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.0.1 This release

8 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page