The rest of the documentation shows you the platform's surface. This section is about building things on top of it: applications with state, steps, persistence and failure modes.
It assumes you are comfortable with an API client and the browser console. If you are not there yet, start with Tutorials.
Three places your code can live
┌──────────────────────────────────────────────────────────┐
│ 1. Inside a page style.javascript on the record │
│ No hosting, no build step, no deploy pipeline │
├──────────────────────────────────────────────────────────┤
│ 2. Against the API your scripts, your server │
│ Deploys, migrations, back-office jobs │
├──────────────────────────────────────────────────────────┤
│ 3. Your own application Next.js, Remix, Flutter, … │
│ When a page is no longer the right container │
└──────────────────────────────────────────────────────────┘Most of what people assume needs option 3 can be done in option 1. That is the surprising part, and it is what this section spends most of its time on.
How far option 1 actually goes
Print Oxygen's /design customizer runs entirely inside one page record. It is an on-canvas text editor: add text layers, drag them around, pick from around twenty-six fonts, set weight, alignment and colour, rotate, curve text along an arc in both directions, flip horizontally and vertically, duplicate, delete. It handles multi-line text, keeps line breaks when curved, renders a live preview, prices the configuration as you change it, and adds the result to a cart with the preview image attached.
That is 113 KB of JavaScript in style.javascript, with data.html holding the markup it renders into. No build step. No bundler. No separate deployment.
The point is not that you should write 113 KB of JavaScript by hand. It is that the ceiling is much higher than "a page with a contact form", and knowing where the ceiling actually is changes what you reach for.
When to stop
Move to option 3 when you need any of:
- Routing with real state between views — more than one page's worth of flow
- Credentials that must never reach a browser — anything where the visitor must not be the caller
- A build step you depend on — TypeScript, a component library, tests
- Server-side rendering for SEO on content you generate
Stowbo is the worked example of that crossing, in Going custom.
What you need to know first
Three facts decide the architecture of anything you build in a page. All three are verified, all three are easy to get wrong, and none of them is obvious from the reference pages.
Your code goes in style.javascript, a top-level field on the page record. Not data.style. Not a <script> tag. See Where your code goes.
It runs before the page exists. The field is injected into the document head, so it executes before the body is parsed and before window.appmint is mounted. You need a readiness gate — the pattern is on the same page.
Reads and writes are not symmetrical. You can read any datatype declaratively. You cannot write an arbitrary record the same way. See The read/write asymmetry, which is the single most architecture-shaping constraint on the platform.
The section
If you are debugging rather than building, go straight to the gotcha index. It is organised by symptom.
Everything in this section was built and shipped before it was written down. Where a page states a behaviour, it was verified against a running organization, and the date is given. Where something cannot be verified, the page says so rather than hedging.