Skip to main content

ux

uv-based Python App Launcher - distribute Python apps as single executables.

Features

  • Single binary distribution - End users don't need Python or uv installed
  • Offline bundling - Embed Python interpreter and all dependencies; runs without internet access
  • Cross-compilation - Build for Linux/Windows from any platform
  • macOS .app bundle - Native macOS application with icon support
  • Code signing & Notarization - Distribute through macOS Gatekeeper
  • DMG creation - Professional macOS distribution format

Installation

Via uv (recommended)

uv tool install ux-py

Via pip

pip install ux-py

From GitHub Releases

Download from Releases

Build from source

cargo install --git https://github.com/i2y/ux

Quick Start

Basic bundling

# Bundle Python app into single binary
ux bundle --project /path/to/project --output ./dist/

Offline bundling

Bundle Python and all dependencies so the app runs without network access on the target machine:

# Embed Python interpreter and locked wheels (no internet required at runtime)
ux bundle --offline --project /path/to/project --output ./dist/

# Cross-compile an offline bundle for Linux
ux bundle --offline --target linux-x86_64 --output ./dist/

The Python interpreter is fetched from python-build-standalone for the target platform, so cross-platform offline bundles work from any host.

Cross-compilation

# Build for Linux (works from any platform)
ux bundle --target linux-x86_64 --output ./dist/

# Build for Windows (works from any platform)
ux bundle --target windows-x86_64 --output ./dist/

macOS .app bundle

# Create .app bundle
ux bundle --format app --output ./dist/

# With code signing
ux bundle --format app --codesign --output ./dist/

# With notarization (requires Apple Developer account)
ux bundle --format app --notarize --output ./dist/

# Create DMG for distribution
ux bundle --format app --codesign --dmg --output ./dist/

Configuration

Add [tool.ux] section to your pyproject.toml:

[project]
name = "myapp"

[project.scripts]
myapp = "myapp.main:main"  # Entry point

[tool.ux]
entry = "myapp"            # Optional: explicit entry point
include = [                # Optional: additional files to include
  "assets/",               # Include entire directory (trailing slash)
  "config.yaml",           # Include specific file
]

[tool.ux.macos]
icon = "assets/icon.png"   # PNG auto-converted to ICNS
bundle_identifier = "com.example.myapp"
bundle_name = "My App"

Included files

The bundle automatically includes:

  • Package directory (detected from [project].name, e.g., myapp/ or src/myapp/)
  • pyproject.toml, uv.lock
  • README.md, LICENSE (if present)

Use [tool.ux].include to add extra files or directories (with trailing slash)

Supported Platforms

ux runs on macOS, Linux, and Windows. You can bundle apps for any supported target from any platform.

Target Bundle PyPI
darwin-x86_64 ✓ ✓
darwin-aarch64 ✓ ✓
linux-x86_64 ✓ ✓
linux-aarch64 ✓ No*
windows-x86_64 ✓ ✓

* Linux aarch64 is available from GitHub Releases only.

Real-world Usage

  • bkstg - A serverless desktop Internal Developer Portal built with Castella

License

MIT

Metadata

Release files for ux-py 0.1.6

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

Source distribution (sdist)

Source distribution for ux-py 0.1.6
File Size Uploaded Provenance Actions
ux_py-0.1.6.tar.gz 43.6 kB With provenance Details for ux_py-0.1.6.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for ux-py 0.1.6
File Actions
ux_py-0.1.6-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details for ux_py-0.1.6-py3-none-win_amd64.whl
ux_py-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details for ux_py-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ux_py-0.1.6-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details for ux_py-0.1.6-py3-none-macosx_11_0_arm64.whl
ux_py-0.1.6-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details for ux_py-0.1.6-py3-none-macosx_10_12_x86_64.whl

Total release size: 10.8 MB

Release files / ux_py-0.1.6.tar.gz

Download URL ux_py-0.1.6.tar.gz
Size 43.6 kB
Tags Source
SHA-256 checksum
How to use checksums
75ff4fb6d7b7b73a3a076fb8c50fa3a8f473d5888044106100208649aeee4ae0
BLAKE2b-256 checksum
How to use checksums
898521d6bc0e8b83faf18e7cae704cdede2852bcc707c46138a598a8a1ee3f72
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 25, 2026.

Transparency log

Release files / ux_py-0.1.6-py3-none-win_amd64.whl

Download URL ux_py-0.1.6-py3-none-win_amd64.whl
Size 2.7 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
61c08e4894dafd5d489c4b1f5f88e08c2f20da1843db08de5fd1c59a5e62ab6e
BLAKE2b-256 checksum
How to use checksums
9bab26148ccdd2433f0d7d65d7ba537d3c9038b91981dd3359ce687b46db51ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 25, 2026.

Transparency log

Release files / ux_py-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ux_py-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.8 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
b6f4210533c544e34c4f23adf8e8a8bd9a47f86ed5993be69c508075f6d4be45
BLAKE2b-256 checksum
How to use checksums
ca2d7a851cbe06f9c336074352eac7db2276533382be7054a50aaaf9d70db7cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 25, 2026.

Transparency log

Release files / ux_py-0.1.6-py3-none-macosx_11_0_arm64.whl

Download URL ux_py-0.1.6-py3-none-macosx_11_0_arm64.whl
Size 2.5 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8600f95a4bdc03e29a1b2a03a86717309574ff4c899fc1cec307386487243dae
BLAKE2b-256 checksum
How to use checksums
11fa30660cc2abf0ac5905ab742941d8177c570133372489c32540eaec712ef0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 25, 2026.

Transparency log

Release files / ux_py-0.1.6-py3-none-macosx_10_12_x86_64.whl

Download URL ux_py-0.1.6-py3-none-macosx_10_12_x86_64.whl
Size 2.7 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
a5c2a91dce92a9ad036ddfa85b32e6117f6ba99291be3986e3fd79bb1060fd0e
BLAKE2b-256 checksum
How to use checksums
ed8ba2e7ce12a1678e04fa967806ed1baf9f5969de0e8a2694c3e1d08efc07b9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 25, 2026.

Transparency log

Security for ux-py 0.1.6

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.

Full provenance

All 5 files in this release have been uploaded with provenance metadata.

Select from 5 files

Attestation for ux_py-0.1.6.tar.gz

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 Mar 25, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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