Blog
Practical notes on JavaScript tooling, module systems and the platform decisions behind the work we do
-
React Router v8 Upgrade: Flags First, Then Bump
React Router v8 makes middleware, ESM and split route modules the default, so upgrade by enabling the v7 future flags first.
-
The JavaScript Temporal API: Adopt It or Wait
Temporal ships natively in Chrome 144, Firefox 139 and Node 26 but not Safari, so the JavaScript Temporal API still needs a polyfill in the browser.
-
Shopify's New Discount Function API: How to Migrate
Shopify's Product, Order and Shipping discount function APIs are deprecated: here is what changes when you migrate to the unified Discount API.
-
OpenTelemetry Node.js Setup That Actually Traces
A working OpenTelemetry Node.js setup needs four packages, two startup flags and a sampling decision, and ESM apps need one flag more.
-
Standard Schema: TypeScript Validation Without Adapters
Standard Schema lets a TypeScript tool accept Zod, Valibot or ArkType through one property, and here is what quietly breaks when you swap.
-
Server-Sent Events vs WebSockets: How to Choose
SSE gives you automatic reconnection and event replay over plain HTTP, while WebSockets buy a client-to-server channel most streaming features never use.
-
node:sqlite vs better-sqlite3: When to Switch
node:sqlite matches better-sqlite3 for everyday queries and drops the native build step, but it is still a release candidate with no transaction helper.
-
Passkeys in Node.js Without Locking Users Out
How to add passkeys to a Node.js app with @simplewebauthn, from registration and conditional-UI login to the credential lifecycle that prevents lockouts.
-
Astro Server Islands: Cache the Page, Not the User
Astro server islands defer one component with server:defer so the rest of the page stays static and CDN-cacheable, plus the traps to avoid.
-
CSS Anchor Positioning: Replace Floating UI
CSS anchor positioning now ships in Chrome, Firefox and Safari, so dropdowns and tooltips can follow their trigger without Floating UI.
-
TypeScript 7 Migration: Fix Your tsconfig First
TypeScript 7 removes a dozen deprecated compiler options, flips eight tsconfig defaults and ships no API, so here is the upgrade order.
-
Vite 8 Rolldown Migration: What Actually Breaks
Vite 8 replaces esbuild and Rollup with Rolldown; the migration breaks build.rollupOptions, manualChunks, decorators and the esbuild minifier.