Web Storage
Session storage works out of the box; persistent local storage turns on once you point it at a backing file.
Web Storage works under Nub without a flag to remember. Node hides sessionStorage and localStorage behind --experimental-webstorage on the 22.4–24 band (native from 25), so Nub injects that flag for you on exactly that band — you never pass it. Below Node 22.4 the flag does not exist and Web Storage is unavailable.
Session storage
The sessionStorage global is in-memory and per-process: it is created fresh each run and discarded when the process exits, never touching disk. It works out of the box on Node 22.4+ — nothing to pass:
sessionStorage.setItem("step", "1");
sessionStorage.getItem("step"); // "1"
sessionStorage.length; // 1
sessionStorage.key(0); // "step"
sessionStorage.removeItem("step");
sessionStorage.clear();A short walkthrough of a multi-step flow within one run:
sessionStorage.setItem("cursor", "0");
for (const page of pages) {
const seen = Number(sessionStorage.getItem("cursor"));
process(page, seen);
sessionStorage.setItem("cursor", String(seen + 1));
}
console.log(sessionStorage.getItem("cursor")); // pages.lengthCaptured from Nub on Node 22.15.0 (no flag, no file passed):
$ nub session.ts
1
length 1Local storage
The localStorage global persists across runs, so it needs a file on disk to write to. Pass --localstorage-file <path> and Nub forwards it to Node verbatim. Until you do, localStorage is undefined, so typeof localStorage === "undefined" is a feature check. Name a backing file and the global comes alive:
localStorage.setItem("token", "abc123");
localStorage.getItem("token"); // "abc123"
localStorage.length; // 1
localStorage.key(0); // "token"
localStorage.removeItem("token");
localStorage.clear();Name the backing file and values survive between runs:
$ nub --localstorage-file=./app.db write.ts
abc123
$ nub --localstorage-file=./app.db read.ts
abc123The --localstorage-file flag is also honored when set in NODE_OPTIONS.
Your explicit webstorage flag wins
If you pass --experimental-webstorage (or --no-experimental-webstorage) yourself, Nub respects it and injects nothing. The version band is encoded in crates/nub-core/src/node/flags.rs: the flag exists from Node 22.4.0, is required through 24.x, and is unflagged from 25.0.0 on.
Web Workers
A browser-style worker API on stock Node — the full constructor, messaging, and event surface, on every supported version.
Watch modenub watch
Restart-on-change for files and scripts, driven by the resolved dependency graph plus your environment files, tsconfig, and package manifest — no glob hygiene required.