Architecture difference
Form.io’s architecture is top-to-bottom: the form definition lives in the Form.io API (self-hosted or cloud), the submission data is stored in Form.io’s MongoDB-backed database, and the@formio/react package connects the browser to that API. The backend is the product; the React
layer is the rendering client.
FormEngine has no backend. A form schema is a JSON object you store wherever you want — a database
column, an S3 file, a CMS field. @react-form-builder/core reads that JSON and renders the form.
What happens with submitted data is entirely your concern. This is the right model when you already
have a backend and don’t want a second one.
The practical difference: Form.io ships a complete platform you configure. FormEngine ships a
library you integrate. Teams building SaaS products or internal tools on top of their own
infrastructure find FormEngine more composable; teams that need form functionality without writing
backend code find Form.io faster to get to production.
Feature comparison
| Feature | Form.io | FormEngine |
|---|---|---|
| License | Open-source core (MIT); commercial platform tiers | Core: MIT; Designer: commercial |
| Backend included | Yes (Node.js + MongoDB API server) | No — you own the backend |
| Submission storage | Built-in (cloud or self-hosted DB) | Your database / API |
| User authentication | Built-in (form auth, OAuth) | Your auth system |
| Visual form builder | Form.io Builder | FormEngine Designer |
| Embeddable builder in your React app | Yes (@formio/react FormBuilder) | Yes (FormEngine Designer) |
| JSON-driven form schema | Yes (Form.io JSON format) | Yes (FormEngine UI schema) |
| Conditional logic | Yes | Yes |
| Validation | Yes (built-in validators) | Yes (Zod-backed, custom validators) |
| Multi-step / wizard forms | Yes | Yes (Wizard component) |
| Repeating sections | Yes | Yes (Repeater component) |
| Custom React components | Limited (template-based) | Native — any React component |
| MUI / Mantine integration | No dedicated adapters | Full dedicated adapters |
| Workflow and approvals | Yes (premium) | Not included |
| PDF generation | Yes (premium) | Not included |
| Offline / local form storage | Requires custom work | Native (schema is just JSON) |
| TypeScript support | Partial | Full |
| Active GitHub maintenance | Yes | Yes |
| Bundle size (React layer, gzip) | ~180–220 KB | ~190 KB (with MUI adapter) |
When to use Form.io
Form.io makes sense when:- You need form submission storage and you don’t want to build it yourself
- You need built-in user authentication tied to form access
- You need workflow, approvals, or multi-step process management across form submissions
- You’re building a low-code or no-code form portal for non-technical users
- You’re on a government or enterprise procurement where a managed platform is required
When to use FormEngine
FormEngine makes sense when:- You already have a backend and don’t need a second one
- You need to store form schemas per-tenant in your own database (SaaS architecture)
- You need deep integration with your React design system (MUI, Mantine, custom components)
- You want the form rendering bundle to be part of your frontend, not an API dependency
- You need the schema to be portable and renderable without a Form.io API connection
- Your team needs an embeddable visual builder for customers, not for internal use
Bundle and dependencies
Form.io’s@formio/react package brings in the formiojs core, which handles schema parsing,
validation, and API communication. The combined bundle is roughly 180–220 KB gzipped depending on
which features you use. It also introduces a runtime dependency on Form.io’s API endpoint — if the
API is unavailable, form rendering fails.
FormEngine Core with MUI adapter is ~190 KB gzipped. There’s no API dependency at runtime — the
schema is a local object. Network calls only happen when your application code makes them (e.g.,
loading a schema from your own API, submitting data).
Schema portability
Both libraries use JSON form definitions, but the formats are not interoperable. Form.io schema looks like:Migration path from Form.io to FormEngine
If you’re migrating an existing Form.io implementation: 1. Audit your dependency on Form.io backend features. If you rely on Form.io’s submission API, you need to stand up your own submission endpoint before migrating the frontend. This is the main migration cost. 2. Map component types. Form.io’s component types (textfield, select, datagrid, file,
etc.) map to FormEngine equivalents (Input, Dropdown, DataGrid, Uploader). Most standard
fields have a direct equivalent.
3. Rewrite form schemas. There’s no shortcut here. Write a mapping script or convert schemas
manually. The structure is similar enough that it’s straightforward for simple forms; complex forms
with nested components and custom validation take more time.
4. Replace the Form.io API calls. Swap formio.js submission handling with your own fetch/API
calls. FormEngine’s FormViewer has an onActionEventAsync callback for submit events.
5. Set up your own storage. Schemas as JSON, submissions as rows in your database. FormEngine
doesn’t touch either — that’s your application layer.
For a working FormEngine render setup, see the Dynamic Form from JSON tutorial.
FAQ
Is Form.io’s open-source version actually usable for production?
The@formio/react package is MIT and works without a Form.io account. You lose submission
management, user portals, and workflow — but the rendering layer works standalone. Most teams hit
the limits of the free tier when they need multi-project management, offline mode, or enterprise
authentication.
Does FormEngine replace what Form.io’s backend does?
No. FormEngine replaces only Form.io’s React rendering layer (@formio/react). For submission
storage, you need your own API. For authentication, your own auth. FormEngine is not a platform —
it’s a library.
Can I use FormEngine’s Designer instead of Form.io Builder?
Yes — the Designer is an embeddable visual form editor with a comparable feature set to Form.io Builder. The main practical difference is that Designer saves FormEngine-format JSON (not Form.io JSON). If you’re switching builders, you’re also switching schema formats.What about Form.io’s offline and PWA support?
Form.io has offline form capabilities built into its SDK. FormEngine doesn’t include offline sync — if you need offline submission queuing, you implement it in your application layer (service worker, IndexedDB). This is more work but gives you full control over the sync logic.Our team is on Form.io’s enterprise plan. Is switching worth it?
Evaluate what you’re actually using from the platform tier. If it’s primarily the rendering layer and storage, switching is feasible. If you use workflow, approvals, or role-based form access, those need to be rebuilt or found in a different tool.See also
- Workflow approval forms — multi-step approvals with role-based fields, schema versioning
- Inspection and data collection forms — Repeater, conditional follow-ups, ops-managed templates
- SaaS form builder use case — embedding FormEngine Designer in your product
- Best React form libraries 2026 — broader comparison of the form library landscape
- Dynamic Form from JSON tutorial — getting started with FormEngine rendering
- FormEngine Designer overview — the embeddable visual editor
- FormEngine on GitHub — MIT source code
- FormEngine Designer pricing