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
uvxyreads the arguments from left to right, and finds the command.uvxyreads the mapping for that command fromuvxy.toml.uvxyinserts--from <spec>directly before the command.uvxyreplaces its own process withuv 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.mddefines 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)
| File | Size | Uploaded | |
|---|---|---|---|
| uvxy-0.0.1.tar.gz | 56.7 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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