Configuración y descubrimiento
Campos realmente leídos de wu.config.json, puertos, comandos y metadatos de montaje.
Consulta las versiones, cambios y requisitos en Framework 4.0 y CLI 1.2.
Archivo de proyecto
Los comandos buscan wu.config.json en el directorio de trabajo. No hay un flag global --config ni un comando wu config. Las rutas se interpretan desde la raíz donde se ejecuta la CLI.
{
"name": "conocimiento",
"version": "1.1.0",
"shell": {
"dir": "shell",
"framework": "astro",
"port": 4321,
"dev_cmd": "npx astro dev",
"build_cmd": "npx astro build"
},
"apps": [
{
"name": "busqueda",
"dir": "mf-busqueda",
"framework": "react",
"port": 5001,
"dev_cmd": "npx vite",
"build_cmd": "npx vite build"
},
{
"name": "explorador",
"dir": "mf-explorador",
"framework": "vue",
"port": 5002
}
],
"proxy": {
"port": 3000,
"open_browser": false,
"/api": {
"target": "http://127.0.0.1:8080",
"rewrite": true,
"cors": false
}
},
"shared": ["react", "react-dom/client"],
"security": {
"enabled": true
}
}
version es metadato de configuración. El ejecutable sigue utilizando la versión compilada en main.zig; editar ese campo no actualiza la CLI.
Shell y aplicaciones
| Campo | Valor por defecto | Uso |
|---|---|---|
shell.dir |
shell |
Directorio del anfitrión |
shell.framework |
vanilla |
Selecciona tratamiento del shell |
shell.port |
4321 |
Puerto del proceso en modo Vite |
shell.dev_cmd |
Cadena vacía | Comando del shell en modo Vite |
shell.build_cmd |
Cadena vacía | Con fallback a Astro, Next o Vite según framework |
apps[].name |
Cadena vacía | Identificador de app para el catálogo |
apps[].dir |
Cadena vacía | Directorio local y clave de overrides |
apps[].framework |
vanilla |
Selección de compilador/plantilla |
apps[].port |
0 |
Puerto de la app en modo Vite |
apps[].dev_cmd |
npx vite |
Comando de desarrollo legado |
apps[].build_cmd |
npx vite build |
Comando de construcción |
El parser acepta únicamente los campos que consume. No valida una topología completa como lo haría un esquema estricto: muchos valores de tipo incorrecto mantienen el valor por defecto. Declara explícitamente nombres, directorios y puertos, y revisa el resultado con wu info.
Metadatos que llegan al navegador
| Campo en cada app | Valores / significado |
|---|---|
fullBleed o full_bleed |
Booleano para que el shell pueda conceder ancho completo |
domOwnership o dom_ownership |
wu, app o light |
nativeShadow o native_shadow |
Alias legado opcional; conviene expresar ownership explícito |
grants |
Lista de capacidades que el host concede como máximo |
compatibility |
strict o v2 |
Estos campos viajan al catálogo de desarrollo y al resultado de build. Conceder un grant en el host no sustituye la solicitud correspondiente en wu.json. fullBleed comunica una preferencia de presentación; el shell debe consumirla al disponer el contenedor.
Proxy y puertos
En modo nativo, la prioridad de puerto es wu dev --port, después proxy.port, después 3000. La prioridad de apertura es --open o --no-open, después proxy.open_browser, cuyo defecto es true.
Cada clave de proxy que empieza con / define una regla. Puede ser una cadena con el origen destino o un objeto con target, rewrite y cors. rewrite: true retira el prefijo: /api/users se reenvía como /users. cors es optativo.
El proxy implementado admite orígenes http://; rechaza TLS/https://, credenciales y destinos ambiguos. No declares una URL con rutas como si fuera un origen. Los puertos de shell y apps pertenecen al modo de procesos Vite; no crean listeners separados en el servidor nativo.
Opciones nuevas de desarrollo y build
{
"dev": { "allowedHosts": ["mi-tunel.example.com"] },
"build": { "keepPreviousBuilds": 2 },
"security": { "upgradeInsecureRequests": false }
}
dev.allowedHosts (allowed_hosts) amplía los hosts permitidos para Host, CORS y WebSocket; no cambia la interfaz de escucha. build.keepPreviousBuilds (keep_previous_builds) conserva archivos con hash de builds anteriores, con defecto 2. security.upgradeInsecureRequests (upgrade_insecure_requests) fuerza la directiva CSP; si falta, WU la omite cuando hsts es off o hay orígenes HTTP configurados.
Al recargar configuración se conservan grants, modo de manifest y opciones de layout. Las apps añadidas pasan al router y al watcher; una escritura sin cambios no fuerza recarga. Directorios ./mf-a o mf-a/ se normalizan como mf-a.
Descubrimiento automático
Si falta el archivo, varios comandos inspeccionan subdirectorios inmediatos y reconocen señales de proyecto y dependencias. Solo el directorio llamado exactamente shell se convierte en shell. Los demás candidatos se tratan como microapps.
El descubrimiento reconoce el adaptador importado y nombres exactos de dependencias: Preact no se confunde con React y Qwik/Stencil se detectan. Ordena directorios y asigna puertos libres desde 5001 sin colisionar con el shell; los puertos explícitos se respetan.
La detección usa heurísticas; no replica toda la matriz de plantillas ni sustituye la intención de un manifiesto explícito. Con un JSON malformado se informa el error y se desactiva el descubrimiento para evitar operar sobre una topología accidental. Corrige el archivo antes de seguir.
CLI 1.2.0 acepta manifest: "define" en cada app y security.frameOrigins para los iframes remotos. Los orígenes de frames solo entran en frame-src; no habilitan scripts ni conexiones del host. El filtro de navegación de catálogos no bloquea su lectura por fetch. Consulta apps remotas y build.
Referencia de implementación
wu-cli/src/config/config.zigwu-cli/src/config/discovery.zigwu-cli/src/runtime/allowed_hosts.zigwu-cli/src/runtime/dev/config_reload.zigwu-cli/src/runtime/handlers/proxy.zig