... in the previous chapters...
47-day TLS certificates: what changes from 2026 to 2029, and how to check your Node.js apps
Public TLS certificates now last at most 200 days, will last 100 days from March 2027 and 47 days from 2029, and big services like Sentry are moving from DigiCert to Let's Encrypt and Google Trust Services. Here's the schedule from the CA/Browser Forum rules, what breaks (manual renewals, certificate pinning, mTLS with public certificates, old Node.js trust stores), and four tested Node.js scripts: an expiry and chain checker, an ACME Renewal Information (ARI) lookup, an mTLS test, and the NODE_EXTRA_CA_CERTS and --use-system-ca trust options.
React 19.3 use(browser()): render browser-only components without hydration errors or useEffect hacks
React 19.3 adds browser() from react-dom: call use(browser()) in a component that needs localStorage, the time zone or another browser API, and the server renders the nearest Suspense fallback instead. Tested with server and browser in different time zones, in Chromium, Firefox and WebKit and in Next.js 16.3: how it compares with the useEffect "mounted" trick and next/dynamic, the build error you get without a Suspense boundary, and the server-side onBrowserBailout and timeout options.
Vite+ 1.0 hands-on: migrating a real Vite + ESLint + Prettier + Vitest project, and what to check afterwards
Vite+ 1.0 replaces Vite, Vitest, ESLint, Prettier and your Node version manager with one vp command. A React + TypeScript project migrated with vp migrate, tested step by step: what the migration changes, the lint error it introduces in its own output, a no-undef rule that produced 10,840 false errors on Excalidraw, a task cache that can replay a stale production build, and the missing library that stops managed Node 26 in slim Docker images.
Upgrading to Vitest 5: every breaking change tested, with the errors you'll see and how to fix them
A test suite upgraded from Vitest 4.1 to 5.0.3, hitting each breaking change on purpose: mocks cleared before every test, un-awaited .resolves failing, nested vi.mock, the new bench API, strict browser locators, and a -t filter that quietly runs zero tests and still passes CI. Here are the real error messages, the tested fixes, and a grep checklist to find affected code before you upgrade.
Caveman: make your AI coding agent stop rambling (and cut output tokens ~65%)
caveman is a tiny, MIT-licensed skill that installs into Claude Code, Cursor, Gemini, and 30+ other agents and rewrites their prose into terse, fragment-style answers — the project measures a ~65% average cut in output tokens while leaving your code, commands, and error messages byte-for-byte untouched. One curl | bash, Node ≥18, no telemetry. Here's why it's great.
Run your Node.js app on Apple's container (a Docker Desktop alternative)
Apple shipped container 1.0 — an open-source, native CLI that runs Linux containers on macOS by giving each one its own lightweight micro-VM. It speaks OCI images and has a Docker-like CLI. Here's a real Node.js app built and run on it, the networking model, x86 images via Rosetta, and the gotchas — all verified on container 1.0.0 on an Apple-silicon Mac.
Node.js Docker images: full vs slim vs alpine vs distroless
Which base image should a Node.js app use? The choice swings your image from ~1.8 GB down to ~210 MB and changes how you debug and secure it. Here are the real sizes for the same app on node:26, node:26-slim, node:26-alpine, and distroless — all measured with Docker — plus the tradeoffs that actually matter.
Ship a Node.js app as a single executable binary
Node.js can bundle your script and the runtime into one executable file — a Single Executable Application — so users run your CLI without installing Node at all. Here's the full build, an embedded asset, and proof the binary runs on a machine with no Node installed. Verified on real Docker images.
The built-in Node.js test runner: a complete guide
You no longer need Jest, Mocha, or Vitest to test a Node.js project. node:test ships a complete runner — suites, hooks, mocking, filtering, watch mode, and coverage — that you run with node --test. No dependencies, no config. Every command and its output here is from a real node:26-slim Docker image.
node:sqlite: a built-in SQL database with zero dependencies
Need a database for a script, CLI, or small service? Node.js ships node:sqlite — a synchronous SQLite driver built right in. No better-sqlite3, no node-gyp, no native compile, no npm install. Here's the full API — prepared statements, transactions, and user-defined functions — verified on a real node:26-slim image.
Running TypeScript natively in Node.js: 22 vs 24 vs 26
Node.js runs .ts files directly — no ts-node, no tsx, no build step. But the details differ between Node 22, 24, and 26: what's flagged, what's stable, and one feature that was removed in Node 26. Every example here was run on real node:22-slim, node:24-slim, and node:26-slim Docker images.
Node.js features that replace popular npm packages
Node.js has quietly absorbed the jobs that used to need dependencies: a test runner, a file watcher, a .env loader, native TypeScript, fetch, terminal colors, deep clone, even SQLite. Here's what you can drop on Node.js 26 — every example verified on a real node:26 Docker image.