Cage-free Nuxt 4.0

Issue #410.July 22, 2025.2 Minute read.
Bytes

Today’s issue: A Tailwind plugin for American literature enthusiasts, Astro’s term sheet, and celebrating Wasm’s 10th anniversary with some constructive criticism.

Welcome to #410.


Eyeballs logo

The Main Thing

Lady Gaga looking like Aang from Avatar

Long ago, the four JavaScript frameworks used to live in harmony

Cage-free Nuxt 4.0

It’s been a big month for Nuxt. First, their parent company got acquired by open-source Daddy Warbucks, and last week they announced Nuxt 4.0 – their first major release in 2.5 years.

But unlike that v3 release, which featured a full rewrite of the entire framework, Nuxt 4 introduces significantly fewer changes that are mostly focused on improving the developer experience:

  • Cleaner project structure – All application code now lives in an app/ directory by default, which should help keep your app faster and more organized.

  • Smarter data fetchinguseAsyncData and useFetch work better now, multiple components using the same key now share their data automatically, and you get more control over when cached data gets used.

  • Better TypeScript support – Nuxt now creates separate TS projects for your app code, server code, shared/ folder, and builder code. This should allow for better autocomplete, more accurate type inference, and fewer confusing errors.

  • Faster CLI – Thanks to faster cold starts, automatic reuse of the v8 compile cache, native file watching, and socket-based communication between the CLI and Vite dev server.

Bottom Line: The Nuxt team is calling this a “hype-free” major release that’s focused on providing some noticeable DX wins, while still allowing developers to upgrade from Nuxt 3 with minimal effort.

But now that they have the Vercel war chest behind them, it’ll be interesting to see if the Nuxt team starts to take some bigger swings on more experimental features to try and woo a new crowd of developers.


QA Wolf logo

Our Friends
(With Benefits)

Ant from Bug's Life watching another ant dance with a human body

Watching my AI app hallucinate slop to all my users

The most efficient way to test your AI app

Testing genAI apps is a nightmare. Outputs are non-deterministic, edge cases are infinite, and the underlying models are constantly changing and causing regressions.

QA Wolf can fix that. They build, run, and maintain a new breed of tests designed specifically for genAI apps:

  • Input validity tests – Throw every input variation you can think of (lengths, file types, weird characters) and make sure your app doesn’t implode

  • Model performance tests – Track response time under load and optimize GPU + memory usage, without setting your cloud bill on fire

  • Output consistency tests – Catch regressions and make sure users aren’t getting wildly different results from similar prompts

Schedule a personalized demo to learn how QA Wolf can handle your genAI testing, without burning through your tokens.


Spot the Bug logo

Spot the Bug

Sponsored by Sentry

Their engineers are hosting a free workshop next week on How to automatically debug issues using Seer (Sentry’s new AI agent) alongside the Sentry MCP and other tools.

function addOneMonth(date) {
  const newDate = new Date(date);
  newDate.setMonth(newDate.getMonth() + 1);
  if (newDate.getDate() !== date.getDate()) {
    newDate.setDate(0);
  }
  return newDate;
}

const today = new Date(2024, 10, 17); // October 17, 2024
const oneMonthFromToday = addOneMonth(today);

console.log(oneMonthFromToday);

Cool Bits logo

Cool Bits

  1. Andy Wingo wrote an article called WebAssembly: Yes, but for What? that celebrates Wasm’s 10th anniversary by detailing its wins and losses so far, and predicting where it’ll go in the next 2-3 years. I did the exact same thing to my nephew to celebrate his 10th birthday this month.

  2. The Expert Guide to Next.js Performance Optimization 2025 is a free, 10-chapter ebook filled with real-life examples and open-source libraries to help you fix bottlenecks and boost performance in enterprise-scale Next.js apps. [sponsored]

  3. The React team just released new docs about React Compiler, and all React course creators threatened to glue their hands to the Mona Lisa in protest.

  4. Google’s Open Source Security Team just announced OSS Rebuild, a new project that aims to reduce supply chain attacks by giving security teams powerful data to avoid compromise, without burdening upstream maintainers 🙏.

  5. PulpMiner converts any webpage into a realtime JSON API by using an AI-powered scraper. It was the #2 Product of the Day on Product Hunt and is a lot easier to use than other data extraction tools. [sponsored]

  6. Astro 5.12 comes with TOML support for content loaders, experimental raw environment values, and a new term sheet from Vercel – just kidding (I think).

  7. hoakley wrote this brief history of primary coding languages for the Apple ecosystem.

  8. fluent-state is a proxy-based React hook for deeply nested, reactive state.

  9. Can your coding agent run long commands and plan its next move? Warp’s can – and it just beat Claude Code by 20% on Terminal-Bench. Their team wrote about how they pulled it off here. [sponsored]

  10. Vue Bits is a collection of 80+ animated Vue components that sounds suspiciously close to Cool Bits. I’d hate to get my lawyer (who also happens to handle trademark law for a company called Oracle) involved 🧐.

  11. Daniel Friyia wrote about How to build 2D game-style physics with Matter.js and React Native Skia

  12. daisyUI released v5.0 of its component library for Tailwind CSS that always keeps a green light on at the end of its dock to symbolize how Gatsby’s hopes and dreams (and indeed the American dream itself) can feel so close but still just out of reach.


Spot the Bug logo

Spot the Bug: Solution

Sponsored by Sentry

Months are 0 indexed in JavaScript. So, new Date(2024, 10, 17) is actually November 17, 2024. When we add one month to that date, we get December 17, 2024.

function addOneMonth(date) {
  const newDate = new Date(date);
  newDate.setMonth(newDate.getMonth() + 1);
  if (newDate.getDate() !== date.getDate()) {
    newDate.setDate(0);
  }
  return newDate;
}

const today = new Date(2024, 9, 17); // October 17, 2024
const oneMonthFromToday = addOneMonth(today);

console.log(oneMonthFromToday);