Bundle Size Comparison of Form Libraries
Choosing the right form library significantly impacts your application's performance, especially on mobile devices and slow networks. This comprehensive comparison analyzes bundle sizes of four popular form libraries: FormEngine Core, SurveyJS, react-jsonschema-form (RJSF), and Vueform, helping you make an informed decision based on actual shipping code rather than feature lists.
Why bundle size matters for form libraries
Modern web applications face strict performance budgets, particularly when serving users on mobile devices or in regions with limited network connectivity. Every kilobyte of JavaScript affects load times, user experience, and conversion rates.
The performance impact of bundle size
| Additional JavaScript | Slow 3G Impact | 4G Impact | User Experience Impact |
|---|---|---|---|
| +50 KB | ~1.5–1.7 seconds | ~0.15 seconds | Noticeable delay on mobile |
| +100 KB | ~2.6–2.8 seconds | ~0.30 seconds | Significant delay, possible abandonment |
| +300 KB | ~7.0–7.5 seconds | ~0.70 seconds | High abandonment rate |
| +500 KB | ~11–12 seconds | ~1.1 seconds | Critical performance issue |
Form libraries, while essential for user interaction, can contribute substantially to your total JavaScript payload. Understanding how different libraries approach bundle size helps you choose one that aligns with your performance goals.
Testing methodology and fair comparison
All mentioned tools, testing data, and the complete test suite are available in our GitHub repository. The repository includes build configurations, test applications for each library, and scripts to reproduce these measurements. Feel free to explore the code, run your own tests, or contact us with questions.
To ensure accurate, comparable results, we implemented a standardized testing approach:
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 and Material UI (MUI) where applicable
Equalization approaches
- Duplicate package removal: Eliminated version mismatches
- UI kit equalization: Tested with and without Material UI
- 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
| Library | Default UI Size | With Material UI | Difference | Key Insight |
|---|---|---|---|---|
| Vueform | 140.72 KB | 141.09 KB | +0.37 KB | Minimal change, smallest baseline |
| RJSF | 175.26 KB | 231.62 KB | +56.36 KB | MUI adds significant overhead |
| FormEngine Core | 244.19 KB | 188.54 KB | -55.65 KB | Only library that reduces size with MUI |
| SurveyJS | 421.67 KB | 391.72 KB | -29.95 KB | Large baseline, modest reduction |
Complex booking form results
| Library | Default UI Size | With Material UI | Difference | Key Insight |
|---|---|---|---|---|
| Vueform | 199.06 KB | 199.23 KB | +0.17 KB | Stable size, integrated UI |
| RJSF | 178.07 KB | 234.50 KB | +56.43 KB | Predictable growth with MUI |
| FormEngine Core | 316.69 KB | 199.26 KB | -117.43 KB | Dramatic 37% reduction with MUI |
| SurveyJS | 423.75 KB | 455.73 KB | +31.98 KB | Inconsistent MUI impact |
Architectural analysis: Why results vary
Different libraries adopt distinct architectural approaches that directly impact their bundle size characteristics.
FormEngine Core: The modular advantage
FormEngine's pluggable architecture enables complete UI replacement. When you switch from its default React Suite components to Material UI:
FormEngine's modular design means you only pay for what you use. When integrated with Material UI, the default React Suite components are completely removed from your bundle, resulting in significant size reductions.
- Complete UI replacement: Default UI components are entirely removed
- Optimal tree-shaking: Unused code is effectively eliminated
- Zero UI overhead: No duplicate UI code shipped
- Best-in-class MUI integration: Actually reduces bundle size
This makes FormEngine Core particularly valuable for teams already using established UI libraries like Material UI.
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
Key takeaways for library selection
When using Material UI or established UI libraries
Choose FormEngine Core for optimal size-to-capability ratio
FormEngine Core is the only library that reduces bundle size when integrating with Material UI, achieving 40-48% reduction compared to React Suite UI. This makes it ideal for teams leveraging existing UI infrastructure.
Benefits:
- Complete UI replacement eliminates default UI overhead
- Exceptional tree-shaking removes unused code
- Future-proof architecture adapts to any UI library
- Best performance for complex forms with MUI
When building from scratch with minimal dependencies
Choose Vueform for the smallest baseline
Vueform delivers the most compact bundles when no external UI library is required, making it suitable for standalone applications or strict performance budgets.
When needing predictable, controllable growth
Choose RJSF for linear scaling
RJSF offers predictable bundle sizes, though Material UI integration adds measurable overhead.
When survey-specific features are essential
Choose SurveyJS for specialized capabilities
SurveyJS provides extensive survey-focused features but carries a substantial size penalty that may not justify the cost for general form use cases.
Practical recommendations
For performance-critical applications
- Audit your UI library usage: If already using Material UI, FormEngine Core provides the best efficiency
- Consider network conditions: On Slow 3G networks, every 50KB adds ~1.5 seconds to load time
- Test with your actual forms: Bundle size impact varies with form complexity
- Monitor tree-shaking effectiveness: Use bundle analyzers to verify dead code elimination
Integration considerations
- FormEngine Core: Requires UI library selection but offers maximum flexibility
- Vueform: Works best with its integrated UI, limited external UI support
- RJSF: Good Material UI integration but adds overhead
- SurveyJS: Limited UI kit support, primarily uses custom rendering
Summary
FormEngine's architecture makes it the most efficient choice for teams already invested in UI library ecosystems, while Vueform offers the smallest footprint for new projects. The choice ultimately depends on your specific constraints around existing infrastructure, performance requirements, and feature needs.
Below is a detailed, in-depth library comparison with graphs. This may be of interest to those who plan to replicate these measurements and compare them with our results.
Detailed performance impact visualization
The chart below illustrates how bundle size affects load times across different network conditions:
Complete test data and methodology
Summary Matrix (Total Size)
Non-MUI (FormEngine Rsuite, RJSF, SurveyJS, VueForm)
| App | login(raw/gzip) | booking(raw/gzip) |
|---|---|---|
| FormEngine Rsuite | 1.04 MB / 245.07KB (+598.8 KB / +104.3 KB) | 1.25 MB / 317.58KB (+673.1 KB / +139.1 KB) |
| RJSF | 597.91 KB / 175.64KB (+132.3 KB / +34.9 KB) | 607.27 KB / 178.48KB (0 KB / 0 KB) |
| SurveyJS | 1.84 MB / 429.41KB (+1414.0 KB / +288.6 KB) | 1.84 MB / 431.44KB (+1279.6 KB / +253.0 KB) |
| VueForm | 465.56 KB / 140.78KB (0 KB / 0 KB) | 716.41 KB / 198.99KB (+109.1 KB / +20.5 KB) |
Legend: Bold values indicate the smallest value in each comparison. Smaller is better.
MUI (FormEngine MUI, RJSF, SurveyJS, VueForm)
| App | login(raw/gzip) | booking(raw/gzip) |
|---|---|---|
| FormEngine MUI | 622.40 KB / 189.44KB (+154.9 KB / +48.3 KB) | 651.00 KB / 200.17KB (0 KB / +1.0 KB) |
| RJSF | 725.37 KB / 232.64KB (+257.9 KB / +91.5 KB) | 734.86 KB / 235.53KB (+83.9 KB / +36.4 KB) |
| SurveyJS | 1.49 MB / 397.71KB (+1057.7 KB / +256.6 KB) | 1.74 MB / 461.73KB (+1133.0 KB / +262.6 KB) |
| VueForm | 467.50 KB / 141.16KB (0 KB / 0 KB) | 716.06 KB / 199.16KB (+65.1 KB / 0 KB) |
Legend: Bold values indicate the smallest value in each comparison. Smaller is better.
Comparison by App
FormEngine Core
| Variant | Total Size(raw/gzip) | Chunks | Code(raw/gzip) | CSS(raw/gzip) |
|---|---|---|---|---|
| booking | 1.25 MB / 317.58KB | 2 | 842.18 KB / 265.16KB | 438.18 KB / 52.42KB |
| booking-mui | 651.00 KB / 200.17KB | 2 | 650.82 KB / 200.00KB | 186.00 B / 169.00B |
| login | 1.04 MB / 245.07KB | 2 | 626.23 KB / 192.65KB | 438.18 KB / 52.42KB |
| login-mui | 622.40 KB / 189.44KB | 2 | 622.22 KB / 189.27KB | 186.00 B / 169.00B |
RJSF
| Variant | Total Size(raw/gzip) | Chunks | Code(raw/gzip) | CSS(raw/gzip) |
|---|---|---|---|---|
| booking | 607.27 KB / 178.48KB | 2 | 489.77 KB / 159.11KB | 117.50 KB / 19.38KB |
| booking-mui | 734.86 KB / 235.53KB | 2 | 734.35 KB / 235.24KB | 518.00 B / 297.00B |
| login | 597.91 KB / 175.64KB | 2 | 480.72 KB / 156.37KB | 117.18 KB / 19.27KB |
| login-mui | 725.37 KB / 232.64KB | 2 | 725.19 KB / 232.47KB | 186.00 B / 169.00B |
SurveyJS
| Variant | Total Size(raw/gzip) | Chunks | Code(raw/gzip) | CSS(raw/gzip) |
|---|---|---|---|---|
| booking | 1.84 MB / 431.44KB | 2 | 1.54 MB / 396.10KB | 305.64 KB / 35.34KB |
| booking-mui | 1.74 MB / 461.73KB | 2 | 1.74 MB / 460.94KB | 2.22 KB / 808.00B |
| login | 1.84 MB / 429.41KB | 2 | 1.54 MB / 394.07KB | 305.64 KB / 35.34KB |
| login-mui | 1.49 MB / 397.71KB | 2 | 1.49 MB / 397.55KB | 186.00 B / 169.00B |
VueForm
| Variant | Total Size(raw/gzip) | Chunks | Code(raw/gzip) | CSS(raw/gzip) |
|---|---|---|---|---|
| booking | 716.41 KB / 198.99KB | 2 | 581.98 KB / 181.59KB | 134.43 KB / 17.40KB |
| booking-mui | 716.06 KB / 199.16KB | 2 | 581.98 KB / 181.59KB | 134.08 KB / 17.56KB |
| login | 465.56 KB / 140.78KB | 2 | 388.14 KB / 130.75KB | 77.42 KB / 10.03KB |
| login-mui | 467.50 KB / 141.16KB | 2 | 389.68 KB / 130.92KB | 77.82 KB / 10.23KB |
Comparison by Variant
LOGIN
| App | Total Size(raw/gzip) | Chunks | Code(raw/gzip) | CSS(raw/gzip) |
|---|---|---|---|---|
| SurveyJS | 1.84 MB / 429.41KB (+1414.0 KB / +288.6 KB) | 2 | 1.54 MB / 394.07KB | 305.64 KB / 35.34KB |
| FormEngine Rsuite | 1.04 MB / 245.07KB (+598.8 KB / +104.3 KB) | 2 | 626.23 KB / 192.65KB | 438.18 KB / 52.42KB |
| RJSF | 597.91 KB / 175.64KB (+132.3 KB / +34.9 KB) | 2 | 480.72 KB / 156.37KB | 117.18 KB / 19.27KB |
| VueForm | 465.56 KB / 140.78KB | 2 | 388.14 KB / 130.75KB | 77.42 KB / 10.03KB |
Legend: Bold values indicate the smallest value in each comparison. Smaller is better.
Performance Comparison (using gzip sizes)
LOGIN-MUI
| App | Total Size(raw/gzip) | Chunks | Code(raw/gzip) | CSS(raw/gzip) |
|---|---|---|---|---|
| SurveyJS | 1.49 MB / 397.71KB (+1057.7 KB / +256.6 KB) | 2 | 1.49 MB / 397.55KB | 186.00 B / 169.00B |
| RJSF | 725.37 KB / 232.64KB (+257.9 KB / +91.5 KB) | 2 | 725.19 KB / 232.47KB | 186.00 B / 169.00B |
| FormEngine MUI | 622.40 KB / 189.44KB (+154.9 KB / +48.3 KB) | 2 | 622.22 KB / 189.27KB | 186.00 B / 169.00B |
| VueForm | 467.50 KB / 141.16KB | 2 | 389.68 KB / 130.92KB | 77.82 KB / 10.23KB |
Legend: Bold values indicate the smallest value in each comparison. Smaller is better.
Performance Comparison (using gzip sizes)
BOOKING
| App | Total Size(raw/gzip) | Chunks | Code(raw/gzip) | CSS(raw/gzip) |
|---|---|---|---|---|
| SurveyJS | 1.84 MB / 431.44KB (+1279.6 KB / +253.0 KB) | 2 | 1.54 MB / 396.10KB | 305.64 KB / 35.34KB |
| FormEngine Rsuite | 1.25 MB / 317.58KB (+673.1 KB / +139.1 KB) | 2 | 842.18 KB / 265.16KB | 438.18 KB / 52.42KB |
| VueForm | 716.41 KB / 198.99KB (+109.1 KB / +20.5 KB) | 2 | 581.98 KB / 181.59KB | 134.43 KB / 17.40KB |
| RJSF | 607.27 KB / 178.48KB | 2 | 489.77 KB / 159.11KB | 117.50 KB / 19.38KB |
Legend: Bold values indicate the smallest value in each comparison. Smaller is better.
Performance Comparison (using gzip sizes)
BOOKING-MUI
| App | Total Size(raw/gzip) | Chunks | Code(raw/gzip) | CSS(raw/gzip) |
|---|---|---|---|---|
| SurveyJS | 1.74 MB / 461.73KB (+1133.0 KB / +262.6 KB) | 2 | 1.74 MB / 460.94KB | 2.22 KB / 808.00B |
| RJSF | 734.86 KB / 235.53KB (+83.9 KB / +36.4 KB) | 2 | 734.35 KB / 235.24KB | 518.00 B / 297.00B |
| VueForm | 716.06 KB / 199.16KB (+65.1 KB / 0 KB) | 2 | 581.98 KB / 181.59KB | 134.08 KB / 17.56KB |
| FormEngine MUI | 651.00 KB / 200.17KB (0 KB / +1.0 KB) | 2 | 650.82 KB / 200.00KB | 186.00 B / 169.00B |
Legend: Bold values indicate the smallest value in each comparison. Smaller is better.
Performance Comparison (using gzip sizes)
Detailed Chunk Information
FormEngine Core
Variant: booking
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 842.18 KB / 265.16KB | 65.8% |
| CSS | 438.18 KB / 52.42KB | 34.2% |
Chunks:
| Chunk | Size |
|---|---|
| assets/booking-cLEyt4Rz.js | 842.18 KB |
| assets/booking-BlfDlKZh.css | 438.18 KB |
| Total | 1.25 MB / 317.58KB |
Variant: booking-mui
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 650.82 KB / 200.00KB | 100.0% |
| CSS | 186.00 B / 169.00B | 0.0% |
Chunks:
| Chunk | Size |
|---|---|
| assets/booking-mui-8oUcs06n.js | 650.82 KB |
| assets/booking-mui-DRllDmdv.css | 186.00 B |
| Total | 651.00 KB / 200.17KB |
Variant: login
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 626.23 KB / 192.65KB | 58.8% |
| CSS | 438.18 KB / 52.42KB | 41.2% |
Chunks:
| Chunk | Size |
|---|---|
| assets/login-CZHp6lqC.js | 626.23 KB |
| assets/login-BlfDlKZh.css | 438.18 KB |
| Total | 1.04 MB / 245.07KB |
Variant: login-mui
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 622.22 KB / 189.27KB | 100.0% |
| CSS | 186.00 B / 169.00B | 0.0% |
Chunks:
| Chunk | Size |
|---|---|
| assets/login-mui-Ck_0wiA4.js | 622.22 KB |
| assets/login-mui-DRllDmdv.css | 186.00 B |
| Total | 622.40 KB / 189.44KB |
RJSF
Variant: booking
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 489.77 KB / 159.11KB | 80.7% |
| CSS | 117.50 KB / 19.38KB | 19.3% |
Chunks:
| Chunk | Size |
|---|---|
| assets/booking-DJqT1Azw.js | 489.77 KB |
| assets/booking-DmSkEnsk.css | 117.50 KB |
| Total | 607.27 KB / 178.48KB |
Variant: booking-mui
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 734.35 KB / 235.24KB | 99.9% |
| CSS | 518.00 B / 297.00B | 0.1% |
Chunks:
| Chunk | Size |
|---|---|
| assets/booking-mui-COUHI9qn.js | 734.35 KB |
| assets/booking-mui-Bomwm_CU.css | 518.00 B |
| Total | 734.86 KB / 235.53KB |
Variant: login
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 480.72 KB / 156.37KB | 80.4% |
| CSS | 117.18 KB / 19.27KB | 19.6% |
Chunks:
| Chunk | Size |
|---|---|
| assets/login-V6rgUKiK.js | 480.72 KB |
| assets/login-nEkMQGGj.css | 117.18 KB |
| Total | 597.91 KB / 175.64KB |
Variant: login-mui
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 725.19 KB / 232.47KB | 100.0% |
| CSS | 186.00 B / 169.00B | 0.0% |
Chunks:
| Chunk | Size |
|---|---|
| assets/login-mui-ChXj5s7v.js | 725.19 KB |
| assets/login-mui-DRllDmdv.css | 186.00 B |
| Total | 725.37 KB / 232.64KB |
SurveyJS
Variant: booking
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 1.54 MB / 396.10KB | 83.8% |
| CSS | 305.64 KB / 35.34KB | 16.2% |
Chunks:
| Chunk | Size |
|---|---|
| assets/booking-BE-zW9Ik.js | 1.54 MB |
| assets/booking-D3E-h4Sw.css | 305.64 KB |
| Total | 1.84 MB / 431.44KB |
Variant: booking-mui
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 1.74 MB / 460.94KB | 99.9% |
| CSS | 2.22 KB / 808.00B | 0.1% |
Chunks:
| Chunk | Size |
|---|---|
| assets/booking-mui-tTf90JQr.js | 1.74 MB |
| assets/booking-mui-DpJ2xjkN.css | 2.22 KB |
| Total | 1.74 MB / 461.73KB |
Variant: login
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 1.54 MB / 394.07KB | 83.7% |
| CSS | 305.64 KB / 35.34KB | 16.3% |
Chunks:
| Chunk | Size |
|---|---|
| assets/login-qcT824kj.js | 1.54 MB |
| assets/login-D3E-h4Sw.css | 305.64 KB |
| Total | 1.84 MB / 429.41KB |
Variant: login-mui
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 1.49 MB / 397.55KB | 100.0% |
| CSS | 186.00 B / 169.00B | 0.0% |
Chunks:
| Chunk | Size |
|---|---|
| assets/login-mui-BtJbERC0.js | 1.49 MB |
| assets/login-mui-DRllDmdv.css | 186.00 B |
| Total | 1.49 MB / 397.71KB |
VueForm
Variant: booking
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 581.98 KB / 181.59KB | 81.2% |
| CSS | 134.43 KB / 17.40KB | 18.8% |
Chunks:
| Chunk | Size |
|---|---|
| assets/booking-FMlCJeul.js | 581.98 KB |
| assets/booking-MdY-dgU2.css | 134.43 KB |
| Total | 716.41 KB / 198.99KB |
Variant: booking-mui
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 581.98 KB / 181.59KB | 81.3% |
| CSS | 134.08 KB / 17.56KB | 18.7% |
Chunks:
| Chunk | Size |
|---|---|
| assets/booking-mui-CYQUKf4s.js | 581.98 KB |
| assets/booking-mui-BnsU-ma9.css | 134.08 KB |
| Total | 716.06 KB / 199.16KB |
Variant: login
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 388.14 KB / 130.75KB | 83.4% |
| CSS | 77.42 KB / 10.03KB | 16.6% |
Chunks:
| Chunk | Size |
|---|---|
| assets/login-DRWdQb0V.js | 388.14 KB |
| assets/login-x6SVVLFq.css | 77.42 KB |
| Total | 465.56 KB / 140.78KB |
Variant: login-mui
Bundle Breakdown:
| Category | Size | Percentage |
|---|---|---|
| Code | 389.68 KB / 130.92KB | 83.4% |
| CSS | 77.82 KB / 10.23KB | 16.6% |
Chunks:
| Chunk | Size |
|---|---|
| assets/login-mui-DB0MzmEj.js | 389.68 KB |
| assets/login-mui-CWmCCSP1.css | 77.82 KB |
| Total | 467.50 KB / 141.16KB |