Bun в 2026
- суббота, 22 августа 2026 г. в 00:00:07
Для кого эта статья: для разработчиков JavaScript/TypeScript, которые хотят узнать о главных событиях и новых возможностях Bun в 2026 году.
2026 год стал переломным для Bun. Переписывание на Rust с помощью Claude Fable 5 за 11 дней показало новые возможности AI‑ускоренной разработки, а 20 августа 2026 вышел Bun v1.4 — первый production‑релиз, полностью работающий на Rust‑версии рантайма (до этого Rust использовался только внутри, например в Claude Code). Версия 1.3.14 добавила Bun.Image, HTTP/3 и Global Virtual Store, а v1.4 принесла резкий скачок совместимости с Node.js и десятки новых встроенных API. Bun стал частью Anthropic после приобретения в декабре 2025.
Команда | Описание | Альтернатива в Node.js |
|---|---|---|
| Выполнение JavaScript/TypeScript файлов |
|
| Быстрый менеджер зависимостей |
|
| Бандлер и минификатор |
|
| Встроенный тест‑раннер |
|
| Инициализация проектов из шаблонов |
|
| HTTP/HTTP2/HTTP3 сервер |
|
| Встроенный SQL‑клиент |
|
Bun изначально поддерживает запуск TypeScript и JSX без отдельного этапа компиляции. Path aliases из tsconfig.json работают из коробки.
Важно: Bun НЕ заменяет статическую проверку типов. Для полноценной проверки используйте tsc --noEmit в CI.
Node.js v24 (LTS 2026) сделал type stripping поведением по умолчанию. Однако между Bun и Node.js остаются важные различия:
Возможность | Bun v1.4 | Node.js v24+ |
|---|---|---|
Запуск.ts файлов | ✅ | ✅ |
JSX поддержка | ✅ Встроенная | ❌ Нет |
Path aliases ( | ✅ Из tsconfig.json | ❌ Игнорируются |
Enums, namespaces | ✅ Работают | ⚠️ Нужен |
Скорость запуска | ~19ms | |
Встроенный бандлер | ✅ | ❌ Нет |
Когда выбрать Bun: JSX/React проекты, использование path aliases, максимальная скорость разработки.
Когда достаточно Node.js: простые.ts скрипты без JSX и path aliases.
bun install
bun run start # или напрямую bun index.ts
bun build index.ts --target node --outfile dist/bundle.js
// tests/example.test.ts import { describe, it, expect } from "bun:test"; describe("sum", () => { it("должен корректно складывать числа", () => { const sum = (a: number, b: number) => a + b; expect(sum(1, 2)).toBe(3); }); });
bun test bun test --watch bun test --parallel # новое в 2026
Bun v1.4 — первый production‑релиз на переписанном Rust‑движке; раньше Rust‑версия жила только внутри Anthropic, в том же Claude Code, а последней Zig‑сборкой оставалась v1.3.14. Старт стал быстрее на 50% на Linux (5.1ms против 10.9ms) и в 2.5 раза на Windows (15.5ms против 39.0ms), простой CPU снизился впятеро, а память HTTP‑серверов под нагрузкой просела на 35–48%.
Совместимость с Node.js сделала самый большой скачок со времён v1.0: в тест‑сьют добавили 1 517 тестов из Node.js, node:http, node:fs, node:sqlite и другие ключевые модули проходят 97–100% из них, а Playwright, Next.js 16, vitest и OpenTelemetry просто заработали. Из нового — Bun.markdown, Bun.Archive, Bun.JSON5/JSONC/XML/TOML: ещё 15 npm‑зависимостей заменены нативным кодом. Windows ARM64 получил официальную поддержку.
Показательнее всего цифры из продакшена самого Anthropic: у Claude Code p99 использования CPU упал с 24% до 10%, p50 — с 5.8% до 2.5%.
Часть комьюнити раскритиковала AI‑driven переписывание за более чем 13 000 unsafe‑блоков в итоговом Rust‑коде — для сравнения, в написанных вручную Rust‑проектах сопоставимого размера их в среднем около 70 — и за то, что крупнейший в истории GitHub PR проверили только AI‑агенты (coderabbitai и claude), без единого человека в ревью. 99,8% пройденного тест‑сьюта с первого раза звучит впечатляюще, но это не то же самое, что живой человек, читающий диф на миллион строк — здесь есть за что поволноваться, и это нормально. Апгрейд через bun upgrade хотя бы не требует breaking changes.
Bun v1.3.14 — последняя стабильная версия на Zig перед переходом на Rust: принесла Bun.Image (обработка изображений в 7 раз быстрее sharp), HTTP/3 и QUIC в Bun.serve() и fetch(), Global Virtual Store (установка пакетов из кэша в 7 раз быстрее) и Bun.Terminal — терминальные API на Windows через ConPTY.
Bun переписали с Zig на Rust за 11 дней с помощью Claude Fable 5 — 535 496 строк Zig превратились в больше миллиона строк Rust за 6 502 коммита, до 64 Claude‑агентов работали параллельно, а счёт за API вышел на ~$165 000 (5,9 млрд токенов).
Результат: бинарник похудел примерно на 20%, попутно исправили 128 багов, утечки памяти в Bun.build() упали с 6 745 MB до 609 MB — более чем в 11 раз, — и тесты прошли на 100% на всех платформах.
Причина переписывания прозаична: в Zig‑версии нашли 13 уязвимостей памяти (use‑after‑free, double‑free, утечки), а Rust ловит такие вещи на уровне компилятора. Прежде чем стать production‑версией в v1.4, переписанный код три месяца обкатывался внутри самого Bun, в том числе в Claude Code.
Bun был приобретен Anthropic и теперь используется как основа для Claude Code и Claude Agent SDK. Bun остаётся open source под MIT‑лицензией.
Встроенная обработка изображений, 7x быстрее альтернатив:
import { Image } from "bun"; const img = new Image(await Bun.file("photo.jpg").arrayBuffer()); const resized = await img.resize(800, 600); const webp = await resized.webp();
Поддержка: JPEG, PNG, WebP, GIF, BMP, HEIC, AVIF.
Headless браузер без Puppeteer и Playwright:
const webview = await Bun.WebView.open("https://example.com"); const screenshot = await webview.screenshot(); await webview.close();
import { cron } from "bun"; cron("0 * * * *", () => { console.log("Каждый час"); });
Встроенный SQL‑клиент без внешних зависимостей:
import { sql } from "bun"; const users = await sql`SELECT * FROM users WHERE id = ${userId}`;
Поддержка: PostgreSQL, MySQL, MariaDB, SQLite.
bun ./README.md # рендерит markdown в терминале
Программный markdown‑парсер — рендер в HTML, React или собственный формат:
import { markdown } from "bun"; const html = markdown.toHTML("# Привет, **Bun**!"); const react = markdown.toReact("- один\n- два");
Создание и распаковка архивов без tar/node-tar:
import { Archive } from "bun"; const archive = new Archive(); await archive.add("dist/", { recursive: true }); await archive.write("release.tar.gz"); await Archive.extract("release.tar.gz", { to: "./out" });
Встроенные парсеры форматов — ещё 15 npm‑зависимостей стали не нужны:
import { JSON5, JSONC, XML, TOML } from "bun"; JSON5.parse("{ unquoted: 'ok', trailing: 1, }"); JSONC.parse("{ /* comment */ \"a\": 1 }"); XML.parse("<root><item>1</item></root>"); TOML.parse("[server]\nport = 8080");
Bun.serve({ port: 443, tls: { /* ... */ }, // HTTP/3 включается автоматически с TLS fetch(req) { return new Response("Hello HTTP/3!"); }, });
В v1.4 экспериментальная поддержка HTTP/2 и HTTP/3 добавлена и в клиентский fetch():
await fetch("https://example.com", { protocol: "http3" });
bun test --parallel # параллельное выполнение bun test --isolate # изоляция тестов bun test --shard=1/4 # шардинг для CI bun test --changed # только измененные тесты bun test --timings # шардинг по реальному времени выполнения (v1.4)
bun build ./app.ts --compile --target=browser # Результат: один .html файл bun build ./app.ts --compile --asset ./data.db # Встраивает файл в скомпилированный бинарник (v1.4)
Новые команды для обслуживания зависимостей:
bun audit fix # автоматически патчит уязвимости bun dedupe # убирает дублирующиеся версии из lockfile bun prune # удаляет неиспользуемые пакеты bun pm diff # сравнивает версии пакетов bun pm licenses # отчёт по лицензиям зависимостей
Встроенный React Compiler — в 19 раз быстрее babel‑плагина — плюс tree‑shaking barrel‑файлов, markdown‑отчёты о бандле и поддержка стандартных TC39-декораторов:
bun build ./app.tsx --react-compiler bun build ./app.ts --metafile-md=report.md
bun --cpu-prof-md ./app.ts # markdown-отчёт профилирования CPU bun --heap-prof-md ./app.ts # markdown-отчёт по куче bun run --parallel "build:*" # параллельный запуск нескольких скриптов
process.on("memoryPressure", (level) => { console.log("ОС сообщает о нехватке памяти:", level); });
Метрика | Bun v1.4 | Node.js v26 | Deno v2.5 |
|---|---|---|---|
Cold start (Linux) | ~19ms | ~18ms | |
HTTP throughput | 290k req/s | 71k req/s | ~75k req/s |
Установка пакетов | 4.2s | 38s (npm) | 35s |
Сборка 50k строк | 1.1s | - | - |
По данным Bun, переход Rust‑версии в production дал заметный прирост в реальных сценариях:
Метрика | v1.3 (Zig) | v1.4 (Rust) | Изменение |
|---|---|---|---|
Старт на Linux | 10.9ms | 5.1ms | −50% |
Старт на Windows | 39.0ms | 15.5ms | в 2.5 раза быстрее |
Простой CPU | база | −5x | |
Размер бинарника (Linux/Windows) | база | −17% | |
| база | до 4.6x быстрее | |
Регулярные выражения | база | 138–200x быстрее | |
FFI‑вызовы ( | база | 3x быстрее |
Память HTTP‑серверов под нагрузкой на 1M запросов:
Фреймворк | v1.3 | v1.4 | Снижение |
|---|---|---|---|
Fastify | 233 MB | 120 MB | −48% |
Express | 169 MB | 92 MB | −46% |
| 135 MB | 81 MB | −40% |
В продакшене Claude Code, который уже несколько месяцев работал на Rust‑версии, p99 использования CPU снизился с 24% до 10%, а p50 — с 5.8% до 2.5%.
Сценарий | npm v12 | pnpm v11 | bun v1.3 |
|---|---|---|---|
Чистая установка | 40s | 15s | 7s |
С кэшем | 18s | 5.5s | 2.5s |
Монорепо | 110s | 22s | 12s |
На тестовом Next.js‑приложении (T3 stack) Bun v1.4 устанавливает зависимости ещё быстрее: первая установка — 1.41s (в 15 раз быстрее npm), свежий чекаут с кэшем — 251ms (в 30 раз быстрее), CI без кэша — 951ms (в 19 раз быстрее), CI с кэшем — 210ms (в 21 раз быстрее).
Бери не глядя: локальную разработку и CLI‑инструменты, новые проекты на TypeScript/JSX, CI/CD (5–8x на установке зависимостей, местами в v1.4 и все 20–30x) и full‑stack приложения со встроенным SQL. Windows‑разработка тоже сюда — включая ARM64, который теперь официально поддерживается и стартует в v1.4 в 2.5 раза быстрее.
С осторожностью: HTTP/3 в Bun.serve() и fetch() пока экспериментальный, в прод его тащить рано. Совместимость с нативными N‑API‑модулями в v1.4 подросла заметно, но процент прохождения тестов — не гарантия для конкретного модуля в конкретном проекте, тестировать всё равно придётся руками. Cold start сократился в разы, что хорошо для serverless, но насколько именно — зависит от платформы, а не только от рантайма. Для приложений с жёсткими лимитами памяти Bun остаётся менее предсказуемым выбором, чем Node.
Идея Bun — не добавить ещё один инструмент в node_modules, а убрать из него как можно больше. К v1.4 Bun заменил нативными реализациями уже 15+ популярных npm‑зависимостей — вместо десятков пакетов в package.json можно обойтись одним рантаймом:
Задача | Типичные npm‑пакеты | Нативная замена в Bun | С какой версии |
|---|---|---|---|
Обработка изображений |
|
| v1.3.14 |
Headless‑браузер |
|
| v1.3.12 |
SQL‑клиент |
|
| v1.3 |
Cron‑задачи |
|
| v1.3.12 |
Псевдотерминал |
|
| v1.3.14 |
Markdown‑рендер |
|
| v1.4 |
Архивы |
|
| v1.4 |
JSON5 |
|
| v1.4 |
JSON с комментариями |
|
| v1.4 |
XML |
|
| v1.4 |
TOML |
|
| v1.4 |
Тест‑раннер |
|
| v1.3–1.4 |
Бандлер |
|
| встроено |
React Compiler |
|
| v1.4 |
Менеджер пакетов |
|
| встроено |
Проверка лицензий |
|
| v1.4 |
Дедупликация зависимостей | ручной |
| v1.4 |
Поиск неиспользуемых пакетов |
|
| v1.4 |
Патчинг уязвимостей |
|
| v1.4 |
Автоперезапуск |
|
| встроено |
Параллельные скрипты |
|
| v1.4 |
Переменные окружения |
| встроенная поддержка | встроено |
Запуск TypeScript |
|
| встроено |
Не все замены drop‑in — специфичные webpack‑лоадеры или продвинутые Puppeteer‑сценарии никуда не денутся, и сторонний пакет там останется нужен. Но для типового full‑stack TypeScript‑проекта в 2026 году package.json реально можно ужать в разы, оставив bun практически единственной зависимостью.
Ссылки: