Zero-friction Python app compiler: ship any Python project as a self-bootstrapping single-file binary.
Project description
Axe
Axe ships your Python app as a self-bootstrapping single-file binary — for every major platform, from any machine, with zero extra toolchain.
- App developers need no Go, no cross-compilers, no Docker. Axe's wheel
ships precompiled runtime stubs;
axe buildjust glues your app onto them. - App users need no Python and no uv. The binary bootstraps a cached environment on first run (uv installs Python and your app) and is instant on every run after — the same runtime contract as pyapp, uv-first.
Quick start
Your project needs to be an installable package with a console script — a
project created with uv init --package is already set up correctly (a bare
uv init app is not packaged; axe build will tell you what to add):
$ uv init --package mycli
$ cd mycli
$ uv add --dev axe
$ axe build --all-platforms
built dist/bin/cowsay-0.1.0-linux-amd64
built dist/bin/cowsay-0.1.0-linux-arm64
built dist/bin/cowsay-0.1.0-darwin-amd64
built dist/bin/cowsay-0.1.0-darwin-arm64
built dist/bin/cowsay-0.1.0-windows-amd64.exe
Hand the binary to anyone:
$ ./cowsay-0.1.0-darwin-arm64 hello
setting up cowsay 0.1.0 (first run)...
done.
_______
< hello >
-------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
How it works
axe build builds your project's wheel with uv, then appends it — plus a
small JSON config — to a precompiled Go runtime stub for each target platform.
Building is byte concatenation, so cross-"compiling" all platforms takes
seconds anywhere.
At first run the stub downloads a pinned uv (checksum-verified, cached across
apps), lets uv provision the pinned CPython, installs the embedded wheel into
a per-app environment keyed by payload fingerprint, and hands off to your app
(execvp on Unix). Subsequent runs are a single existence check.
Configuration
Everything is optional; defaults come from [project]:
[tool.axe]
entrypoint = "mycli" # default: the sole [project.scripts] entry
# also accepts "-m pkg" or "pkg.mod:func"
python = "3.12" # default: lower bound of requires-python
uv-version = "0.10.6" # uv the runtime bootstraps
expose = ["metadata"] # extra `self` commands: python, python-path,
# cache, metadata — or "all"
CLI
$ axe build [PROJECT] [-o DIR] [-p OS/ARCH]... [--all-platforms]
$ axe platforms
Targets: linux/amd64, linux/arm64, darwin/amd64, darwin/arm64,
windows/amd64.
Runtime management commands
Built binaries reserve one command group, self; everything else goes to
your app:
$ myapp self remove # wipe the installation
$ myapp self restore # wipe and reinstall
$ myapp self update # reinstall from the embedded payload
AXE=1 is set in your app's environment so it can detect axe installs, and
AXE_DEBUG=1 makes the stub verbose.
Developing axe itself
This is the one place a Go toolchain is required:
$ python scripts/build_stubs.py # cross-compile runtime stubs (needs go)
$ uv run pytest # unit + end-to-end tests
$ cd runtime && go test ./... # runtime unit tests
$ uv build # the wheel, stubs included
Design doc: docs/superpowers/specs/2026-07-07-axe-design.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file axe-0.1.1.tar.gz.
File metadata
- Download URL: axe-0.1.1.tar.gz
- Upload date:
- Size: 12.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc2537ba8f4b44e77ed20f2cef8f971ec2c730cd85f99dee2b2e7dcae1153367
|
|
| MD5 |
31eddd029579842563ce011a5e9cbce0
|
|
| BLAKE2b-256 |
ade38c62be00c946293906b87495aef918274450db68208afb770a750cb58008
|
Provenance
The following attestation bundles were made for axe-0.1.1.tar.gz:
Publisher:
publish.yml on soasme/axe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
axe-0.1.1.tar.gz -
Subject digest:
fc2537ba8f4b44e77ed20f2cef8f971ec2c730cd85f99dee2b2e7dcae1153367 - Sigstore transparency entry: 2106123736
- Sigstore integration time:
-
Permalink:
soasme/axe@50b352174f2b095ef3c8e0bc75baaf416551111d -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/soasme
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@50b352174f2b095ef3c8e0bc75baaf416551111d -
Trigger Event:
push
-
Statement type:
File details
Details for the file axe-0.1.1-py3-none-any.whl.
File metadata
- Download URL: axe-0.1.1-py3-none-any.whl
- Upload date:
- Size: 12.6 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f87a165de79887ffd5f496668d34b824346b54a15005e677018182bb71ff7cfe
|
|
| MD5 |
2e16fb96c48fd4e41129cea477882b87
|
|
| BLAKE2b-256 |
a45b3dfc61a03d6cad2fb4e372a658f83d84e13dd4bc45b00a60241ff4ea4132
|
Provenance
The following attestation bundles were made for axe-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on soasme/axe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
axe-0.1.1-py3-none-any.whl -
Subject digest:
f87a165de79887ffd5f496668d34b824346b54a15005e677018182bb71ff7cfe - Sigstore transparency entry: 2106123981
- Sigstore integration time:
-
Permalink:
soasme/axe@50b352174f2b095ef3c8e0bc75baaf416551111d -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/soasme
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@50b352174f2b095ef3c8e0bc75baaf416551111d -
Trigger Event:
push
-
Statement type: