Quickstart

From PRISM app
to running binary.

Two commands take you from source to a live, self-contained app: build exports your PRISM app to a portable bundle, serve runs it from a 1.8 MB binary. No Node, no V8 cage, no platform.

terminalCopy
# build your PRISM app to a self-contained bundle
bext-lite build ./app -o ./dist

# run it - 1.8 MB binary, no Node, no V8 required
bext-lite serve ./dist --port 8080
Install

Get the CLI

One static binary. Install it with cargo, or grab the release script.

bashCopy
# install the bext-lite CLI
cargo install bext-lite

# or grab the latest release binary
curl -fsSL https://lite.bext.dev/install.sh | sh
The flow

Build, serve, develop, ship

Four steps from a PRISM source tree to a binary you can hand to anyone.

1

Build the bundle

AOT-export your PRISM app to a self-contained dist/: a route-table manifest.json, a bundle per page that defines __bextPrismRender, your API handlers, server actions, island runtime and static assets. The output is sha256-identical to what the bext server emits.

bashCopy
bext-lite build ./app -o ./dist
2

Serve it

Run the bundle from a 1.8 MB, v8-free binary with a hand-rolled HTTP/1.1 server: static assets, dynamic routes, 404s and ISR - single-tenant and fast. Cold renders land around 20 ms, warm ones in sub-millisecond. No Node, no V8.

bashCopy
bext-lite serve ./dist --port 8080
3

Develop with hot-reload

Point the dev loop at your source tree. Edit a page.tsx, a route.ts or an island and the change shows up instantly - no rebuild step in the loop.

bashCopy
bext-lite dev ./app
4

Package for a target

Same source, same exported bundle - pick the shape that fits. Each target wraps the bundle in its own host: a static binary, a signed desktop installer, a QuickJS-on-WASM edge module, a fully-client browser build, a mobile app or an ARM board image.

bashCopy
bext-lite build ./app --target native    # single static binary
bext-lite build ./app --target desktop   # .dmg / .msi / .deb / AppImage, signed
bext-lite build ./app --target edge      # QuickJS-on-WASM for Workers / Fastly
bext-lite build ./app --target browser   # fully-client, offline-first
bext-lite build ./app --target mobile    # iOS + Android
bext-lite build ./app --target aarch64   # IoT / embedded ARM
The output

What's in dist/

A flat, portable folder you can copy anywhere and serve. Nothing in it depends on a build tool.

PathWhat it holds
manifest.jsonThe route table - static, dynamic and API paths mapped to their bundles.
routes/*.jsOne bundle per page, each defining __bextPrismRender(props) -> HTML.
api/*.jsCompiled route handlers - GET / POST / PUT / DELETE per endpoint.
actions/*.jsServer actions, callable from forms and islands.
islands/*.jsPure-browser island runtime - hydration is free on every target.
public/Static assets served verbatim - images, fonts, favicons, robots.

The exported dist/ is sha256-identical to the bundles the bext server produces for the same app. What you test locally is byte-for-byte what every target ships.

Reference

One CLI, five commands

Everything bext-lite does, at a glance.

CommandWhat it does
bext-lite build ./app -o ./distAOT-export a PRISM app to a self-contained dist/ - sha256-identical to the server.
bext-lite serve ./dist --port 8080Run the bundle from a 1.8 MB v8-free binary - static + dynamic routes, 404s and ISR.
bext-lite dev ./appLocal hot-reload loop - edit source, see it instantly.
bext-lite new --template <name>Scaffold from a starter app. Browse them under Templates.
bext-lite build ./app --target <t>Package per target: native, desktop, edge, browser, mobile or aarch64.

You're ready to ship

Start from a template or wire up your own app - then export once and run it on every target.

Browse templatesRead the docs