Skip to content

Packaging

Packaging serializes a validated skin into one distributable file: <id>-<version>.po9-skin.

Terminal window
npx po9-skin pack ./my-skin # → outputs/<id>-<version>.po9-skin

po9-skin pack validates first, then serializes. A skin that fails validation never becomes a .po9-skin.

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.

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.