Edge Runtime

The Next.js Edge Runtime is based on standard Web APIs, which is used by Middleware and Edge API Routes.

Network APIs

Encoding APIs

Web Stream APIs

Web Crypto APIs

Web Standards APIs

V8 Primitives

Next.js Specific Polyfills

Environment Variables

You can use process.env to access Environment Variables for both next dev and next build.

Running console.log on process.env will not show all your Environment Variables. You have to access the variables directly as shown below:

// { NEXT_RUNTIME: 'edge' }
// value

Unsupported APIs

The Edge Runtime has some restrictions including:

  • Native Node.js APIs are not supported. For example, you can't read or write to the filesystem
  • node_modules can be used, as long as they implement ES Modules and do not use native Node.js APIs
  • Calling require directly is not allowed. Use ES Modules instead

The following JavaScript language features are disabled, and will not work:

  • eval: Evaluates JavaScript code represented as a string
  • new Function(evalString): Creates a new function with the code provided as an argument
  • WebAssembly.compile
  • WebAssembly.instantiate with a buffer parameter

In rare cases, your code could contain (or import) some dynamic code evaluation statements which can not be reached at runtime and which can not be removed by treeshaking. You can relax the check to allow specific files with your Middleware or Edge API Route exported configuration:

export const config = {
  runtime: 'edge', // for Edge API Routes only
  unstable_allowDynamic: [
    '/lib/utilities.js', // allows a single file
    '/node_modules/function-bind/**', // use a glob to allow anything in the function-bind 3rd party module

unstable_allowDynamic is a glob, or an array of globs, ignoring dynamic code evaluation for specific files. The globs are relative to your application root folder.

Be warned that if these statements are executed on the Edge, they will throw and cause a runtime error.