Nub vs Vite+
How Nub and Vite Plus overlap and where their goals diverge — Nub is a full package manager and a better runtime on stock Node; Vite Plus is an integrated frontend toolchain.
Nub and Vite+ overlap on the everyday Node workflow — both run your package.json scripts, both run package binaries, and both provision the right Node version for a project on the fly — but their goals are ultimately very different. Nub is a better developer experience on top of stock node; Vite+ is the integrated frontend toolchain from the Vite team.
| Functionality | Nub | Vite+ |
|---|---|---|
Script runner (npm run equivalent) | ✅ | ✅ |
Bin runner (npx) | ✅ | ✅ |
Node.js version manager (nvm) | ✅ | ✅ |
TypeScript runner (tsx) | ✅ | ❌ |
| Package manager | ✅ | ❌ — passthrough |
Package manager shims (corepack) | ✅ | 🟡 — npm only |
| Dev server | ❌ — bring your own | ✅ — Vite |
| Bundler | ❌ — bring your own | ✅ — Rolldown |
| Formatter | ❌ — bring your own | ✅ — Oxfmt |
| Linter | ❌ — bring your own | ✅ — Oxlint |
| Type checker | ❌ — bring your own | ✅ — tsgo (embedded) |
| Test runner | ❌ — bring your own | ✅ — Vitest |
Running files
Both tools run a file, and both fetch the project's Node version on demand — the difference is what happens to the file in between.
nub app.ts # augmented, on stock Node
vp node app.ts # plain NodeRunning a file with Nub augments it — the batteries-included feel of a runtime like Bun, still on the stock node binary:
- TypeScript — the full syntax surface: enums, decorators, parameter properties,
import =, and extensionless imports - JSX —
.jsxand.tsxrun directly, with the runtime resolved from yourtsconfig - Module resolution —
paths,baseUrl, andextendsfromtsconfig, applied at runtime - Env files —
.envand.env.[mode]loaded automatically - Data imports — YAML, TOML, JSON5, JSONC, and text files load like JSON
- Polyfilled APIs —
Worker, web storage,Temporal,URLPattern, and other newer globals
Vite+ runs files through vp node, but that path is unaugmented: it defers to Node's own native type-stripping, with no tsconfig-aware resolution and none of those loaders or polyfills.
This is transpilation, not type-checking — Nub runs the TypeScript above but never type-checks it. For that, bring your own type checker.
Package management
Nub is a full package manager, powered by the embedded aube engine — it resolves the dependency graph, links node_modules, and round-trips whatever lockfile your project already uses. Vite+ is a passthrough to an existing package manager: in a pnpm project, vp install runs pnpm's install.
The frontend toolchain
Vite+ is far broader in scope. It bundles the whole frontend toolchain — the dev server, bundler, formatter, linter, type checker, and test runner named in the table above — as one tested stack. Nub is deliberately unopinionated there, leaving those choices to whatever tools and frameworks you pull in as devDependencies.