← Blog
The Nub Team

Nub 0.8.3

Repairs the self-upgrade channel, adds a config field naming the exact Node binary a project runs, and fixes install and runtime issues on shipped binaries.

A patch release that repairs the self-upgrade channel, adds a nodeExecutable config field, and fixes install and runtime issues that only appeared on shipped binaries.

Nub is an all-in-one toolkit for Node.js written in Rust. The nub command is flag-for-flag compatible with node, while adding full support for TypeScript, JSX, tsconfig.json, .env loading, and modern Web and ECMAScript APIs. It also includes a fast script runner (nub run), package runner (nubx), Node version manager (nub node), and pnpm-compatible package manager.

Important

Upgrading from 0.7.5 picks up the whole 0.8.x line. The 0.8.0, 0.8.1, and 0.8.2 releases published to npm but never claimed the GitHub Latest marker, which is what nub upgrade and the install scripts resolve — so the upgrade channel kept serving 0.7.5. This release fixes the pipeline, adds a post-publish check that the channel serves each new release, and moves the channel forward.

nodeExecutable

A project can now name the exact Node binary it runs, above every pin source:

nub.jsonc
{
  // ...
  // a command in $(...) runs, and its output is the path
  "nodeExecutable": "$(mise which node)"
}

The command runs through the platform shell in your working directory, so a directory-aware tool — mise, asdf, fnm, Volta — answers for the project you are actually in. To take whatever Node leads your PATH, ask the shell for it with "$(which node)"; Nub's own node shim is excluded from the answer, so the recipe works even with shims installed. A plain path works too, absolute or relative to the file. The binary's version is still detected, so the support floor and tier selection still apply. Documentation is at nubjs.com/docs/config. (#835)

Runtime and install

PRWhat changed
#834Nested Node processes no longer hang or exit silently under a shipped Nub on the compat tier (Node 18.19–22.14) — the failure behind nub install dying on packages whose install scripts shell out to Node, such as sqlite3.
#836An install that could not run a dependency's build scripts retries them on the next install, instead of recording the tree as complete and reporting "Already up to date" forever.
#839The launcher's Node-version probe cache works under a group-writable umask, instead of silently re-probing on every launch.
#829A compiled --smol executable refuses a discovered Node that cannot run its loader shim, instead of failing at startup on the Node 23.0–23.4 band.

Configuration and CLI

PRWhat changed
#842Setting an .npmrc key that a nub.jsonc install field already answers is refused, naming the field to set instead.
#833Config settings nothing under Nub reads are rejected with a working replacement named per key, and preferFrozenLockfile is now honored.
#831Nub finds pnpm's global config and credentials on Windows the way pnpm does, including on machines with no home directory set.
#838The ci command accepts -P/--prod and -D/--dev, matching pnpm 11, so a Docker build stage can produce a devDependency-free tree.

The full release notes list every change in this release.

Get started

Or paste this "Get Started" prompt into an agent. It will install Nub and explain how it can be used in your project. (It won't make any changes without permission.)