← Все статьи

Bun 1.4: runtime на Rust, ближе к Node.js и меньше памяти

+1517 тестов Node, −до 35% памяти, старт ×2 на Linux; первый стабильный релиз после переписки с Zig на Rust.

Bun 1.4: runtime на Rust, ближе к Node.js и меньше памяти
Содержание

Коротко

Вышел Bun 1.4 — первый стабильный релиз рантайма после переписки с Zig на Rust. Плюс 1517 проходящих тестов из набора Node.js, свыше 2900 закрытых задач, простой ЦП в простое до 5× ниже, память HTTP-серверов ниже на 13–48%, старт на Linux примерно вдвое быстрее. Появились Bun.Image, Bun.WebView, Bun.cron(), параллельный bun test / bun run и правки совместимости.

Что произошло

Команда позиционирует Bun как полный набор для сборки и тестов JS/TS. В 1.4 главный сюжет — не только фичи, а смена языка реализации: 1.3.14 был последним на Zig, 1.4 — на Rust (подробности — в отдельном посте «Rewriting Bun in Rust»). Движок исполнения по-прежнему JavaScriptCore; переписали обвязку: HTTP, бандлер, менеджер пакетов, слой ФС.

Совместимость с Node заметно подтянулась: node:http / fs / stream около 97% собственных тестов Node, часть модулей — 100%. Заработали или улучшились сценарии с Playwright, vitest, OpenTelemetry, Datadog (dd-trace), горячей подменой модулей в Nuxt, рядом npm-пакетов. Нативная реализация веб-потоков проходит 100% тестов веб-платформы на заявленных пайплайнах.

По ресурсам: для Claude Code в проде 99-й процентиль загрузки ЦП упал примерно с 24% до 10%; для крошечного «привет, мир» простой ЦП — до 5×. На нагрузке миллиона запросов Fastify на Bun 1.4 — 120 МБ против 233 МБ в 1.3. Старт hello.js на Linux: 5,1 мс против 10,9 мс. Добавлены профили --cpu-prof / --heap-prof и варианты в Markdown для чтения по SSH, событие process.on("memoryPressure").

Почему это важно

Bun давно спорил с Node за место «быстрого рантайма». 1.4 бьёт сразу по трём болям продакшена: совместимость экосистемы, память долгих процессов и наблюдаемость. Переезд на Rust — ставка на безопасность памяти и инструменты (Miri, санитайзеры, фаззинг), а не только маркетинг «ещё быстрее».

Обновление осознанное: в релизных заметках есть ломающие изменения поведения (в т.ч. разбор YAML 1.2 — ключ on: в GitHub Actions может стать строкой). На Vercel Functions 1.4 уже доступен через явный bunVersion.

На практике

  1. Обновляйтесь через bun upgrade и прогоните полный набор тестов — не только «сервер поднялся».
  2. Сверьте ломающие изменения: YAML, тонкости совместимости с Node 26, поведение потоков.
  3. Если крутите HTTP-сервер на Bun — замерьте резидентную память до/после; ожидания по релизным цифрам — минус двузначные проценты.
  4. Для отладки на сервере без графического интерфейса попробуйте --cpu-prof-md / --heap-prof-md.
  5. На Vercel задайте "bunVersion": "1.4.x" в vercel.json только после проверки ломающих пунктов.

Итог

Bun 1.4 — редкий релиз, где смена языка реализации и заметный скачок совместимости с Node приходят вместе с экономией памяти. Имеет смысл на стенде, не в пятницу вечером на прод без плана отката.