Fullstack en Rust sin el dolor y las abstracciones innecesarias
Esa sensación familiar: quieres escribir una pequeña aplicación web en Rust, pero configurar la infraestructura lleva más tiempo que la lógica real. Primero eliges un framework web (Axum o Actix-web), luego un motor de plantillas (Askama o Tera), y luego intentas descubrir cómo pasar datos al frontend sin convertir tu código en un sinfín de descripciones de endpoints de API. Al final, un proyecto con 10 líneas de lógica crece hasta cientos de líneas de configuración.
El equipo de desarrollo de Tokio (sí, los mismos que escribieron el runtime asíncrono para mitad del ecosistema Rust) decidió solucionar esto. Presentaron Topcoat — un framework que busca hacer el desarrollo en Rust tan rápido y agradable como Ruby on Rails o Next.js, pero conservando todos los beneficios de la seguridad de tipos.
¿Qué es exactamente?
Topcoat es un framework fullstack modular que sigue el principio de "baterías incluidas". No te obliga a elegir entre el renderizado del lado del servidor (SSR) y la reactividad del lado del cliente. En cambio, ofrece un enfoque híbrido: escribes código en Rust y el framework decide por sí mismo qué debe ejecutarse en el servidor y qué debe convertirse en JavaScript para el navegador.
El proyecto se encuentra en etapas iniciales (estado experimental), por lo que la API puede cambiar. Sin embargo, las ideas arquitectónicas que lo sustentan parecen muy sólidas para quienes están cansados del zoo tecnológico.
Reactividad sin dolor y sin bundles WASM
Por lo general, si quieres hacer que un botón en una página cobre vida, tienes dos caminos: escribir en JS/TS o usar WebAssembly pesado. Topcoat ofrece una tercera opción.
Una expresión especial $(...) dentro de la macro view! es código Rust regular. El compilador lo verifica, pero Topcoat sabe cómo traducirlo a JavaScript. Cuando escribes un handler de click que cambia estado (signal), no necesitas configurar un build del frontend ni describir una API. El framework mismo lo hará funcionar instantáneamente en el navegador.
Si una actualización requiere datos del servidor (por ejemplo, una búsqueda en base de datos), los "shards" vienen al rescate. Marcas un componente con el atributo #[shard], y Topcoat lo re-renderizará automáticamente en el servidor cuando los argumentos cambien, y luego reemplazará cuidadosamente la pieza de HTML en el navegador.
Routing que impone orden
En lugar de describir un árbol de rutas en un enorme archivo main.rs, Topcoat sugiere usar la estructura de carpetas. Si has trabajado con Next.js, te sentirás como en casa.
Un archivo src/app/about.rs estará automáticamente disponible en /about, y src/app/posts/id.rs se convertirá en una ruta con un parámetro /posts/{post_id}. No hay magia en runtime — es una característica opcional que puedes habilitar si te gusta ese tipo de orden.
Plantillas que permanecen como HTML
Muchos motores de plantillas en Rust están demasiado alejados del HTML o te obligan a escribir mucho código extra. La macro view! en Topcoat intenta estar lo más cerca posible del markup, mientras permite usar construcciones regulares de Rust como bucles for y condiciones if.
Por cierto, para los que se preocupan por la limpieza del código: el paquete incluye una utilidad CLI topcoat fmt que puede formatear código incluso dentro de macros. Es algo pequeño que frecuentemente falta en otros proyectos.
Componentes y assets listos para usar
Los desarrolladores tomaron el camino de shadcn/ui. En lugar de agregar una biblioteca pesada de componentes como dependencia, usas el comando topcoat ui. Copia el código de los componentes que necesitas (botones, tarjetas, formularios) directamente en tu proyecto. Esto te permite cambiar el diseño a tu gusto sin luchar con los estilos de la biblioteca. Todo está construido sobre Tailwind CSS, que está integrado directamente en el pipeline de build.
Trabajar con imágenes y fuentes también está simplificado:
Los frameworks agregarán hashes a los nombres de archivo para caché y asegurarán que los assets estén disponibles.
¿Vale la pena probarlo ahora?
Topcoat parece un intento de crear un framework web "correcto" para Rust, donde el tipado ayuda en lugar de obstaculizar la velocidad de desarrollo.
Para quién es definitivamente:
- Quienes quieren construir rápidamente un prototipo o herramienta interna en Rust.
- Desarrolladores cansados de la brecha entre backend y frontend.
- Quienes valoran el ecosistema Tokio y confían en sus decisiones arquitectónicas.
El proyecto está creciendo activamente ahora. Los autores planean agregar soporte para WebSocket, jobs en background, e incluso generación de especificaciones OpenAPI. Si has estado buscando una razón para escribir algo para la web en Rust, quizás la llegada de Topcoat es esa señal.
Mira el repositorio tokio-rs/topcoat — hay una excelente guía para comenzar. Pero recuerda: el proyecto es experimental, así que usarlo para sistemas críticos aún es un poco prematuro.
Proyectos relacionados