Вышла новая штука для тех, кто держит JavaScript-серверы в продакшене. Разработчики из solenopsys сделали Cruller — форк последней версии Bun, написанной на Zig. Только урезали всё лишнее и перетащили на чистый Zig 0.16.
Cruller оставил только то, что реально нужно для работы уже собранного сервера: JavaScriptCore, Bun.serve, протоколы HTTP/1-3, WebSockets, fetch, потоки, Blob, Request/Response, статическую раздачу файлов и модульный резолвер для готового JavaScript. А выкинули пакетный менеджер, бандлер, транспайлер, шелл, раннер тестов, N-API, поддержку SQL, архивов и прочие разработческие штуки.
Самое интересное — как отделили рантайм от старой сборки Bun с пропатченным Zig. Теперь у Cruller стандартный граф сборки Zig 0.16, есть прослойки совместимости для API, которые поменялись с версии Zig 0.15, и модуль для встраивания сгенерированного кода внутрь бинарника. Благодаря этому релизные сборки не тащат за собой JS-файлы из папки сборки — всё уже внутри, переносимо.
Главная идея: это не замена Bun, а именно рантайм. Загрузчик минимальный — грузит готовую точку входа. Никакой установки пакетов, сборки TypeScript, bun test — всё за скобками.
На Linux x64 сравнили со свежим Bun 1.3.14. Cruller в режиме ReleaseFast (stripped) весит 73 мегабайта. Официальный Bun — 88.5 мегабайта. Экономия около 18%. Бенчмарк V8 Crypto pure-JS показал одинаковую производительность — разница в медиане в пределах 2%, это обычный разброс.
Сейчас проходят проверки Zig-семантики, релизные сборки, точки входа CJS/ESM, тесты путей Node, и плюс smoke-тест для HTTP через Bun.serve и встроенного fetch(). Собирается только на Zig 0.16, цель сборки — Linux x64. Проект ещё в работе, но уже можно смотреть.