Packaging
Packaging serializes a validated skin into one distributable file: <id>-<version>.po9-skin.
Package
Section titled “Package”npx po9-skin pack ./my-skin # → outputs/<id>-<version>.po9-skinpo9-skin pack validates first, then serializes. A skin that fails validation never becomes a .po9-skin.
What a .po9-skin is
Section titled “What a .po9-skin is”A .po9-skin is one UTF-8 JSON document — not a zip and not a folder. The pack command takes your source manifest.json + theme.css (+ optional image), embeds the image as base64, and writes a single JSON object with format, schemaVersion, manifest, css, and art. The full rules live in Specification → Document Shape.
Because it’s one self-contained file, there is nothing to keep together and nothing external to fetch.
Distribute
Section titled “Distribute”Share the single .po9-skin file however you like — a link, a release asset, or the future Gallery. Recipients import it via the PO9 app; the app re-validates on import.