Nitro v3.0.260522-beta: Build-Time Tracing Wrappers, VFS Performance Boost, Vercel Queues in Dev

Nitro v3.0.260522-beta: Build-Time Tracing Wrappers, VFS Performance Boost, Vercel Queues in Dev

lschvn

Nitro v3.0.260522-beta dropped May 22, 2026, extending the v3 beta track that began in April. The release adds three features that together significantly improve the development experience for production-oriented server-side TypeScript applications: build-time tracing instrumentation, a VFS-backed dynamic code cache, and local Vercel queue emulation.

Build-time route handler tracing

PR #4240 introduces automatic tracing span wrapping around every Nitro route handler at build time. When a request hits a Nitro server, spans are emitted for each handler invocation with metadata including the route path, HTTP method, duration, and cache status. These spans integrate with OpenTelemetry-compatible receivers, you point your OTEL_EXPORTER_OTLP_ENDPOINT at a collector and get full request traces without writing a single line of instrumentation code.

This is distinct from the OpenTelemetry SDK approach: Nitro is emitting spans from within its own router, so the data includes Nitro-specific context (route name, storage cache hits, event timings) that generic HTTP middleware cannot provide.

VFS caching for dynamic code

PR #4251 introduces a VFS layer for Nitro's dynamic app code. Previously, a dev-server restart forced Nitro to re-evaluate the entire module graph, every route handler, every useStorage() call, every event hook. For applications with hundreds of routes or expensive initialization logic, this added seconds to every restart.

The new VFS cache serializes the resolved state of Nitro's internal registry after the first request is handled. Subsequent starts load from this cache, skipping the evaluation step. The cache is invalidated automatically when source files change. The improvement is most visible in large monorepos and Nuxt 3 applications using Nitro as the server layer.

Vercel queues in local dev

The Vercel preset gains queue support in local development via vercel dev (#4264). Queue handlers defined with nitro.tasks are now recognized and executed by a local Vercel Runtime stub during development. This means you can write a queue consumer, call it from a route handler using @vercel/functions, and debug the full async flow, including retries and dead-letter queue behavior, entirely locally.

// tasks/send-email.ts
export defineTask(async ({ id, to, subject }) => {
  await sendEmail(to, subject);
  return { result: 'sent' };
});
// routes/api/signup.ts
import { queue } from '@vercel/functions';

export default defineEventHandler(async (event) => {
  await db.createUser(await readBody(event));
  await queue('tasks/send-email', { to: 'user@example.com', subject: 'Welcome' });
  return { ok: true };
});

Security patches from v3.0.260429-beta

Two vulnerabilities patched in the prior beta (v3.0.260429-beta) are also present in earlier releases and users are strongly encouraged to upgrade:

  • GHSA-5w89-w975-hf9q: Proxy route rules could be bypassed via malformed request paths, allowing requests to reach back-end services that should have been excluded by route rules.
  • GHSA-9phm-9p8f-hw5m: Open redirect via protocol-relative URL in redirect route rules. An attacker could craft a redirect target that navigates off-domain.

AWS Amplify supports Node.js 24

The AWS Amplify preset now ships with Node.js 24 runtime support (#4245). The preset was updated to use the new Amplify Node.js 24 handler interface, so existing Amplify deployments can bump their Nitro runtime to Node 24 without configuration changes.

Nitro v3.0.260522-beta is available on npm as nitro@3.0.0-260522-beta. The v3 beta track is considered stable for most workloads; the team is targeting a stable v3.0 release in the coming weeks.

Frequently Asked Questions

Related articles

More coverage with overlapping topics and tags.

Vue 3.5: The 'Minor' Release That Rewrote the Rules of Frontend Performance
frameworks

Vue 3.5: The 'Minor' Release That Rewrote the Rules of Frontend Performance

Vue 3.5 arrived with no breaking changes and a set of internals improvements that should make any developer pay attention, 56% less memory usage, lazy hydration, and a stabilized reactive props API.
Astro 7.0.0-beta.6 Stabilizes Route Caching and Promotes JSX Whitespace Compression to Default
frameworks

Astro 7.0.0-beta.6 Stabilizes Route Caching and Promotes JSX Whitespace Compression to Default

Astro 7.0.0-beta.6 (June 19, 2026) promotes the experimental route caching API to top-level stable, dropping the experimental.cache and experimental.routeRules flags in favor of a new top-level cache config and a cache helper. Beta.5 (June 18) made 'jsx' the default compressHTML mode, changing the rendered output of every site that relied on the legacy whitespace preservation. Beta.6 also pulls in @astrojs/markdown-satteri 0.3.1-beta.2.
React Router v8 Graduates Its Future Flags to Defaults, Goes ESM-Only, and Drops `react-router-dom`
frameworks

React Router v8 Graduates Its Future Flags to Defaults, Goes ESM-Only, and Drops `react-router-dom`

React Router v8.0.0 (June 17, 2026) is the first major release under the project's Open Governance model and the first on a planned yearly cadence. Every `future.v8_*` flag from v7 is now the default (always-on middleware, pass-through requests, the Vite Environment API, route-module splitting), the baseline moves to Node 22.22+, React 19.2.7+, and Vite 7+, all packages ship ESM-only with an ES2022 target, `react-router-dom` is removed, and the node adapters switch to a Remix-maintained fetch server while `create-react-router` drops its fetch polyfill for native `fetch`.

Comments

Log in Log in to join the conversation.

No comments yet. Be the first to share your thoughts.