Ir al contenido

Qué es Wu

Wu es un runtime para micro-frontends: aplicaciones front-end que se construyen y despliegan de forma independiente y comparten una misma página.

El problema que resuelve es organizativo antes que técnico. Cinco equipos publican cinco partes de la misma pantalla. Quieren desplegar a su propio ritmo, elegir su propio framework y no romperse entre sí. Wu es la capa que permite a esos cinco bundles coexistir sin un build compartido.

Tres ideas, y todo lo demás se deriva de ellas.

Una app es una URL que llama a wu.define(). Sin integración con el build, sin plugin de webpack, sin configuración de bundler compartida. Una micro-app es un directorio que sirves por HTTP con un manifiesto wu.json y un bundle de JavaScript. El bundle registra un ciclo de vida cuando se ejecuta:

wu.define('cart', {
mount(container) { /* renderiza dentro del container */ },
unmount(container) { /* limpia */ },
});

Los adaptadores escriben eso por ti — wuReact.register('cart', App) es lo mismo con el renderizado de React ya conectado.

Cada app recibe un Shadow DOM. El shell entrega a cada app un contenedor dentro de un shadow root. El CSS no puede filtrarse hacia dentro ni hacia fuera salvo que lo pidas. Esto es lo que convierte “una app con Tailwind junto a una app con Bootstrap” en algo trivial.

Las apps se comunican por un sustrato, no por imports. Un bus de eventos, un store compartido y contratos de capacidades versionados. Ninguna app importa el código de otra, así que ninguna app puede romper el build de otra.

Ser claro en esto te ahorra tiempo de evaluación.

No es un bundler ni una herramienta de build. Wu no opina sobre cómo construyes tu app. Vite, webpack, esbuild, una etiqueta script escrita a mano — si produce un bundle que llama a wu.define(), funciona.

Comparte el runtime del framework, pero por convención tuya. Los adapters de React, Vue, Preact, Solid, Angular y Alpine miran primero el global antes de importar: si el shell expone window.React, todas las apps de React lo reutilizan y hay una sola copia en la página. Lo que Wu no tiene es negociación de versiones — la condición es literalmente if (window.React && window.ReactDOM), sin comparar nada. Si el shell expone React 18 y tu app se compiló contra React 19, Wu usará el 18 y el fallo aparecerá más tarde, en runtime. Eso es justo lo que el requiredVersion de Module Federation sí detecta. Ver comunicación.

No es una barrera de seguridad frente a código hostil. Los modos de sandbox aíslan globales y garantizan la limpieza para código que controlas. El código que intente escapar activamente escapará — mira el modelo de amenazas. Para código de terceros genuinamente no confiable necesitas una barrera de origen cruzado.

Wu encaja bien cuando:

  • Varios equipos son dueños de partes de una misma pantalla y despliegan de forma independiente.
  • Esos equipos usan frameworks distintos, o estás migrando de uno a otro y necesitas ambos vivos a la vez.
  • Necesitas aislamiento de CSS sin pagar el peaje del iframe.
  • Quieres que la página funcione sin JavaScript en el primer pintado (SSR) manteniendo el aislamiento.

Encaja mal cuando:

  • Tienes un solo equipo y un solo framework. Usa un router.
  • El tamaño del bundle es tu restricción principal y tus apps comparten un runtime de framework grande. Los singletons compartidos de Module Federation le ganarán a Wu en bytes.
  • Necesitas ejecutar código genuinamente adversario. Usa un iframe de origen cruzado.
Capacidad Qué te da
13 adaptadores de framework Registro en una línea por framework
3 modos de sandbox module, strict (iframe), eval (iframe, scripts clásicos)
3 modos de aislamiento CSS shared, isolated, fully-isolated
Bus de eventos Pub/sub con espacios de nombres, comodines, replay, validación de origen
Store compartido Estado reactivo por rutas con puntos, más sincronización CRDT entre pestañas
Contratos de capacidades provide / consume con semver y comprobación de forma
SSR Marcado renderizado en servidor, encapsulado, con hidratación
RBAC Montaje restringido por rol
Keep-alive Oculta y restaura apps con el estado intacto
Timeline Viaje en el tiempo entre frameworks sobre el store y los eventos
Prefetch Speculation Rules con una cadena de respaldo
Overrides de QA Apunta una app a otra URL mediante una cookie
Capa de IA Tool calling con tu propio LLM, agentes, MCP

Cero dependencias en tiempo de ejecución. Unos 119 KB para el core ESM, con la capa de IA y los modos de sandbox en chunks perezosos que solo pagas si los usas.

Instálalo y luego construye tu primera micro-app.