Performance Benchmarks
Real-world performance metrics and bundle size comparisons for TypeScript validation libraries
Bundle Size
19-23KB
Speed (Simple)
695K ops/sec
CSP Safe
✓ Always
Key Insights
- • AJV's speed comes at a cost: Uses
new Function()
which fails in CSP-restricted environments - • AJV Standalone limitations: Requires build-time compilation, can't adapt to dynamic schemas
- • Luq's balance: Works everywhere, reasonable performance, dynamic validation support
Bundle Size Comparison (gzipped)
Library | Simple Schema | Complex Schema | Notes |
---|---|---|---|
AJV Standalone | 1.03 KB | 4.63 KB | Pre-compiled validation |
Valibot | 1.31 KB | 2.49 KB | Modular design |
Yup | 12.80 KB | 13.40 KB | Simple API |
Luq | 19.10 KB | 22.48 KB | Tree-shakeable plugins |
Luq (JsonSchema) | 26.06 KB | 29.08 KB | JSON Schema with individual plugins |
Luq (JsonSchema Full) | 31.75 KB | 32.31 KB | All JSON Schema features |
AJV | 37.78 KB | 38.33 KB | Full JSON Schema |
Joi | 44.44 KB | 45.00 KB | Server-focused |
Zod | 47.45 KB | 48.12 KB | Feature-rich |
Performance - Simple Schema
AJV Standalone
CSP ✓ Static only
3,176,536 ops/sec (457.3x)
AJV
CSP ✗ Dynamic ✓
2,640,781 ops/sec (380.1x)
Luq (JsonSchema)
CSP ✓ Dynamic ✓
1,498,347 ops/sec (215.7x)
Luq (JsonSchema Full)
CSP ✓ Dynamic ✓
1,403,639 ops/sec (202.1x)
Valibot
CSP ✓ Dynamic ✓
1,016,119 ops/sec (146.3x)
Luq
CSP ✓ Dynamic ✓
694,692 ops/sec (100x)
Zod
CSP ✓ Dynamic ✓
623,385 ops/sec (89.7x)
Joi
CSP ✓ Dynamic ✓
171,594 ops/sec (24.7x)
Yup
CSP ✓ Dynamic ✓
135,276 ops/sec (19.5x)
Performance - Complex Schema
AJV
CSP ✗ Dynamic ✓
215,535 ops/sec (599.6x)
AJV Standalone
CSP ✓ Static only
192,183 ops/sec (534.6x)
Valibot
CSP ✓ Dynamic ✓
170,637 ops/sec (474.7x)
Zod
CSP ✓ Dynamic ✓
66,448 ops/sec (184.9x)
Luq
CSP ✓ Dynamic ✓
35,946 ops/sec (100x)
Luq (JsonSchema Full)
CSP ✓ Dynamic ✓
25,605 ops/sec (71.2x)
Luq (JsonSchema)
CSP ✓ Dynamic ✓
24,119 ops/sec (67.1x)
Joi
CSP ✓ Dynamic ✓
23,324 ops/sec (64.9x)
Yup
CSP ✓ Dynamic ✓
6,419 ops/sec (17.9x)
Which Library Should You Choose?
Choose Luq if you need:
- ✓ CSP-restricted environments (no eval/Function)
- ✓ Dynamic schema loading from API/CMS
- ✓ Existing TypeScript types (no rewriting)
- ✓ Custom business rules as plugins
- ✓ JSON Schema migration path
Consider alternatives if:
- Minimal bundle critical: Valibot (1-2KB)
- Pre-compiled validation only: AJV Standalone
- Maximum raw speed, no CSP: AJV
- Rich ecosystem needed: Zod
Test Methodology
- Test Environment
-
- • AMD Ryzen 7 5825U
- • 5.8GB RAM
- • Node.js v22.12.0
- • Measured: 2025-08-14
- Test Data
-
- • Simple: 3 fields (name, age, email)
- • Complex: Nested objects, arrays, conditionals
- • Iterations: 1,000,000 operations per benchmark
- • Source:
bundle-size-comparison/