
Astro Live Content Collections: Fresh CMS Data Without a Rebuild
Astro's live content collections fetch CMS and API data at request time with the same typed API as build-time collections, and Astro 7's rou...
Subscribe to Danny Holloran's Newsletter
Get new articles and engineering posts delivered to your inbox.

Astro's live content collections fetch CMS and API data at request time with the same typed API as build-time collections, and Astro 7's rou...

Nuxt 4.4 added createUseFetch and createUseAsyncData, factories that bake your base URL, auth headers, and error handling into a fully typed...

TypeScript 6 flipped half a dozen compiler defaults and TypeScript 7 deleted the options it deprecated. Here's the tsconfig audit that gets ...

Node.js now runs .ts files out of the box by erasing types, not compiling them. Here's what that buys you, what it refuses to do, and the ts...

Compression Dictionary Transport (RFC 9842) lets the browser tell your server which cached file it already has, so a redeployed bundle can a...

JavaScript can finally turn bytes into base64 and hex (and back) without the String.fromCharCode and btoa dance. Here's how Uint8Array's new...

ES2026's import defer evaluates a module the first time you touch its namespace, not at startup, so you can move heavy work off the cold pat...

Next.js 16.3 turned on Turbopack's persistent build cache by default and published numbers as high as 5.5x. Most CI pipelines will see exact...

Grid and flexbox let you rearrange a layout without touching the DOM, which quietly breaks keyboard navigation. The reading-flow and reading...

Almost every laptop shipped in the last two years has a neural processing unit sitting idle. WebNN is the only web standard that can actuall...

OneOf Input Objects landed in the September 2025 GraphQL spec, which means the exactly-one-of-these-arguments rule you've been enforcing in ...

Node's built-in test runner has been stable since v20 and now handles mocking, coverage, watch mode, and TypeScript files. Here's what it do...

Snippets let you define reusable chunks of markup inline and render them like functions. They replace slots, kill the let: directive, and me...

Sticky headers, snapped carousel slides, and scroll shadows have all been JavaScript jobs for a decade. Scroll-state container queries hand ...

Svelte 5.36 lets you use await at the top level of a component, inside $derived, and in your markup. Here is how synchronized updates, bound...

Your app already runs in five tabs at once, and they all think they are in charge. The Web Locks API gives the browser a real mutex so only ...

Custom elements can be real form controls. Here is how formAssociated, ElementInternals, and setValidity retire the hidden-input hack for go...

Next.js 16.3 stops firing a prefetch request for every link in the viewport and caches one reusable loading shell per route instead. Here's ...

Chrome 148 ships experimental support for filling HTML placeholders out of order and streaming markup into the DOM. Here's how the new templ...

React 19.2's Activity component hides a subtree instead of unmounting it, so state, scroll position, and DOM survive the round trip. Here's ...

Next.js 16 gave cache invalidation two different functions instead of one, and the split maps to a real distinction: content that can lag ve...

Buttons that look bottom-heavy at padding: 12px aren't your fault, they're half-leading. text-box-trim finally lets CSS cut that invisible s...

Firefox 148 shipped Trusted Types in February 2026, making it Baseline. Here's how to turn every dangerous innerHTML assignment in your app ...

Your field data says INP is 400ms. Your local profile says everything is fine. The Long Animation Frames API closes that gap by naming the s...