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.
El modelo
Sección titulada «El modelo»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.
Qué no es Wu
Sección titulada «Qué no es Wu»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 tú 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.
Cuándo encaja
Sección titulada «Cuándo encaja»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.
Qué trae de fábrica
Sección titulada «Qué trae de fábrica»| 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.
Siguiente
Sección titulada «Siguiente»Instálalo y luego construye tu primera micro-app.
