Автор Zod собрал Bun-подобный тулкит, который не меняет рантайм Node
Nub запускает TypeScript-файл в 2,9 раза быстрее, чем tsx, и выполняет скрипты package.json в 24 раза быстрее, чем pnpm run. Под капотом — обычный node с Rust-обвязкой.
Nub — бинарник на Rust, подключающий транспилятор oxc к Node через module.registerHooks() и --import preload: TypeScript, JSX и .env загружаются без шага сборки на рантайме, который уже везде есть.
Мейнтейнер ArkType говорит, что перенёс весь монорепозиторий без единой проблемы. Но знаток внутренностей Node поднял вопрос о хуке --require: он может незаметно сломать top-level await в ESM.
Тулкит, который дополняет node, а не заменяет его
Bun и Deno продавали скорость, подменяя рантайм целиком. Nub делает ставку на обратное: оставить stock node, прикрепив быстрые части на Rust. Единый бинарник запускает TypeScript, JSX и JavaScript без шага сборки (nub file.ts), автоматически подгружает .env, .yaml, .toml и .jsonc, а в одном инструменте объединяет пакетный менеджер, раннер скриптов, аналог npx под названием nubx и менеджер версий Node.
Цифры — главный аргумент. Запуск файла: в 2,9 раза быстрее tsx; nub run выполняет скрипты package.json примерно в 24 раза быстрее pnpm run, пропуская JS-бутстрап ради нативного бинарника; nubx обходит npx в 19 раз; установка пакетов — в 2,5 раза быстрее pnpm, с блокировкой postinstall и проверкой вредоносных пакетов через osv.dev. Под капотом — возможности, которые Node приобрёл за последние годы: preload через --import/--require, module.registerHooks() для транспиляции и резолюции, N-API аддоны со встроенным транспилятором oxc.
Происхождение — и те, кто читает хуки
Автор не новичок. Комментатор в треде добавляет контекст, который README не педалирует:
«Главный автор Nub — Колин Макдоннелл, создавший Zod и даже работавший в Bun.» — разработчик, представивший проект
Ранние пользователи появились быстро. Один мейнтейнер open-source сообщает о чистой миграции в масштабе:
«Только что смержил PR с переводом всего монорепозитория на nub. Ноль проблем, невероятно быстро.» — автор ArkType, TypeScript-валидатора
Потом пришли те, кто знает загрузчик Node изнутри, и похвала стала условной. Один насторожился из-за механизма preload:
«Меня удивляет использование хука
--requireвместо--import… интересно, как nub обрабатывает нюансы ESM… Предполагаю, что top-level await затронет значимый процент пользователей.» — разработчик, реализовывавший загрузчик модулей Node
Продакшн-инженер спросил о том, что бенчмарки обходят стороной:
«Можно ли запускать это в продакшне на бэкенде, или всё равно нужно транспилировать и бандлить?.. Каков ожидаемый прирост поверхности атаки?» — инженер, проверяющий продакшн-историю
Главный вопрос Nub — не скорость. Сможет ли стратегия «дополняй, не заменяй» выдержать граничные случаи, которые Bun определял на собственных условиях?
Получайте такие разборы каждый день
Главные истории Hacker News — на email, в Telegram или RSS.
Чтобы опубликовать крейт в Rust, до сих пор нужен аккаунт GitHub
У crates.io с первого дня существует единственный способ войти: аккаунт GitHub. Если GitHub заблокирует вас — или просто упадёт — публикация остановится. В Rust-проекте это признают проблемой уже десять лет.