Streaming responses in Edge runtime

Provide an example on how to stream large datasets in a Next.js API route using the Edge runtime for efficient data handling.
export const config = {
  runtime: 'experimental-edge',

export default async function handler(req, res) {
  // Initialize the ReadableStream
  const stream = new ReadableStream({
    start(controller) {
      // Large dataset loop simulation
      for (let i = 0; i < 1e6; i++) {
        controller.enqueue(`Data chunk ${i}\n`);

  // Set headers for streaming content
  res.setHeader('Content-Type', 'text/plain; charset=utf-8');
  // Respond with the stream
  return new Response(stream);
This code defines an API route in a Next.js application using the Edge runtime. It creates a stream of large datasets, encodes that data, and uses the Fetch API's Response interface to return it as a stream to the client. A loop simulates large dataset stream generation. The 'Content-Type' header is set to 'text/plain' to indicate the nature of the streamed content.