Skip to main content

Distribution channels

Pylon ships through five channels. All bundle the same pylon.wasm under <prefix>/lib/, and the same pylon launcher resolves it relative to its own install path.

ChannelInstall
Homebrewbrew install tegmentum/tap/pylon
install.shcurl -fsSL https://pylon.dev/install.sh | sh
Tarballcurl -L https://github.com/tegmentum/python-wasm/releases/...
pip wheelpip install pylon
Dockerdocker run ghcr.io/tegmentum/pylon

Homebrew

Formula at packaging/homebrew/pylon.rb. Published to tegmentum/homebrew-tap.

brew install tegmentum/tap/pylon
pylon -c 'print(1 + 1)'

install.sh

Same shape as rustup / uv — a single POSIX-sh script that detects platform, downloads the correct tarball, and drops the launcher on $PATH.

curl -fsSL https://pylon.dev/install.sh | sh

Tarball

Native artifacts for macOS-arm64 and linux-x86_64 attached to each GitHub release. Extract wherever you like; put bin/pylon on $PATH.

curl -LO https://github.com/tegmentum/python-wasm/releases/download/v0.1.0/pylon-macos-arm64.tar.gz
tar -xzf pylon-macos-arm64.tar.gz
./pylon/bin/pylon -c 'print(1+1)'

pip wheel

pip install pylon. The wheel bundles the same pylon.wasm and launcher inside the wheel's data/ tree; console_scripts entry routes pylon on the terminal to a thin pylon.cli:main shim that resolves the sibling launcher.

# packaging/pypi/pyproject.toml
[project]
name = "pylon"
version = "0.1.0"
description = "CPython 3.14 interpreter compiled to WebAssembly (WASI Preview 2) — pip-installable launcher"
license = {text = "Apache-2.0"}

[project.scripts]
pylon = "pylon.cli:main"

Wheel code is Apache-2.0; bundled CPython retains PSF-2.0 (see THIRD_PARTY_LICENSES.md).

Docker

docker run --rm ghcr.io/tegmentum/pylon:latest \
-c "print('hello from a container')"

The Dockerfile at packaging/docker/Dockerfile copies the same tarball layout into a small base image and sets pylon as the entrypoint. Runs anywhere Docker runs.

Invariants across channels

All five ship:

  • The same pylon.wasm (sha256 recorded in caps-manifest.toml).
  • The same pylon launcher (packaging/bin/pylonpylon-launch).
  • The same cap set (every component in caps-manifest.toml).

The launcher resolves pylon.wasm relative to its own install path, so the four channels differ only in filesystem layout and how the binary lands on $PATH.