Зачем ещё один инструмент, если есть Bun?

Экосистема JavaScript в 2026 году переживает настоящую «войну рантаймов». С одной стороны — проверенный годами Node.js, с другой — стремительно набирающий популярность Bun. Bun — это полноценный тулкит для создания JavaScript-приложений, включающий пакетный менеджер, тест-раннер и бандлер. Звучит заманчиво. Но у медали есть обратная сторона.

Несмотря на шесть лет после выхода Deno 1.0 и два с половиной года после Bun 1.0, ни один из них не является первоклассной целью на AWS, GCP или Azure, а их совместимость с Node.js всё ещё уступает оригиналу. Оба — это рантаймы с нуля, переписывающие поверхность Node, и пробелы проявляются в продакшене.

Именно в этот момент на сцену выходит Nub — инструмент, который задаёт провокационный вопрос: а что если не заменять Node.js, а просто сделать его лучше?

«The all-in-one JavaScript toolkit that augments Node.js (instead of trying to replace it)» — такова официальная миссия проекта.

ℹ Что такое Nub?
Nub — это CLI-инструмент, написанный на Rust, который добавляет к стандартному Node.js возможности уровня Bun: полноценный TypeScript, быстрый запуск скриптов, встроенный пакетный менеджер и управление версиями Node — всё в одном бинарном файле, без замены рантайма.

Философия: дополнить, а не заменить

Ключевое архитектурное решение Nub — принципиальный отказ от создания нового рантайма. Nub — это единственный Rust-бинарник, который транспилирует код и выполняет его на стандартном node, который закреплён в вашем проекте — так что рантайм под капотом именно Node.

Ваш код запускается с помощью стандартного node. Nub просто транспилирует код, полифиллит недостающие глобальные API, устанавливает флаги и вносит аддитивные изменения в разрешение модулей Node для улучшения поддержки TypeScript.

Это принципиально отличает Nub от конкурентов. Посмотрим на цифры совместимости:

На тестовом корпусе кросс-рантаймовой совместимости Deno, Nub проходит 98.8% тестов, которые проходит реальный Node, против 77.4% у Deno и 40.5% у Bun.


graph TD
    A[Ваш TypeScript/JSX код] --> B[Nub CLI — Rust бинарник]
    B --> C[Транспиляция через native addon]
    B --> D[Разрешение tsconfig paths]
    B --> E[Полифиллы и флаги]
    C --> F[Стандартный node бинарник]
    D --> F
    E --> F
    F --> G[Выполнение кода]
    style B fill:#e06c75,color:#fff
    style F fill:#61afef,color:#fff
    style G fill:#98c379,color:#fff

Ключевые возможности Nub

1. TypeScript «из коробки» — по-настоящему

Node.js 24 добавил нативную поддержку TypeScript, но с серьёзными ограничениями. Встроенное удаление типов в Node стирает аннотации и отвергает всё остальное — большинство реальных TypeScript-кодовых баз на нём не запустятся.

Nub транспилирует каждый файл через свой нативный аддон, так что enum, namespace, parameter properties и безрасширенные импорты, которые Node не допускает, просто работают — со встроенными source maps, так что трассировки стека и точки останова указывают на TypeScript-источник.

Пример кода, который работает с Nub без какой-либо конфигурации:

import { Model } from "./base" // безрасширенный импорт → ./base.ts

enum Status { Draft, Sent, Paid }

class Invoice extends Model {
  constructor(public status = Status.Draft) {} // parameter property
}

Nub читает tsconfig.json#paths — с baseUrl и полными цепочками extends — и применяет псевдонимы во время выполнения, так что import { db } from "@/db" просто работает.

💡 Скорость запуска
Собственный запуск Nub занимает несколько миллисекунд Rust-кода, что несравнимо мало по сравнению со временем запуска Node, поэтому .ts-файл стартует наравне с обычным node и примерно в 2.9× быстрее, чем tsx, который при каждом запуске загружает esbuild и его loader hooks.

2. Молниеносный скрипт-раннер и nubx

Согласно бенчмаркам проекта: nub run dev работает в 24× быстрее, чем pnpm run, а nubx prisma generate — в 19× быстрее, чем npx.

Почему такой разрыв? Nub устраняет штраф производительности от двойного спавна Node.js, который платят JavaScript-инструменты вроде npx и pnpm.

# Запуск TypeScript без шага сборки
nub index.ts

# Запуск скрипта из package.json (24× быстрее pnpm run)
nub run dev

# Аналог npx/pnpm dlx (19× быстрее npx)
nubx prisma generate
nubx -y cowsay@1.5.0 "hi"

# Нативный watch mode с отслеживанием зависимостей
nub watch src/server.ts

Watch-команда Nub, работающая на основе node --watch, отслеживает изменения в точке входа или в любом транзитивно импортируемом файле. Также добавляет поддержку TypeScript/JSX source maps и следит за package.json, tsconfig и .env файлами.

3. Встроенный пакетный менеджер

Nub — это пакетный менеджер, работающий на движке Aube. При этом он не требует миграции существующих проектов.

Он читает lockfile, который уже есть в вашем проекте — pnpm, npm или bun — пишет обратно тот же формат и защищён от атак на цепочку поставок из коробки.

nub install              # установка зависимостей (pnpm-совместимо)
nub add -E -D react      # точный пин, devDeps — синтаксис флагов pnpm
nub remove lodash
nub ci                   # установка с заморозкой lockfile

Nub автоматически определяет текущий менеджер и обновляет существующий lockfile на месте. Миграция не нужна.

4. Управление версиями Node.js

Nub берёт на себя задачи, которые раньше решались через nvm или fnm:

Nub читает .node-version, .nvmrc или пин engines/devEngines и запускает код на точно указанной версии. Если её нет на машине, Nub скачивает её с nodejs.org, верифицирует контрольную сумму и устанавливает на лету.

# Автоматическое определение и установка нужной версии Node
$ echo 26 > .node-version
$ nub hello.ts
Using Node.js 26.3.0 (resolved from .node-version)
Installed in 9.8s
Hello world!

# Ручное управление версиями
nub node install 26

5. Corepack-совместимые шимы

Corepack-подобная функциональность на нативном Rust: провизионирование и запуск точно той версии pnpm / npm / yarn, которую закрепил проект.

nub pm shim  # регистрирует глобальные шимы (аналог corepack enable)

Сравнение: Nub vs Bun vs tsx vs npx

ВозможностьNubBuntsxnpx
РантаймStock Node.js ✅Собственный ⚠️Stock Node.js ✅Stock Node.js ✅
TypeScript (enum, namespace)
Совместимость с Node API~98.8%~40.5%100%100%
Пакетный менеджер
Управление версиями Node
Скорость запуска .ts~node~node2.9× медленнее
Язык реализацииRustZigTypeScript/JSJavaScript
lock-in / vendor APIНетДаНетНет
CI/CD интеграцияsetup-nub actionsetup-bun action
⚠ Важный нюанс про совместимость
Цифры совместимости Bun в 40.5% по корпусу Deno могут показаться шокирующими. Важно понимать: Bun активно работает над совместимостью, и для большинства популярных npm-пакетов этих 40.5% достаточно. Проблемы возникают в краевых сценариях. Тем не менее для корпоративных проектов с экзотическими зависимостями это реальный риск.

Установка и быстрый старт

Установка занимает одну команду:

# macOS / Linux
curl -fsSL https://nubjs.com/install.sh | bash

# Windows (PowerShell)
irm https://nubjs.com/install.ps1 | iex

# Или через npm
npm install -g --ignore-scripts=false @nubjs/nub

После установки Nub полностью совместим с существующими проектами:

# Запуск TypeScript-файла
nub index.ts

# Установка зависимостей
nub install

# Запуск скрипта из package.json
nub run dev

# Слежение за файлами
nub watch src/server.ts

Для GitHub Actions Nub предоставляет nubjs/setup-nub как прямую замену actions/setup-node — один к одному совместимую.

# Было:
- uses: actions/setup-node@v4

# Стало:
- uses: nubjs/setup-nub@v0
📝 Что Nub делает с .env
Nub читает .env, .env.local и .env.[NODE_ENV] и инжектирует переменные до старта Node. Пакет dotenv не нужен. Автоматическое раскрытие переменных через ${VAR} — как в Vite и Next.js.

Под капотом: как это работает технически

Nub использует относительно новые поверхности расширения Node.js, которых не было, когда создавались Deno и Bun.

В 2025 году Node.js представил синхронную версию API регистрации хуков резолвера (module.registerHooks()) специально для повышения производительности по сравнению со старым асинхронным module.register() API. Это стало большим разблокировщиком для Nub.

Асинхронный API добавлял 19 мс фиксированных накладных расходов на регистрацию плюс около 130 мкс дополнительных накладных расходов на каждый импорт.

Архитектура работы Nub:

  1. Транспиляция в памяти — Nub транспилирует каждый файл в памяти через свой нативный Rust-аддон, затем запускает его на реальном node бинарнике.
  2. Резолвинг путей — Nub читает tsconfig.json (включая extends) и передаёт его пути в собственный резолвер Node через хук module.registerHooks().
  3. Полифиллы — Nub полифиллит API вроде Temporal и Worker, добавляет поддержку нового синтаксиса ECMAScript как using и снимает флаги со всех экспериментальных возможностей Node.js.

Nub в контексте «войны рантаймов»

Чтобы понять значимость Nub, нужно посмотреть на broader контекст. В декабре 2025 года Anthropic приобрёл Bun, развернув его как основную инфраструктуру для Claude Code. Проект остаётся MIT-лицензированным и открытым, но корпоративная поддержка существенно снижает риск заброшенности.

Но даже с таким backing у Bun остаётся фундаментальная проблема: «следующее поколение» рантаймов разделяет один фундаментальный изъян — они пытаются заменить Node.js. Nub вместо этого его обнимает.

Три философии, три продукта:

  • Node.js — стабильность и совместимость, но медленный DX
  • Bun — скорость и современный DX, но свой рантайм и риски совместимости
  • Nub — современный DX на основе Node.js, без vendor lock-in

Nub — это all-in-one тулкит для Node.js, написанный на Rust. Один бинарник запускает TypeScript-файлы и скрипты, устанавливает зависимости и провизионирует Node сам — заменяя node, npm/pnpm, npx и nvm без принятия нового рантайма.

Заключение: кому нужен Nub?

Nub решает конкретную задачу элегантно: вы хотите DX уровня Bun, но не готовы к vendor lock-in и рискам совместимости нового рантайма.

Nub идеально подходит если:

  • У вас корпоративный проект с сотнями npm-зависимостей
  • Вы хотите TypeScript без конфигурации прямо сейчас
  • Команда использует Node.js и менять рантайм — нет
  • Вы устали от цепочки ts-node + nodemon + nvm + pnpm
  • Нужна скорость nub run вместо медленного pnpm run

Stay on Bun если:

  • Вы начинаете greenfield проект
  • Максимальная производительность HTTP критична
  • Vendor lock-in не является проблемой

Проект появился на Hacker News буквально несколько дней назад и уже вызвал бурное обсуждение. Nub — это новый фронтенд для Node: Rust CLI, транспиляция JS/TS/JSX в стиле бандлера, быстрое выполнение скриптов, новый пакетный менеджер на основе Aube и управление версиями Node.

Главный посыл: никакого нового рантайма, никакой vendor-специфичной поверхности API, никакого lock-in. Это честная сделка — и именно поэтому Nub заслуживает внимания каждого Node.js-разработчика в 2026 году.