Zod's creator builds a Bun-like toolkit that keeps stock Node
Nub runs your TypeScript file 2.9x faster than tsx and dispatches package.json scripts 24x faster than pnpm run. The twist: there is no new runtime underneath, just plain node with Rust glue.
Nub is a Rust binary that wires the oxc transpiler into Node through module.registerHooks() and an --import preload, so TypeScript, JSX and .env load with no build step on the runtime everyone already ships.
An ArkType maintainer says he merged a whole monorepo onto it with zero issues. But a Node internals reader flags the --require hook choice, warning it could quietly break top-level await in ESM.
A toolkit that augments node instead of replacing it
Bun and Deno sold speed by swapping the runtime out from under you. Nub takes the opposite bet: keep stock node, bolt the fast parts on in Rust. It is a single binary that runs TypeScript, JSX and JavaScript with no build step (nub file.ts), loads .env, .yaml, .toml and .jsonc automatically, and ships a package manager, a script runner, an npx equivalent (nubx) and a Node version manager in one tool.
The numbers are the pitch. File startup lands 2.9x faster than tsx; nub run dispatches package.json scripts about 24x faster than pnpm run by skipping JS bootstrap for a native binary; nubx beats npx by 19x; installs come in 2.5x faster than pnpm, with postinstall blocking and malicious-package checks against osv.dev. It works because Node grew the right seams since the last generation of tools shipped: --import/--require preloads, module.registerHooks() for transpilation and resolution, and N-API addons embedding the oxc transpiler.
The pedigree, and the people who read the hooks
The author is not a newcomer. As one commenter in the thread supplies the context the README understates:
"the main author of Nub is Colin McDonnell who created Zod and even worked at Bun at some point." — a developer placing the project
Early adopters arrived fast. One open-source maintainer reports a clean migration at scale:
"Just merged a PR migrating our entire monorepo to nub. 0 issues, ridiculously fast." — the author of ArkType, a TypeScript validator
Then the people who actually know Node's loader showed up, and the praise got more conditional. One raised an eyebrow at the preload mechanism:
"I'm surprised to see this using a
--requirehook (rather than--import)… it makes me wonder about nuances in nub's ESM support… I'd expect top-level await to affect a meaningful subset of users." — a Node module-loader implementer
And a production engineer wanted the part the benchmarks skip:
"Am I expected to be able to run this in production on the backend, or do I still need to transpile and bundle?… What would be the expectations in terms of added attack surface?" — an engineer probing the production story
The interesting question Nub poses is not whether it is fast. It is whether "augment, don't replace" survives contact with the edge cases Bun got to define on its own terms.
Get breakdowns like this every day
The top Hacker News stories, unpacked — by email, Telegram, or RSS.
To publish a Rust crate, you still need a GitHub account
Crates.io has had only one way to log in since day one: a GitHub account. If GitHub bans you, or just goes down, you can't ship. The Rust project agrees this is bad and has agreed for a decade.