Aller au contenu
La Lettre IT
Retour aux synthèses
3 min de lecture
Développement & outils

Zig type-safe templating avec zt, inspiré par Templ pour Go

En bref

  • Un développeur Zig a créé zt, une bibliothèque de templating HTML qui transpile en code Zig pur au moment du build.
  • La syntaxe reprend JSX, mais tout est vérifié à la compilation : typage des paramètres, escape XSS automatique, HTML bien formé garanti.
  • Les erreurs de template deviennent des erreurs de compilation Zig, détectées immédiatement plutôt qu'à la production.

Ce que dit la source

L'auteur cherchait une solution de templating pour du web en Zig sans compromis : type-safe (tous les paramètres typés et vérifiés à la compilation), sans allocations dynamiques, avec échappement XSS par défaut, et qui ressemble toujours à du vrai HTML plutôt qu'à un DSL exotique. Les approches existantes (concat de strings, JSX-like avec Ziex) n'offraient pas ce combo. Il a donc construit zt en s'inspirant de Templ, le moteur Go qui répond aux mêmes contraintes.

  • Les templates zt sont parsés et transpilés en code Zig pendant le build, ce qui permet aux templates d'importer directement le code applicatif et d'avoir accès aux types définis dans les modèles.
  • L'auteur utilise htmx ou Datastar pour construire des SPAs sans JavaScript, rendu côté serveur en Zig.
  • Tous les contenus dynamiques sont échappés HTML par défaut, tant dans le corps du texte que dans les attributs ; les valeurs d'URL en href ou src sont vérifiées contre les schémas dangereux.
  • Les composants réutilisables et héritage de layout fonctionnent via @children, sans allocation supplémentaire.
  • Un typo dans un template (ex: {u.nmae} au lieu de {u.name}) est détecté comme erreur de compilation Zig, avec pointage vers la ligne du template original.

Dans les commentaires

Débat partagé entre appréciation technique et questions sur l'intérêt réel du sujet. Plusieurs commentateurs soulignent la pertinence du design et la symétrie avec les approches haute-performance du passé (années 1997-2001 : C, Perl, ASP, mod_Apache). Des questions surgissent sur les alternatives existantes (zmpl pour Zig, jte pour Java, kotlinx.html pour Kotlin) et sur la comparaison de performance. Un critique pointe un problème souterrain dans la stdlib Zig concernant la gestion des annulations d'IO.

  • Plusieurs commentateurs demandent comment zt se compare à zmpl, un autre moteur de templating Zig populaire, ainsi qu'à jte (Java) et kotlinx.html (Kotlin), sans réponse fournie dans le fil.
  • Un développeur soulève que la stdlib Zig semble bugguée, notamment sur la gestion des annulations IO ; l'auteur reconnaît le problème en note mais le contourne dans sa solution via la fonction render de Dusty, ce qui suggère une limite pratique du langage lui-même.
  • Le commentaire sur les performances futures du C++26 par reflection soulève un doute implicite : Zig survivra-t-il et sera-t-il adopté en production, contrairement aux langages maintenus par des acteurs majeurs ?

Alternatives citées : zmpl (Zig), jte (Java), kotlinx.html (Kotlin), Templ (Go)

Notre lecture

Zt est un design élégant qui prouve qu'une approche type-safe sans allocations est faisable en Zig, grâce à comptime et aux arena allocators. L'angle principal est architecturalement juste : la transpilation au build plutôt que l'interprétation à l'exécution élimine une catégorie entière de bugs et de décisions à l'exécution. Mais le sujet ne débouche sur aucune action immédiate pour une DSI : c'est une exploration légitime pour qui choisit déjà Zig pour des services web, pas un argument pour migrer vers Zig. La comparaison avec les alternatives (jte, kotlinx.html, Templ/Go) manque, et des doutes de production apparaissent (stdlib Zig instable). À surveiller pour l'écosystème Zig, intéressant pour amateurs de langages bas niveau, sans conséquence pour les équipes en production sans Zig.

Le brief, dans votre boîte mail

Recevez chaque jour la sélection et l'analyse La Lettre IT, sans avoir à repasser sur le site.