Nuxt

How does Nuxt 4 implement edge streaming SSR for sub-100ms TTFB?

December 4, 2025

download ready
Thank You
Your submission has been received.
We will be in touch and contact you soon!

Nuxt 4 uses Nitro's ReadableStream API in server routes to stream HTML chunks from edge functions. This sends initial UI instantly while data loads asynchronously, eliminating waterfalls in checkouts. Configure nitro.preset: 'vercel-edge' for global deployment. Achieves <100ms TTFB by rendering at edge locations.

Code Example:-

Code

/ server/api/checkout.get.ts
export default defineEventHandler(async (event) => {
  const stream = new ReadableStream({
    async start(controller) {
      controller.enqueue(new TextEncoder().encode('<div>Loading...</div>'))
      const data = await $fetch('/api/cart')
      controller.enqueue(new TextEncoder().encode(`Total: $${data.total}`))
      controller.close()
    }
  })
  setResponseHeader(event, 'Content-Type', 'text/html')
  return stream
})
      
Hire Now!

Need Help with Nuxt Development ?

Work with our skilled nuxt developers to accelerate your project and boost its performance.
**Hire now**Hire Now**Hire Now**Hire now**Hire now

How does Nuxt 4 implement edge streaming SSR for sub-100ms TTFB?

Nuxt 4 uses Nitro's ReadableStream API in server routes to stream HTML chunks from edge functions. This sends initial UI instantly while data loads asynchronously, eliminating waterfalls in checkouts. Configure nitro.preset: 'vercel-edge' for global deployment. Achieves <100ms TTFB by rendering at edge locations.

Code Example:-

Code

/ server/api/checkout.get.ts
export default defineEventHandler(async (event) => {
  const stream = new ReadableStream({
    async start(controller) {
      controller.enqueue(new TextEncoder().encode('<div>Loading...</div>'))
      const data = await $fetch('/api/cart')
      controller.enqueue(new TextEncoder().encode(`Total: $${data.total}`))
      controller.close()
    }
  })
  setResponseHeader(event, 'Content-Type', 'text/html')
  return stream
})