rembrembdocs

experimental.proxyClientMaxBodySize

Last updated April 23, 2026

When proxy is used, Next.js automatically clones the request body and buffers it in memory to enable multiple reads - both in proxy and the underlying route handler. To prevent excessive memory usage, this configuration option sets a size limit on the buffered body.

By default, the maximum body size is 10MB. If a request body exceeds this limit, the body will only be buffered up to the limit, and a warning will be logged indicating which route exceeded the limit.

Options

String format (recommended)

Specify the size using a human-readable string format:

next.config.ts

JavaScriptTypeScript

import type { NextConfig } from 'next'
 
const nextConfig: NextConfig = {
  experimental: {
    proxyClientMaxBodySize: '1mb',
  },
}
 
export default nextConfig

Supported units: b, kb, mb, gb

Number format

Alternatively, specify the size in bytes as a number:

next.config.ts

JavaScriptTypeScript

import type { NextConfig } from 'next'
 
const nextConfig: NextConfig = {
  experimental: {
    proxyClientMaxBodySize: 1048576, // 1MB in bytes
  },
}
 
export default nextConfig

Behavior

When a request body exceeds the configured limit:

  1. Next.js will buffer only the first N bytes (up to the limit)
  2. A warning will be logged to the console indicating the route that exceeded the limit
  3. The request will continue processing normally, but only the partial body will be available
  4. The request will not fail or return an error to the client

If your application needs to process the full request body, you should either:

Example

proxy.ts

import { NextRequest, NextResponse } from 'next/server'
 
export async function proxy(request: NextRequest) {
  // Next.js automatically buffers the body with the configured size limit
  // You can read the body in proxy...
  const body = await request.text()
 
  // If the body exceeded the limit, only partial data will be available
  console.log('Body size:', body.length)
 
  return NextResponse.next()
}

app/api/upload/route.ts

import { NextRequest, NextResponse } from 'next/server'
 
export async function POST(request: NextRequest) {
  // ...and the body is still available in your route handler
  const body = await request.text()
 
  console.log('Body in route handler:', body.length)
 
  return NextResponse.json({ received: body.length })
}

Good to know

Was this helpful?