Skip to main content
TL;DR: Form.io is a full-stack form platform — it includes a Node.js API server, a submission database, user authentication, workflow engine, and a React rendering layer. FormEngine is a React frontend library — no backend, no submission storage, no auth. If you need a turnkey form platform that stores data and manages workflows out of the box, Form.io solves that. If you’re building forms inside an existing React app with your own backend, FormEngine gives you a lighter, more controllable integration with better React ecosystem alignment. Last reviewed: April 2026.

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

FeatureForm.ioFormEngine
LicenseOpen-source core (MIT); commercial platform tiersCore: MIT; Designer: commercial
Backend includedYes (Node.js + MongoDB API server)No — you own the backend
Submission storageBuilt-in (cloud or self-hosted DB)Your database / API
User authenticationBuilt-in (form auth, OAuth)Your auth system
Visual form builderForm.io BuilderFormEngine Designer
Embeddable builder in your React appYes (@formio/react FormBuilder)Yes (FormEngine Designer)
JSON-driven form schemaYes (Form.io JSON format)Yes (FormEngine UI schema)
Conditional logicYesYes
ValidationYes (built-in validators)Yes (Zod-backed, custom validators)
Multi-step / wizard formsYesYes (Wizard component)
Repeating sectionsYesYes (Repeater component)
Custom React componentsLimited (template-based)Native — any React component
MUI / Mantine integrationNo dedicated adaptersFull dedicated adapters
Workflow and approvalsYes (premium)Not included
PDF generationYes (premium)Not included
Offline / local form storageRequires custom workNative (schema is just JSON)
TypeScript supportPartialFull
Active GitHub maintenanceYesYes
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:
{
  "title": "Contact Form",
  "components": [
    {
      "type": "textfield",
      "key": "firstName",
      "label": "First Name",
      "validate": { "required": true }
    }
  ]
}
FormEngine schema looks like:
{
  "version": "1",
  "form": {
    "name": "ContactForm",
    "type": "form",
    "components": [
      {
        "name": "firstName",
        "type": "Input",
        "props": { "label": "First name" },
        "validations": [
          { "type": "required", "message": "First name is required" }
        ]
      }
    ]
  }
}
Migration between the two requires rewriting schemas. There’s no automated converter — the component type system and validation structure are fundamentally different.

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

Last modified on April 16, 2026