wu-cli Svelte Themes

Wu Cli

Native Zig dev server for wu-framework microfrontends — replaces N Vite processes with a single port. JSX/TSX/Svelte/Vue compilation, HMR, module resolution, and interactive scaffolding.

Wu CLI

Wu CLI

Un binario. Un puerto. Todas tus micro-apps.

npm version Zig 0.16.0 13 frameworks zero deps MIT License

Comandos · Configuración · Seguridad · Contribuir · Changelog


¿Qué es wu-cli?

Wu CLI es un CLI + dev-server nativo en Zig 0.16 para arquitecturas microfrontend (wu-framework). Reemplaza N procesos Vite (uno por micro-app) con un único proceso en un solo puerto que descubre, compila, sirve y hace HMR. Sin dependencias Zig, binario de ~250-460 KB por plataforma, distribuido vía npm.

Lo nuevo en v0.2.2

  • TUI interactivawu create con menús navegables (↑↓ enter), sin defaults escondidos, raw mode cross-platform.
  • DoS hardening — read/write timeouts (30s), límite de body (16 MB), detección de peer-close en SSE/WebSocket. wu serve ya no se cuelga con slowloris.
  • Sentinel real — anti-bot con IP del cliente real (antes hardcoded 127.0.0.1), allowlist de paths legítimos (/robots.txt, /.well-known/*), challenge HTML libre de XSS.
  • Cache LRU + cap de disco — eviction inteligente en memoria, .wu-cache/ capado a 500 MB con sweep periódico.
  • Configuración robusta — parser wu.config.json migrado a std.json (escape sequences correctos, sin desincronizaciones).
  • CORS opt-in en proxy — el Access-Control-Allow-Origin: * ya no se inyecta por defecto; ahora es por regla (cors: true).
  • Modularizacióndev_server.zig adelgazó 10 % extrayendo handlers/proxy.zig y handlers/hmr.zig.
  • build.zig.zon — manifest oficial de paquete Zig (consumible como dependencia, valida versión mínima).

Ver el changelog completo →

Instalación

npm install -g @wu-framework/cli

Requiere Node.js 16+ para instalar. Node.js 18+ a runtime sólo si usas Vue, Svelte, Solid o Angular (React/Preact corren en Zig puro).

Desde fuente

Requiere Zig 0.16.0:

git clone https://github.com/LuisPadre25/wu-cli.git
cd wu-cli
zig build -Doptimize=ReleaseFast
./zig-out/bin/wu --help

Quick Start

wu create my-shop        # Wizard interactivo: nombre, shell, micro-apps, TS
cd my-shop
wu dev                   # Servidor nativo en http://localhost:3000
wu build                 # Producción → dist/
wu serve                 # Servir dist/

El wizard genera estructura tipo:

my-shop/
├── wu.config.json           ← configuración del proyecto
├── package.json             ← deps unificadas
├── shell/                   ← el "host" que monta los micro-apps
│   ├── package.json
│   ├── index.html
│   └── src/main.tsx (o .js)
├── mf-catalog/              ← micro-app 1
│   ├── package.json
│   ├── vite.config.js
│   └── src/App.tsx (o .jsx)
└── mf-cart/                 ← micro-app 2
    └── ...

Comandos

Comando Qué hace
wu create [name] Wizard interactivo (TUI). Con --template <fw> modo no-interactivo.
wu dev Servidor de desarrollo nativo. Un solo proceso, un solo puerto.
wu build Compila todos los micro-apps en paralelo (Vite) → dist/.
wu serve Sirve dist/ con headers de seguridad (timeouts, body-cap).
wu add <framework> <name> Agrega un micro-app a un proyecto existente.
wu install Instala dependencias de todos los micro-apps.
wu info Estado actual del proyecto (apps detectados, puertos, framework del shell).

Referencia completa con todas las flags: docs/cli.md.

Configuración

wu.config.json en la raíz del proyecto:

{
  "name": "my-shop",
  "version": "0.2.2",
  "shell": {
    "dir": "shell",
    "port": 4321,
    "framework": "react"
  },
  "apps": [
    { "name": "catalog", "dir": "mf-catalog", "framework": "react", "port": 5001 },
    { "name": "cart",    "dir": "mf-cart",    "framework": "vue",   "port": 5002 }
  ],
  "proxy": {
    "port": 3000,
    "open_browser": true,
    "/api": { "target": "http://localhost:8080", "rewrite": true, "cors": false }
  }
}

Si no existe, wu auto-descubre micro-apps escaneando subdirectorios con vite.config.* + package.json. El directorio llamado shell se promueve a shell del proyecto.

Schema completo, defaults, ejemplos de proxy: docs/configuration.md.

Frameworks soportados

13 frameworks en una sola CLI. Cada micro-app puede usar uno distinto del shell.

Framework Extensiones Compilación TypeScript
React .jsx, .tsx Zig nativo (JSX) → daemon (TSX)
Preact .jsx, .tsx Zig nativo (JSX) → daemon (TSX)
Vue .vue Daemon (esbuild)
Svelte .svelte Daemon (esbuild)
Solid.js .jsx, .tsx Daemon (babel-preset-solid)
Angular .ts Daemon (esbuild bundle)
Lit .ts, .js TS strip
Stencil .js Passthrough
Alpine.js .js Passthrough
Qwik .jsx Passthrough
HTMX .js Passthrough
Stimulus .js Passthrough
Vanilla .js, .ts TS strip

Arquitectura (resumen)

src/
  cli/                  args, banner, TUI primitives (raw mode, prompts)
  commands/             dev, build, create, add, install, serve, info
    templates/          13 plantillas embebidas en el binario
  config/               loader (std.json) + auto-discovery
  runtime/              ← núcleo del dev server
    dev_server.zig      thread-per-connection HTTP server (~3.3k LOC)
    handlers/           proxy.zig, hmr.zig (extraídos del monolítico)
    http_parser.zig     SIMD HTTP/1.1, 16 bytes/ciclo
    transform.zig       reescritura de imports + alias @/ ~/
    jsx_transform.zig   JSX nativo en Zig (React/Preact)
    compile.zig         pipeline 3-tier (Zig → daemon → fallback)
    resolve.zig         resolución NPM pura en Zig
    cache.zig           2 niveles (LRU 256 entradas + disco capado 500MB)
    ws_protocol.zig     WebSocket RFC 6455
    hypervisor/         watcher OS-nativo + trie router + transform pool
    sentinel/           anti-bot + ACP (AI Content Protocol)

Detalles: docs/contributing.md.

Seguridad

Wu integra varias defensas de bajo nivel:

  • Anti-slowloris: timeouts de 30 s en sockets aceptados.
  • Body-size cap: 16 MB máx por request, 413 si excede.
  • Path-traversal: validación post-URL-decode (isPathSafe).
  • Sentinel: clasificador zero-alloc para bots; AI agents redirigidos a ACP (/.well-known/acp.json).
  • CORS opt-in: el proxy no relaja CORS sin consentimiento explícito.

Configuración para producción y modelo de amenazas: docs/security.md.

Estadísticas

  • 35 archivos Zig fuente, ~9.7k LOC de runtime
  • ~250-460 KB binario release por plataforma
  • 0 dependencias Zig externas
  • 0 procesos Vite simultáneos en dev (un solo binario)

Requisitos

  • Node.js 16+ para npm install -g @wu-framework/cli
  • Node.js 18+ a runtime sólo para Vue, Svelte, Solid o Angular (React/Preact corren en Zig puro)
  • Zig 0.16.0 sólo si construyes desde fuente

Licencia

MIT — ver LICENSE.

Autor

Luis Garcia — creador de wu-framework.


© 2026 Wu Framework

Top categories

Loading Svelte Themes