index
The builder has a landing page at tunaos.org/iso-builder and runs at https://iso.tunaos.org.
β οΈ Alpha β experimental preview; interfaces and limits below will change.
Build a live, bootable TunaOS ISO from any bootable container image β entirely in your browser. Nothing is uploaded anywhere: the registry pull, filesystem authoring, and ISO assembly all run locally in WebAssembly, using the exact same engine (tacklebox's pure-Go core) that TunaOS CI uses to build release media.
Live at: https://iso.tunaos.org
Screenshots below are generated automatically by the Playwright walkthrough (
prototype/iso-builder/e2e,npm run walkthrough) β if the app changes, rerun it and commit the refreshed images.
Quick startβ
-
Open the builder. You'll see the image input and an Advanced panel.

-
Enter a bootable container image. Anything OCI works as long as the image is bootc-style (kernel under
/usr/lib/modules):tuna-os/sailfin:baseβ a TunaOS image on GHCR (short form)ghcr.io/you/your-os:tagβ any GHCR image (fetched via the TunaOS CORS relay)quay.io/β¦/ other registries β fetched directly; works when the registry sends CORS headers

-
Inspect. The engine pulls the manifest, unpacks every layer in-browser (whiteouts and hardlinks handled like a real container runtime), and shows what it found: the desktop environment (detected from the image's session files), kernel version, systemd-boot presence, and file count.

-
Tune under Advanced (optional).
- Volume label β the ISO's
CDLABEL. - Flatpak preload list β a checklist prefilled per detected
desktop (GNOME and KDE have their own defaults; niri/xfce use
GNOME's). Untick anything you don't want, and use the Flathub
search box to autocomplete and add more apps. The final list is
embedded into the ISO as
/LiveOS/flatpak-preload.jsonfor the live environment to consume. - tbox initramfs URL β see Bootability below.

- Volume label β the ISO's
-
Build ISO. The ISO streams straight to disk (File System Access API; falls back to a regular download). The EROFS live root, FAT EFI system partition, and ISO9660/El Torito container are all authored in WASM.
Share a preset β URL parametersβ
The builder is deep-linkable, so any project can point users at a pre-configured build:
| Param | Meaning | Example |
|---|---|---|
image | image to pre-fill | ?image=tuna-os/sailfin:base |
autorun | 1 starts the inspect immediately on load (without it, params only pre-fill β a link never starts a multi-GB pull by itself) | &autorun=1 |
flatpaks | comma-separated app IDs replacing the default list | &flatpaks=org.example.App,org.mozilla.firefox |
label | volume label | &label=MYOS |
initrd | URL of a tbox-enabled initramfs to embed | &initrd=https://β¦/initramfs.img |
Example:
https://iso.tunaos.org/?image=ghcr.io/you/your-os:stable&label=YOUROS
The Share a preset link at the bottom of the page always encodes the current form state β click it to test, or hit Copy to share it.
Bootabilityβ
A live ISO needs an initramfs containing tacklebox's live-boot modules
(tbox-live β they mount the ISO, the EROFS root, and assemble the
overlay). Two paths:
- Supply a tbox initramfs URL (Advanced β initramfs URL): the ISO
is then fully live-bootable, identical in layout to CI-built media.
CI-published per-variant initramfs artifacts are planned; until then
build one locally (
dracut --add "tbox-live tbox-root"inside the image) and host it anywhere fetchable. - No URL supplied: the ISO carries the image's stock initramfs. It boots firmware β bootloader β kernel, but stops before the live desktop (the stock initramfs doesn't know how to assemble a live root). The builder shows a warning banner in this mode.
Current limits (MVP)β
- Memory: the unpacked image and the EROFS live in browser memory β base images are fine; large desktop images need the planned OPFS-backed store.
- Flatpak preload is a manifest the live environment consumes at boot, not a baked flatpak deployment.
- Registries other than GHCR must send CORS headers (most don't); GHCR works for any public image via the relay.
Testingβ
prototype/iso-builder/e2e holds the Playwright suite:
cd prototype/iso-builder/e2e
npm install && npx playwright install chromium
npx playwright test # UI + real inspect flow
npm run walkthrough # regenerates the doc screenshots
TBOX_E2E_FULL=1 npx playwright test # + full ISO build & PVD check
The iso-builder-e2e workflow runs the same suite in CI on changes to
prototype/iso-builder/**.
Part of the Tuna OS ecosystem.