Skip to main content
Measured gzipped bundle sizes for four form libraries across two scenarios: a simple login form and a complex booking form with validation and conditional logic. All measurements are reproducible — the full test suite is in the FormEngine GitHub repository. Libraries tested: FormEngine Core, react-jsonschema-form (RJSF), SurveyJS, Vueform. Note that Vueform is primarily a Vue.js library — it’s included here because it ships a React-compatible build, but direct architectural comparisons with React-native libraries have limits. Last reviewed: April 2026.

Why bundle size matters

Modern web applications face strict performance budgets, particularly when serving users on mobile devices or in regions with limited network connectivity.

Network impact at a glance

Additional JavaScriptSlow 3G Impact4G ImpactUser Experience Impact
+50 KB~1.5–1.7 seconds~0.15 secondsNoticeable delay on mobile
+100 KB~2.6–2.8 seconds~0.30 secondsSignificant delay, possible abandonment
+300 KB~7.0–7.5 seconds~0.70 secondsHigh abandonment rate
+500 KB~11–12 seconds~1.1 secondsCritical performance issue

Testing methodology

All test configurations, build scripts, and raw data are in the GitHub repository. You can reproduce any measurement locally. To ensure comparable results:

Test scenarios

  • Login form: Simple form with email and password fields
  • Booking form: Complex multi-step form with validation and conditional logic

Tooling assumptions

  • Build tool: Vite (default production configuration)
  • Optimizations: Minification + gzip enabled
  • Tree-shaking: Enabled by default
  • UI variations: Tested with default UI, Material UI (MUI), and Mantine (for FormEngine, RJSF, and SurveyJS) where applicable

Equalization approaches

  1. Duplicate package removal: Eliminated version mismatches
  2. UI kit equalization: Tested with default UI and UI-library variants (Material UI and Mantine where available)
  3. Tree-shaking evaluation: Measured effectiveness of dead code elimination

Bundle size results: gzipped comparison

The following tables present gzipped bundle sizes for each library across different scenarios. Gzipped size represents what actually travels over the network to users’ browsers.

Simple login form results

LibraryDefault UI SizeWith Material UIWith MantineKey Insight
Vueform141.64 KB142.02 KBSmallest baseline, minimal MUI impact
RJSF176.39 KB233.38 KB258.70 KBMantine adds more overhead than MUI
FormEngine Core245.15 KB189.86 KB172.18 KBLowest Mantine size among tested React stacks
SurveyJS426.85 KB395.42 KB361.00 KBLarge baseline, but lower with Mantine

Complex booking form results

LibraryDefault UI SizeWith Material UIWith MantineKey Insight
Vueform199.86 KB200.03 KBStable size, integrated UI
RJSF179.22 KB236.31 KB285.08 KBStrong baseline, large growth with UI overlays
FormEngine Core317.70 KB200.56 KB245.26 KBGood MUI result and competitive Mantine result
SurveyJS428.87 KB460.49 KB473.09 KBHighest overall sizes in this scenario

Architectural analysis: Why results vary

Different libraries adopt distinct architectural approaches that directly impact their bundle size characteristics.

FormEngine Core

FormEngine’s pluggable architecture replaces its default React Suite components entirely when you switch to Material UI or Mantine. The default UI ships zero bytes when unused, which is why the MUI and Mantine numbers are lower than the “Default UI” column — you’re swapping one complete UI layer for another, not adding to it. This makes FormEngine smaller on MUI/Mantine stacks than its default-UI baseline suggests. Teams already using Material UI or Mantine across their app will likely see the 189–200 KB range rather than the 245–317 KB range.

Mantine UI integration

FormEngine also provides a dedicated Mantine view package in @react-form-builder/components-mantine (see src/packages/views/mantine). You can replace the default React Suite UI with Mantine components in the same way as with Material UI:
  • Drop-in Mantine support: Use Mantine-based inputs, containers, and layouts while keeping FormEngine’s data model and validation.
  • Same modular behavior: React Suite components are removed from the bundle when you switch to Mantine.
  • Bundle-size friendly: Mantine integration benefits from the same tree-shaking and “only pay for what you use” model as the MUI view.
This is especially useful if your application already uses Mantine for the rest of its UI and you want a consistent visual language without duplicating component libraries.

Vueform: Integrated efficiency

Vueform delivers the smallest baseline through tight integration:
  • Monolithic architecture: UI, validation, and rendering are coupled
  • Stable size: Consistent across UI variations
  • Suitable for: Standalone applications with strict size budgets

RJSF: Predictable performance

RJSF offers predictable bundle growth:
  • Small core runtime: Lightweight foundation
  • Linear scaling: Bundle size grows with feature usage
  • MUI overhead: Adds 21-32% to bundle size

SurveyJS: Feature-rich foundation

SurveyJS prioritizes features over size:
  • Large baseline: Substantial runtime even for simple forms
  • Framework-agnostic: Flexibility comes at a size cost
  • Inconsistent optimization: MUI impact varies by scenario
  • Best for: Survey-focused applications needing extensive features

Reading these numbers

If you’re already on Material UI or Mantine: FormEngine Core’s 189–200 KB range is competitive. The default-UI column (245–317 KB) isn’t the relevant number — you’d be replacing React Suite with your existing UI library. If you’re starting from scratch with no UI library: Vueform delivers the smallest baseline. Keep in mind it’s primarily a Vue library — weigh that against React ecosystem fit. If you need a small, predictable core: RJSF has a lean foundation that scales linearly. The MUI column grows more than FormEngine because RJSF adds MUI on top of its own renderer rather than replacing it. If you need survey-specific features: SurveyJS has the largest footprint in every scenario tested. Its feature breadth justifies the size for survey-heavy use cases but is hard to justify for general form rendering.

Reproduce the measurements

All measurements were taken with Vite’s default production build (minify + gzip + tree-shaking). To run your own:
git clone https://github.com/optimajet/formengine
cd community/examples/bundle-size
npm install
npm run build:all
The repo includes separate Vite apps for each library plus a script that collects and compares the output sizes.

Full report

The complete report with JSON datasets and charts is available in the source materials:

Next steps

Last modified on April 16, 2026