Development
How to work on appimage itself - set up an environment, run the checks,
and build an actual AppImage from source to confirm a change works.
Environment setup
Everything runs through Hatch environments;
nothing needs installing globally beyond pip install hatch.
git clone https://github.com/ssh-mitm/appimage.git
cd appimage
hatch run lint:check # creates the lint env on first run
Running tests and lint
hatch run test:run # pytest tests/
hatch run lint:check # pytest + black + bandit + ruff + flake8 + pylint + mypy
lint:check is what CI runs (hatch run +py=<version> lint:check across
the Python 3.11–3.14 matrix) - a change isn’t done until this passes.
Building an AppImage from source
The fastest way to confirm a change actually works end to end is building
the minimal example project in examples/myapp/ with your working copy of
appimage.ctl, rather than a published release:
hatch run appimagectl --project-dir examples/myapp
./examples/myapp/dist/myapp-x86_64.AppImage
hatch run appimagectl runs the appimagectl console script from
inside the lint/test env, which has your checkout installed - so it
picks up local changes to appimage/ctl/ immediately, no reinstall step
needed. If you only need to see what would be built without actually
packaging anything, use check instead.
For a change that touches build output determinism specifically (bytecode handling, mtime normalization, appimagetool/runtime resolution, or the build-path scrubbing that keeps output independent of where the checkout lives), build twice and diff:
hatch run appimagectl --project-dir examples/myapp
mv examples/myapp/dist/myapp-x86_64.AppImage /tmp/build-a.AppImage
rm -rf examples/myapp/build examples/myapp/dist
hatch run appimagectl --project-dir examples/myapp
sha256sum /tmp/build-a.AppImage examples/myapp/dist/myapp-x86_64.AppImage
Matching hashes confirm the change didn’t introduce new non-determinism - see Reproducible builds for what this actually guarantees and why it’s non-trivial for AppImages specifically.
Building the documentation
hatch run docs:build # sphinx-build docs build/html
This package’s own PyPI wheel
Development environment and AppImage-output reproducibility above cover working on the tool. The tool’s own release artifact - the wheel published to PyPI - has a separate, narrower reproducibility story: