Taille de bundle Kanon
Des chiffres réels. Pas de marketing. Données auto-générées le Mar 3, 2026.
TL;DR
Pour une app complète avec tous les types de schémas (gzip) :
- Kanon : 4.19 kB référence
- Zod 4 Mini : 9.57 kB (+128%)
- Zod 4 Classic : 17.24 kB (+311%)
Cas d'utilisation réels
Voici des scénarios de validation que vous rencontrerez en production :
| Cas d'usage | Kanon v3 | Zod 4 Mini | Zod 4 Classic | Zod 3 |
|---|---|---|---|---|
Formulaire de connexion Login form validation | 3.06 kB référence | 6.71 kB +119% | 14.72 kB +381% | 12.80 kB +318% |
Profil utilisateur User profile with optional fields | 3.40 kB référence | 7.53 kB +121% | 15.88 kB +367% | 12.84 kB +277% |
Réponse API API response with discriminated union | 3.44 kB référence | 7.00 kB +103% | 15.96 kB +364% | 12.82 kB +272% |
Validation de config App configuration validation | 3.23 kB référence | 7.35 kB +128% | 15.90 kB +393% | 12.86 kB +298% |
Formulaire + Coercion Form data with type coercion | 3.20 kB référence | 6.91 kB +116% | 16.14 kB +405% | 12.88 kB +303% |
App complète Complete app schemas (comprehensive) | 4.19 kB référence | 9.57 kB +128% | 17.24 kB +311% | 13.06 kB +211% |
Ce que chaque test valide
| Cas d'utilisation | Ce qu'il valide |
|---|---|
| Formulaire de connexion | Email + mot de passe avec contraintes |
| Profil utilisateur | UUID, email, âge optionnel, tableau de rôles |
| Réponse API | Union discriminée (succès/erreur) |
| Validation de config | URL, plage de ports, enum, timeout optionnel |
| Formulaire + Coercition | String→Number, String→Boolean, String→Date |
| Application complète | Tout ce qui précède + discriminatedUnion, record, etc. |
Détail Kanon
| Cas d'usage | Brut | Gzip | Brotli |
|---|---|---|---|
| Formulaire de connexion Login form validation | 10.38 kB | 3.06 kB | 2.71 kB |
| Profil utilisateur User profile with optional fields | 11.65 kB | 3.40 kB | 3.00 kB |
| Réponse API API response with discriminated union | 11.81 kB | 3.44 kB | 3.03 kB |
| Validation de config App configuration validation | 10.81 kB | 3.23 kB | 2.85 kB |
| Formulaire + Coercion Form data with type coercion | 11.08 kB | 3.20 kB | 2.84 kB |
| App complète Complete app schemas (comprehensive) | 14.44 kB | 4.19 kB | 3.72 kB |
Données générées le Mar 3, 2026
Pourquoi Kanon est plus petit : le vrai tree-shaking
Kanon utilise des fonctions pures. Zod utilise des classes. Cette différence architecturale est la raison pour laquelle Kanon fait un tree-shaking parfait.
// ✅ Kanon - chaque fonction est autonome
// Seuls string() et object() se retrouvent dans votre bundle
import { string, object, parse } from "pithos/kanon";
const loginSchema = object({
email: string({ format: "email" }),
password: string({ minLength: 8 }),
});
// ⚠️ Zod - z est un namespace qui embarque TOUTES les méthodes
// La bibliothèque Zod entière se retrouve dans votre bundle
import { z } from "zod";
const loginSchema = z.object({
email: z.string().email(),
password: z.string().min(8),
});
Même z.string().min(1) embarque ~15 kB car les méthodes de classe sont bundlées ensemble.
Zod 4 Mini : une solution partielle
Zod 4 a introduit zod/mini qui est plus petit, mais ne peut toujours pas faire un tree-shaking complet :
| Scénario | Zod 4 Classic | Zod 4 Mini | Kanon v3 |
|---|---|---|---|
| Formulaire de connexion simple | ~14.7 kB | ~6.7 kB | ~3.1 kB |
| Schémas d'app complète | ~17.2 kB | ~9.6 kB | ~4.2 kB |
| Taux de croissance | +17% | +43% | +37% |
Kanon v2.0.1 vs Zod v4.3.5
Le bundle de Kanon grandit proportionnellement avec l'utilisation. Celui de Zod est principalement une surcharge fixe.
Helpers de commodité : k, z & validation
Kanon offre des helpers de commodité pour différents cas d'utilisation, mais ils ont un compromis :
| Style d'import | Kanon v3 | Zod 4 Mini | Zod 4 Classic |
|---|---|---|---|
| Imports directs Toujours (production) | 3.06 kB référence | 6.71 kB +119% | 14.72 kB +381% |
validation +3%validation(schema).safeParse(data) | 3.14 kB référence | 6.71 kB +114% | 14.72 kB +369% |
k +74%Syntaxe type Zod : k.string(), k.object()... | 5.32 kB référence | 6.71 kB +26% | 14.72 kB +177% |
z +119%Migration depuis Zod | 6.71 kB référence | 6.71 kB +-0% | 14.72 kB +119% |
Reproduire ces résultats
Vous voulez vérifier ces résultats ? Consultez comment reproduire nos données.
Résumé
| Aspect | Kanon | Zod |
|---|---|---|
| Architecture | Fonctions | Classes |
| Tree-shaking | ✅ Complet | ❌ Limité |
| Bundle min | ~3 kB | ~7-15 kB |
| Évolue avec l'usage | ✅ Oui | ❌ Plutôt fixe |
| Chemin de migration | z shim z disponible | N/D |
En production : Utilisez les imports directs pour le plus petit bundle.
Prototypage : Utilisez le namespace k pour la commodité.
Migration depuis Zod : Utilisez le shim z, puis passez progressivement aux imports directs.
Related
- Kanon vs Zod — Comparaison complète : philosophie, API, migration
- Zygos — Taille de bundle — Comparaison de taille du pattern Result
- Arkhe — Taille de bundle — Comparaison de taille des fonctions utilitaires
- Guide du module Kanon — Documentation complète du module