Create the native starting point
npx @getforma/create-app@3.0.0 my-app --template minimal
cd my-app/admin
npm ci
npm run build:ssr
cd ..
CARGO_BUILD_JOBS=3 cargo run --lockedThe first command creates a new project. npm ci installs its locked frontend dependencies; build:ssr produces browser assets and FMIR; cargo run --locked compiles and starts Rust with those assets. Open http://localhost:3000: the native counter should already show 7 in the response, then respond to a click. You are running locally at this point, not publishing a site.
This scaffold is a fresh native starting point, not an automatic deployment of your playground or Field Notes edits. Transfer one interaction at a time and declare request props explicitly. Keep your existing Field Notes project to retain its save behavior and data.
What goes together
Build the frontend before compiling the Rust server that embeds those assets. Ship the manifest, native modules and browser bundles produced by the same build. A server binary containing yesterday’s manifest is not updated by uploading today’s JavaScript.
Try a concrete packaging reference
Download the complete developer-platform source and inspect its Dockerfile. The download intentionally excludes the newspaper’s protected story. In the extracted source root, first create native/private/article.txt with your own nonempty fictional article (UTF-8, at most 64 KiB). Keep it outside public assets; the included native/README.md explains this runtime boundary. Then, from that source root, run:
docker build -t getforma-site .
docker run --rm -p 8080:8080 getforma-siteWith a working Docker engine and a successful build, open http://localhost:8080. This origin serves the public documentation, playground and native lab together. It does not start the separate Field Notes inventory service. For HTTPS hosting, set PAYWALL_COOKIE_SECURE=true so the newspaper uses Secure cookies and validates the HTTPS Origin on form submissions. Leave it unset for local HTTP.
Reference deployment: the October 25, 2026 website release passed Linux container CI and all 42 deployment acceptance checks against getforma.dev, including the newspaper and browser playground. A changed artifact or another HTTPS host needs its own verification through the proxy. The unauthenticated Field Notes course remains local-only.
Choose a host for the execution model
- A browser-only app can use GitHub Pages, Netlify or another static host.
- A long-running Axum service needs an application/container host. GitHub Actions can build and deploy it; it is not that host.
- Keep request-time native HTML and its response policy intact. Cache immutable assets separately.
Check the result
In the container example, open /lab/native/?count=17: the initial HTML should contain 17, Add one should show 18, and refresh should return to 17. That confirms both server rendering and temporary browser interaction. It does not test durable inventory storage; Field Notes is a separate service.
Before calling it deployed
Check a real response before JavaScript, activate the island, verify errors and input validation, and confirm your deployed binary serves its matching asset manifest. Follow the deployment guide for the full verification checklist and application boundaries.