appimage
The appimage module packages Python applications as self-contained AppImages.
It bundles a complete Python distribution from python-build-standalone, manages entry points, and supports virtual environments that extend the bundled packages with additional ones.
The bundled interpreter comes from python-build-standalone - the exact same source as
uv python install. What you develop with locally is what gets shipped in the AppImage.
Note
AppImage is a Linux-only format. Building and running AppImages requires Linux.
Supported architectures: x86_64, aarch64, armv7.
appimagetool is resolved automatically: the build cache is checked first, then it is downloaded (PATH is never searched). The same caching logic applies to the bundled Python distribution. Set appimagetool_sha256 in [tool.appimage] to verify whichever binary gets resolved - see Reproducible builds.
Install
python -m pip install appimage
Build
python -m appimage.ctl build
app, entry_point, and python version are detected automatically from [project] in your existing pyproject.toml - no appimage-specific configuration required. No pyproject.toml yet? uv init creates a minimal one in seconds. The .desktop file and AppRun script are generated automatically. If no icon is found a built-in default icon is used - add myapp.png to your project root to use your own.
The AppImage is written to dist/myapp-x86_64.AppImage (or the matching architecture name).
Check what was detected
python -m appimage.ctl check
Build configuration:
app: myapp [[project] name]
entry_point: myapp [[project] scripts]
python: 3.11 [[project] requires-python]
packages: appimage==3.0.0 . [default (.)]
icon: myapp.png [detected (myapp.png)]
desktop: (generated) [will be generated]
build_dir: build [default]
dist_dir: dist [default]
Reproducibility checklist (0/5 ready):
✗ AppDir reproducibility: python_date not set - run 'init' to resolve and pin it, or set python_dir
✗ Runtime module reproducibility: appimage_version, appimage_sha256 not set - run 'init' to resolve and pin them
✗ Packaging reproducibility: appimagetool_sha256, runtime_sha256 not set - run 'init' to resolve and pin them
✗ Dependency verification: pylock not set - run 'lock' to generate pylock.toml
✗ Build backend verification: build_pylock not set - run 'lock' to generate it alongside pylock.toml
None of that is required to build - see Reproducible builds for what each checklist line means and how to close it.
Write detected values to pyproject.toml
python -m appimage.ctl init
Adds only the auto-detected fields that are not already set - so you can review and adjust them.
Using a coding agent?
See For LLMs and coding agents for a dense reference - module map and the non-obvious invariants worth knowing before changing anything in this codebase.