A spec, not components
Forms are portable JSON you can store, diff and version. Every builder edit also emits RFC 6902 patches, so undo/redo and audit trails come for free.
Start here
FormKrafter turns a form into data. A form is a JSON spec — a tree of bricks with their validations and rules — and that one spec drives everything: the drag & drop builder, the web and native renderers, and the verdict your backend returns. No component to rewrite per framework, no validation logic duplicated between client and server.
A spec, not components
Forms are portable JSON you can store, diff and version. Every builder edit also emits RFC 6902 patches, so undo/redo and audit trails come for free.
One behavior, every renderer
Web Components at the core, React and Vue wrappers generated from the same source, and a React Native renderer sharing the same engine. Pick per app without forking your form logic.
The same verdict everywhere
validateFormData(spec, data) runs on your server and reproduces the
frontend result exactly — hidden fields excluded, messages localized.
Rules without eval
Conditional logic in JSON Logic or JavaScript, executed by an AST interpreter: CSP-safe, whitelisted builtins, bounded execution.
| Package | What it is | You need it when… |
|---|---|---|
formkrafter-core |
Headless engine: specs, ops, validation, rules sandbox, services | always (directly on a backend, transitively on a frontend) |
formkrafter-wc |
The UI as Web Components + the 30 built-in bricks | you render or build forms in the browser |
formkrafter-react |
Generated React wrappers | your app is React |
formkrafter-vue |
Generated Vue 3 wrappers | your app is Vue |
formkrafter-react-native |
Native renderer for the same specs | your app is React Native or Expo |
A project by Streamline Pulse