zt: templating HTML con tipos seguros en Zig

zt: plantillas HTML con tipos seguros para Zig

zt es una librería de plantillas HTML para Zig que convierte cada plantilla en código del propio lenguaje antes de compilar. Su autor, Lukáš Lalinský, la describe como una adaptación a Zig de Templ, la herramienta equivalente del ecosistema Go. La idea central: si una plantilla no puede renderizarse, el compilador lo dice antes de que el código llegue a producción.

Para un founder, el detalle relevante no es el lenguaje en sí, sino el patrón. Durante años el templating fue el punto más frágil de cualquier stack web: errores de tipografía en un nombre de variable, valores sin escapar, etiquetas sin cerrar. Todo eso explotaba en runtime, en producción, delante del usuario. zt mueve esa clase de fallos a la etapa de compilación.

Cómo funciona: de plantilla a código Zig

Las plantillas se parsean y se transpilan a código Zig durante zig build. Eso permite dos cosas que rara vez conviven: las plantillas se importan directamente desde el código de la aplicación y, más importante todavía, las plantillas pueden importar el código de la aplicación. El resultado es que todos los parámetros quedan tipados.

¿Y esto cómo se aplica en tu negocio?

En CAR, dueños de empresa de Latinoamérica y España usan la tecnología para ser más rentables. Empiezas con una ruta de 7 días y terminas con un sistema funcionando en tu negocio.

👥 Probar 7 días

El código generado es deliberadamente simple: escribe la salida en un std.Io.Writer. No hay asignaciones de memoria ni estado intermedio. Puedes escribir directamente a un socket o acumular la salida en un buffer, según lo que necesite tu aplicación.

Lalinský llegó a esta conclusión después de dos años trabajando con Zig. Venía de construir zio y Dusty, su propio ecosistema de librerías para backends de API con salida JSON o MessagePack. Con el uso correcto de arena allocators, señala, el desarrollo web se vuelve manejable: no hay que acordarse de liberar cada string. Y con comptime, Zig permite construir interfaces de alto nivel sin perder rendimiento.

Seguridad por defecto: el XSS deja de ser un descuido

Todos los valores dinámicos se escapan como HTML por defecto, tanto en texto como en atributos. Los valores dentro de atributos de URL como href o src se revisan además contra esquemas peligrosos. Si de verdad necesitas emitir HTML crudo, tienes que pedirlo explícitamente con {!value}, lo que hace fácil detectarlo en una revisión de código.

El parser también exige que todos los elementos estén correctamente cerrados, así que no puedes generar marcado roto por accidente. No protege de todo, pero elimina las fuentes más comunes de XSS.

Los errores de plantilla son errores del compilador

Este es el punto que más cambia la experiencia de desarrollo. Si escribes {u.nmae} en lugar de {u.name}, zig build falla con un mensaje que apunta al código generado, y cada línea incluye un comentario con la ubicación en la plantilla original. Lo mismo ocurre del lado de quien llama: si pasas un string donde la plantilla espera un tipo distinto, el código no compila.

Más allá de lo básico, se pueden construir componentes reutilizables y pasarlos como valores. Con @children se arman layouts que envuelven otras plantillas, lo que cubre el caso de uso de la herencia de plantillas en otros lenguajes. El control de flujo es Zig puro: if, for y switch funcionan como se espera, incluidas las capturas de payload. Todo compila a una secuencia de escrituras, sin asignaciones.

Zig con htmx o Datastar: SPAs sin tocar JavaScript

Lalinský menciona que con htmx o Datastar se pueden construir SPAs sin escribir JavaScript ni TypeScript. Es una combinación que vale la pena mirar si tu equipo ya tiene backend en Zig o está evaluándolo: el frontend deja de necesitar un pipeline de build aparte.

Hay un detalle de implementación que el autor señala por su cuenta: el snippet de ejemplo de su post tiene un bug no obvio en el manejo de errores cuando importa la cancelación de std.Io. La función render de Dusty, que envuelve el manejo del std.Io.Writer, resuelve el problema. Es el tipo de trampa que conviene conocer antes de copiar el patrón en un proyecto propio.

Qué significa esto para tu startup

1. Separa la decisión de lenguaje de la decisión de arquitectura. El valor de zt no está en adoptar Zig, sino en el patrón de plantillas tipadas que fallan en compilación. Si tu stack es Go, Templ —la inspiración directa de zt— aplica la misma idea. Si es TypeScript, el equivalente es mover la validación de props y de datos al chequeo de tipos en lugar de confiar en tests de integración.

2. Audita qué se escapa en tus plantillas actuales. El escape por defecto y la validación de esquemas en URLs son dos controles que muchos stacks no traen activados. Revisa en tu código cuántos valores dinámicos van sin escapar y cuántos atributos de URL se construyen con input del usuario. Es una tarde de trabajo con impacto directo en tu superficie de ataque.

3. Pilotea en herramientas internas, no en el producto principal. El propio autor aclara que el proyecto todavía no es maduro, aunque ya hay varias personas usándolo. Zig tiene una comunidad mucho más chica que Go o Python, y encontrar talento sigue siendo difícil. Un dashboard interno o una herramienta de operaciones es un buen primer caso de uso.

4. Sigue la discusión de sintaxis si vas a adoptarlo. Una parte del diseño sigue abierta: el control de flujo a nivel de bloque se escribe como Zig puro, lo que hace que una línea de texto que empiece con la palabra if sea un error de parseo. El autor evalúa pasar a @if, @for y @switch, al estilo de Razor o Twirl. Si eso te afecta, hay un issue en GitHub abierto para opinar.

Conclusión

zt no va a reemplazar tu stack mañana, y no es la intención. Lo interesante es la dirección: el templating vuelve a ser un problema de compilador, no de runtime. Para un equipo chico, eso significa menos bugs en producción y menos tiempo persiguiendo errores que un chequeo de tipos habría atrapado. Si tu producto depende de servir HTML, vale la pena estudiar el patrón aunque nunca escribas una línea de Zig.

Fuentes

No se encontraron datos adicionales verificables en la búsqueda: la consulta no devolvió cobertura periodística sobre zt ni sobre el ecosistema de templating en Zig.

¿Y esto cómo se aplica en tu negocio?

En CAR, dueños de empresa de Latinoamérica y España usan la tecnología para ser más rentables. Empiezas con una ruta de 7 días y terminas con un sistema funcionando en tu negocio.

👥 Probar 7 días

Daily Shot: Tu ventaja táctica

Lo que pasó en las últimas 24 horas, resumido para que tú no tengas que filtrarlo.

Suscríbete para recibir cada mañana la curaduría definitiva del ecosistema startup e inversionista. Sin ruido ni rodeos, solo la información estratégica que necesitas para avanzar:

  • Venture Capital & Inversiones: Rondas, fondos y movimientos de capital.
  • IA & Tecnología: Tendencias, Web3 y herramientas de automatización.
  • Modelos de Negocio: Actualidad en SaaS, Fintech y Cripto.
  • Propósito: Erradicar el estancamiento informativo dándote claridad desde tu primer café.

📡 El Daily Shot Startupero

Noticias del ecosistema startup en 2 minutos. Gratis, todos los días.

Share to...