status: pre-launch · building in public

The form engine that renders natively in your app.

Cross-framework. Headless core plus styled block packs. Zero DOM in the engine. One JSON schema, one logic evaluator, every stack — React, Vue, Vanilla today; React Native and SwiftUI as interpreters of the same spec.

no spam · unsubscribe any time · built for developers who read the docs

View demo →

01 — what it is

A form kernel, not a form library.

Most form libraries are code you import. Nativeform is an interpreter of declarative JSON. Fields, validation, logic, and layout all live in a portable schema. The engine is the runtime that executes it.

This matters the moment you need the same form in a second place. A second framework. A second platform. An AI agent filling it on behalf of the user. A mobile app that cannot ship a webview.

The core has zero DOM. Blocks receive semantic props — { value, error, onChange } — never DOM refs or raw events. That contract is what lets us render to React today and SwiftUI tomorrow without rewriting the language.

schema.json
{
  "id": "job-application",
  "fields": [
    { "id": "name",   "type": "text",  "label": "Full name", "required": true },
    { "id": "email",  "type": "email", "label": "Email",     "required": true },
    { "id": "salary", "type": "money", "label": "Desired salary",
      "currency": "USD" },
    { "id": "work",   "type": "repeater", "label": "Work history",
      "fields": [
        { "id": "co",    "type": "text",      "label": "Company" },
        { "id": "dates", "type": "dateRange", "label": "Dates" }
      ]
    }
  ],
  "logic": [
    { "when": { "==": [{ "var": "salary.amount" }, 0] },
      "then": { "error": { "field": "salary", "key": "salary.required" } } }
  ]
}

> this same schema renders in React, Vanilla JS, and (P3) SwiftUI.

02 — why nativeform

Built for the forms you were afraid to touch.

→ native feel

Renders as first-class UI

Not iframes. Not widgets. Forms use your design system, your theme, your accessibility tree, your keyboard shortcuts.

→ one schema

Cross-framework portability

Every SDK is a thin interpreter of the same JSON. Rewrite your app from React to Vue — your forms come with you.

→ declarative logic

No code escape hatches

Visibility, computed values, and validation are pure data. Nativeform Logic v1 is a registered operator tree — portable to any runtime.

→ real production

Repeaters, money, PII, multi-step

First-class money type, dateRange, repeater scopes in logic, PII tags that drive retention and audit, compliance flags built-in.

03 — who it's for

SaaS founders who need serious forms, not contact forms.

If your product is onboarding, intake, underwriting, estimation, applications, claims, invoicing, or configure-price-quote — the form is the product. You are not looking for Typeform. You are looking for a runtime you can trust.

it is for you if…

  • Your forms have conditional fields that depend on other conditional fields.
  • Your forms have repeaters (line items, work history, dependents).
  • Your forms touch money, and you refuse to do math with floats.
  • Your forms carry PII and compliance is not a footer link.
  • You want your mobile app to render the same form without a webview.
  • You read docs. You care about contracts. You want the escape hatch to be declarative.

04 — framework matrix

One schema. Every target.

targetstatus
Reactshipping
Vanilla JSshipping
VueP1
SvelteP1
React NativeP3
SwiftUI / KotlinP3

* priorities per docs/PLAN.md §6. Native ports re-implement an interpreter of a fixed spec instead of reinventing the language.

05 — early access

Building in public.

Waitlist members get the first preview, the schema spec drafts, and a direct line while the kernel is still moving. No drip. No marketing. Just progress.