bext-lite : binaire unique
Une appli PRISM, empaquetée dans un seul exécutable autonome (~7 Mo) qui s'exécute nativement sur QuickJS — sans Node, sans Electron, sans dossier dist externe. Le même source vise le natif, le desktop, l'edge, le WASM, le mobile et l'embarqué.
Astuce
Vérifié de bout en bout :
sites/lite exporté → empaqueté en /tmp/myapp (7,1 Mo) → lancé sans argument de dossier → / et /targets répondent 200, rendu QuickJS en 12 ms. Hôte 6,27 Mo → empaqueté 7,1 Mo. Le format de charge utile est identique au repli « trailer » de Bun ; une variante section-ELF/Mach-O (boot zéro-I/O + signature) est prévue.Empaqueter & exécuter
# 1) export a PRISM app to a portable bundle (HTML + JS + assets)
bext-lite-build sites/my-app -o dist-lite
# 2) pack it INTO a copy of the bext-lite host binary (EOF trailer)
bext-lite pack dist-lite --out myapp
# packed dist-lite -> myapp (7.1 MB, self-contained)
# 3) run the single binary — NO dist dir, NO Node, NO Electron
./myapp --port 8799
# bext-lite: serving embedded app
# 12ms GET / -> 200 (QuickJS render)Comment ça marche
// Bun `--compile`'s EOF-trailer scheme: a content archive of dist-lite is
// appended to the running host exe, followed by [u64 len][16-byte magic].
// On boot the host detects the trailer, extracts to a content-addressed
// temp dir (path-traversal-guarded), and serves it on QuickJS in-process.
[ host bytes … ][ dist-lite archive ][ u64 LE len ][ \n--BEXTLITE1--\n ]