Saltar al contenido
Framework Ecosystems LabsUn contrato, muchos ecosistemas, la misma prueba.

🚀 Hotwire Turbo — 2020#

⬅️ Atlas · 🟨 Ecosistema JavaScript · 🗂️ Índice

Turbo es la respuesta de Basecamp a la aplicación de página única: enviar HTML por el cable y actualizar solo el fragmento que cambia, sin construir una capa de estado en el cliente.

Aparición 2020 (como sucesor de Turbolinks, 2013)
Clasificación hypermedia-library
Ecosistema JavaScript (agnóstico de servidor)
Licencia MIT
Estado 🟢 Activo
Documentación https://turbo.hotwired.dev/handbook/introduction

💡 Tres piezas#

Pieza Qué hace
Drive Intercepta enlaces y formularios: reemplaza el <body> sin recargar
Frames Marca una región de la página que se actualiza sola
Streams El servidor envía fragmentos con instrucciones: reemplaza, añade, elimina
<turbo-frame id="tarea_42">
  <!-- Solo este bloque se sustituye cuando se envía el formulario de dentro -->
</turbo-frame>

Y un Stream, que puede llegar por WebSocket:

<turbo-stream action="append" target="lista-tareas">
  <template><li>Tarea nueva</li></template>
</turbo-stream>

Lo importante: el servidor sigue generando HTML. No hay JSON, ni modelo de datos duplicado en el cliente, ni sincronización entre dos representaciones del mismo estado. Es la tesis de la ficha de htmx y la que Gross defiende en Hypermedia Systems [gross-hypermedia-systems]: el hipermedia ya trae el mecanismo, y una capa de estado en el cliente es un coste que hay que justificar.

🧭 Qué gana y qué cede#

Gana: una sola fuente de verdad —el servidor—, mucho menos JavaScript que mantener, y un equipo que no necesita dominar dos modelos de datos. La ficha de Rails explica por qué esto encaja tan bien con su cultura: Turbo nació ahí.

Cede: cada interacción necesita el servidor. Sin conexión no hay interacción, y las interfaces muy interactivas —un editor, un lienzo, arrastrar y soltar complejo— piden estado local de verdad. Para eso está Stimulus, su compañero: JavaScript pequeño y localizado donde de verdad hace falta.

Esa frontera es la que el módulo 03 obliga a dibujar explícitamente, y la que el módulo 09 vuelve a poner sobre la mesa cuando el requisito es funcionar sin red.

🔄 Un patrón que se repite#

Turbo (2020), htmx (2020), LiveView (2019) y los componentes de servidor de React (2023) responden a la misma observación desde ecosistemas que apenas se hablan: para muchas aplicaciones, el cliente con estado completo costó más de lo que dio.

🎓 Las dos lecciones#

1. Enviar HTML elimina la duplicación de estado. No hay dos copias que sincronizar porque solo hay una.

2. La frontera es la latencia y la desconexión. Donde la interacción tiene que responder sin servidor, hace falta estado local.

🔗 Enlaces#

Fuentes#