Showcase
Seven forms, one engine.
Every card below is a schema the engine actually runs. Open one, edit the JSON, and watch the form follow.
Conditional questions
A field appears when another is answered a certain way, and disappears — with its validation — when it is not. The most common frontend ticket there is, expressed as two lines of JSON.
Open in playgroundLong forms with optional coverageInsurance quote
Sections, side-by-side rows, a country-specific field, and an opt-in section whose fields unmount entirely when switched off — so hidden fields are never validated.
Open in playgroundPricing, quotes, invoicesOrder sheet
Quantity × price → subtotal → discount → taxable → tax → total. Four levels of derived values, settled in a single write rather than one render pass per link.
Open in playgroundAnything with a variable number of rowsCap table
Add and remove directors, each row validated in its own scope, with a form-level total that sums across every row as you type.
Open in playgroundRegistration and onboardingSign-up with rules
Built-in validators, a rule that only runs on blur instead of every keystroke, and a checkbox that blocks submit until it is ticked.
Open in playgroundAnything that has to ask a serverUsername check
An async rule that waits for blur instead of firing on every keystroke, a cross-field password match, and a domain format rule — all registered once and referenced by name from the schema.
Open in playgroundThe form your users complain aboutForty-five fields
Four sections, per-section totals and a grand total. Type in one field and open the Renders tab: only that field and its declared dependents move. Everything else holds at one.
Open in playgroundThe headless contract
Same JSON. Switch the design.
Three sets of components registered for the same field types. Press a tab: the labels, the choices and the whole visual language change, and the schema on the left doesn't move a character. Your values, validation and conditional fields survive the swap, because the engine isn't rebuilt — only re-rendered with different components.
Things that happen over time
Async checks, and what follows them.
Some behaviour can't be shown in a code block because it unfolds over time. An async rule that waits for blur instead of firing on every keystroke. A submit that runs every rule and scrolls to the first failure. An error your server pushes back after the form looked fine. The log on the right timestamps each one, so the timing is something you can read.
Anything that emits JSON
Describe a form. Get a schema.
Pick a description and watch the schema that satisfies it. Then open it and change it.
Pick a description above.
These schemas are written by hand, not generated — there's no model behind this box. The point is what it implies: a form is a JSON document, so anything that can produce JSON can produce a form. A backend, a CMS, a spreadsheet export, or a model.