Taille de bundle Kanon
Des chiffres réels. Pas de marketing. Données auto-générées le Apr 3, 2026.
TL;DR
Pour une app complète avec tous les types de schémas (gzip) :
- Kanon : 4.22 kB référence
- Zod 4 Mini : 7.50 kB (+78%)
- Zod 4 Classic : 27.57 kB (+554%)
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.08 kB référence | 4.29 kB +39% | 27.25 kB +784% | 12.83 kB +316% |
Profil utilisateur User profile with optional fields | 3.43 kB référence | 5.17 kB +51% | 27.30 kB +697% | 12.87 kB +276% |
Réponse API API response with discriminated union | 3.47 kB référence | 4.65 kB +34% | 27.27 kB +687% | 12.85 kB +271% |
Validation de config App configuration validation | 3.25 kB référence | 5.06 kB +56% | 27.32 kB +742% | 12.89 kB +297% |
Formulaire + Coercion Form data with type coercion | 3.22 kB référence | 4.52 kB +41% | 27.39 kB +751% | 12.91 kB +301% |
App complète Complete app schemas (comprehensive) | 4.22 kB référence | 7.50 kB +78% | 27.57 kB +554% | 13.09 kB +210% |
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.08 kB | 2.71 kB |
| Profil utilisateur User profile with optional fields | 11.65 kB | 3.43 kB | 3.00 kB |
| Réponse API API response with discriminated union | 11.81 kB | 3.47 kB | 3.05 kB |
| Validation de config App configuration validation | 10.81 kB | 3.25 kB | 2.85 kB |
| Formulaire + Coercion Form data with type coercion | 11.08 kB | 3.22 kB | 2.84 kB |
| App complète Complete app schemas (comprehensive) | 14.44 kB | 4.22 kB | 3.74 kB |
Données générées le Apr 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/core/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 ~27 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 | ~27.2 kB | ~4.3 kB | ~3.1 kB |
| Schémas d'app complète | ~27.6 kB | ~7.5 kB | ~4.2 kB |
| Taux de croissance | Quasi nul | +75% | +37% |
Kanon v2.5.0 vs Zod v4.3.6
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.08 kB référence | 4.29 kB +39% | 27.25 kB +784% |
validation +3%validation(schema).safeParse(data) | 3.17 kB référence | 4.29 kB +35% | 27.25 kB +758% |
k +73%Syntaxe type Zod : k.string(), k.object()... | 5.33 kB référence | 4.29 kB +-20% | 27.25 kB +411% |
z +119%Migration depuis Zod | 6.75 kB référence | 4.29 kB +-36% | 27.25 kB +304% |
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 | ~4-27 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