Cruller: un fork reducido de Bun que migra a Zig 0.16 como runtime para servidores JavaScript

Fuentes: Cruller: a reduced Bun fork running on Zig 0.16 for prebuilt JavaScript servers

Cruller es un fork del último release de Bun basado en Zig, recortado a las piezas necesarias para ejecutar servidores JavaScript ya compilados y portado a Zig 0.16 vanilla. El proyecto conserva JavaScriptCore, Bun.serve, HTTP/1-3, WebSockets, fetch, streams, Blob, Request/Response, el servidor de archivos estáticos y el resolvedor de módulos para JavaScript preconstruido. Elimina el gestor de paquetes, el bundler/transpiler, el shell, el test runner, la mayor parte del CLI, N-API, los clientes SQL, el soporte de archivos comprimidos y otros subsistemas orientados al desarrollo.

La parte interesante del porte fue separar el runtime de la antigua integración de Bun con un Zig parcheado. Cruller cuenta ahora con un grafo de construcción en Zig 0.16 puro, shims de compatibilidad para APIs que cambiaron desde Zig 0.15 y un módulo de embedding de código generado para que los builds de release sigan siendo portables en lugar de cargar JS generado desde el directorio de build en tiempo de ejecución.

La decisión central de diseño es tratar el proyecto como un runtime, no como un reemplazo generalista de Bun: un lanzador mínimo carga un entrypoint preconstruido, y quedan fuera del alcance las funciones que requieren instalación de paquetes, bundling, transformación de TypeScript o bun test.

Las mediciones actuales en Linux x64, comparadas con el binario oficial de Bun 1.3.14, arrojan: runtime Cruller ReleaseFast stripped 73,0 MiB frente a 88,5 MiB de Bun oficial, una reducción de tamaño cercana al 18%. En el benchmark V8 Crypto pure-JS, Cruller alcanzó paridad de rendimiento, con una mediana un 2% por encima, dentro de la varianza normal entre ejecuciones. Zig 0.16.0 es la versión usada y Linux x64 es, por ahora, la única plataforma soportada. Cruller sigue en desarrollo, aunque pasan las comprobaciones semánticas de Zig, los builds de release, entrypoints CJS/ESM, pruebas de rutas Node y un smoke test con Bun.serve HTTP más fetch integrado. La IA se empleó como asistente de ingeniería para parte del porte a Zig 0.16, investigación de build/debug y trabajo focalizado de tests, mientras que el alcance, las decisiones de arquitectura, la revisión de cambios y la verificación siguen siendo responsabilidad del maintainer.