To convert your Vercel Function to use the Edge runtime, add the following code to your function:
export const runtime = 'edge'; // 'nodejs' is the default
export function GET(request: Request) {
return new Response(`I am an Vercel Function!`, {
status: 200,
});
}
If you're not using a framework, you must either add "type": "module"
to your package.json
or change your JavaScript Functions' file extensions from .js
to .mjs
By default Edge Functions execute in the region closest to the incoming request. You can set one or more preferred regions using the route segment config preferredRegion
or specify a regions
key within a config object to set one or more regions for you functions to execute in
If your function depends on a data source, you may want it to be close to that source for fast responses.
To configure which region (or multiple regions) you want your function to execute in, pass the ID of your preferred region(s) in the following way:
The preferredRegion
option can be used to specify a single region using a string value, or multiple regions using a string array. See the Next.js documentation for more information.
export const runtime = 'edge'; // 'nodejs' is the default
// execute this function on iad1 or hnd1, based on the connecting client location
export const preferredRegion = ['iad1', 'hnd1'];
export const dynamic = 'force-dynamic'; // no caching
export function GET(request: Request) {
return new Response(
`I am an Vercel Function! (executed on ${process.env.VERCEL_REGION})`,
{
status: 200,
},
);
}
During regional outage, Vercel has automatic failover to the next closest region to maintain uptime. This is applicable for both global and regionally specified Edge Functions. See the outage resiliency docs for more information.
If you're not using a framework, you must either add "type": "module"
to your package.json
or change your JavaScript Functions' file extensions from .js
to .mjs
In the event of regional downtime, Vercel will automatically reroute traffic to the next closest Edge Network region on all plans. For more information on which regions Vercel routes traffic to, see Outage Resiliency.
You can't configure a maximum duration for functions using the Edge runtime. They can run indefinitely provided they send an initial response within 25 seconds.
You can only configure concurrency for functions using the Node.js runtime. Edge Functions cannot be configured.
The Edge runtime is built on top of the V8 engine, allowing it to run in isolated execution environments that don't require a container or virtual machine.
The Edge runtime provides a subset of Web APIs such as fetch
, Request
, and Response
.
The following tables list the APIs that are available in the Edge runtime.
API Descriptionfetch
Fetches a resource Request
Represents an HTTP request Response
Represents an HTTP response Headers
Represents HTTP headers FormData
Represents form data File
Represents a file Blob
Represents a blob URLSearchParams
Represents URL search parameters Blob
Represents a blob Event
Represents an event EventTarget
Represents an object that can handle events PromiseRejectEvent
Represents an event that is sent to the global scope of a script when a JavaScript Promise is rejected API Description TextEncoder
Encodes a string into a Uint8Array TextDecoder
Decodes a Uint8Array into a string atob
Decodes a base-64 encoded string btoa
Encodes a string in base-64 API Description crypto
Provides access to the cryptographic functionality of the platform SubtleCrypto
Provides access to common cryptographic primitives, like hashing, signing, encryption or decryption CryptoKey
Represents a cryptographic key API Description AbortController
Allows you to abort one or more DOM requests as and when desired AbortSignal
Represents a signal object that allows you to communicate with a DOM request (such as a Fetch
request) and abort it if required DOMException
Represents an error that occurs in the DOM structuredClone
Creates a deep copy of a value URLPattern
Represents a URL pattern Array
Represents an array of values ArrayBuffer
Represents a generic, fixed-length raw binary data buffer Atomics
Provides atomic operations as static methods BigInt
Represents a whole number with arbitrary precision BigInt64Array
Represents a typed array of 64-bit signed integers BigUint64Array
Represents a typed array of 64-bit unsigned integers Boolean
Represents a logical entity and can have two values: true
and false
clearInterval
Cancels a timed, repeating action which was previously established by a call to setInterval()
clearTimeout
Cancels a timed, repeating action which was previously established by a call to setTimeout()
console
Provides access to the browser's debugging console DataView
Represents a generic view of an ArrayBuffer
Date
Represents a single moment in time in a platform-independent format decodeURI
Decodes a Uniform Resource Identifier (URI) previously created by encodeURI
or by a similar routine decodeURIComponent
Decodes a Uniform Resource Identifier (URI) component previously created by encodeURIComponent
or by a similar routine encodeURI
Encodes a Uniform Resource Identifier (URI) by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character encodeURIComponent
Encodes a Uniform Resource Identifier (URI) component by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character Error
Represents an error when trying to execute a statement or accessing a property EvalError
Represents an error that occurs regarding the global function eval()
Float32Array
Represents a typed array of 32-bit floating point numbers Float64Array
Represents a typed array of 64-bit floating point numbers Function
Represents a function Infinity
Represents the mathematical Infinity value Int8Array
Represents a typed array of 8-bit signed integers Int16Array
Represents a typed array of 16-bit signed integers Int32Array
Represents a typed array of 32-bit signed integers Intl
Provides access to internationalization and localization functionality isFinite
Determines whether a value is a finite number isNaN
Determines whether a value is NaN
or not JSON
Provides functionality to convert JavaScript values to and from the JSON format Map
Represents a collection of values, where each value may occur only once Math
Provides access to mathematical functions and constants Number
Represents a numeric value Object
Represents the object that is the base of all JavaScript objects parseFloat
Parses a string argument and returns a floating point number parseInt
Parses a string argument and returns an integer of the specified radix Promise
Represents the eventual completion (or failure) of an asynchronous operation, and its resulting value Proxy
Represents an object that is used to define custom behavior for fundamental operations (e.g. property lookup, assignment, enumeration, function invocation, etc) RangeError
Represents an error when a value is not in the set or range of allowed values ReferenceError
Represents an error when a non-existent variable is referenced Reflect
Provides methods for interceptable JavaScript operations RegExp
Represents a regular expression, allowing you to match combinations of characters Set
Represents a collection of values, where each value may occur only once setInterval
Repeatedly calls a function, with a fixed time delay between each call setTimeout
Calls a function or evaluates an expression after a specified number of milliseconds SharedArrayBuffer
Represents a generic, fixed-length raw binary data buffer String
Represents a sequence of characters Symbol
Represents a unique and immutable data type that is used as the key of an object property SyntaxError
Represents an error when trying to interpret syntactically invalid code TypeError
Represents an error when a value is not of the expected type Uint8Array
Represents a typed array of 8-bit unsigned integers Uint8ClampedArray
Represents a typed array of 8-bit unsigned integers clamped to 0-255 Uint32Array
Represents a typed array of 32-bit unsigned integers URIError
Represents an error when a global URI handling function was used in a wrong way URL
Represents an object providing static methods used for creating object URLs URLSearchParams
Represents a collection of key/value pairs WeakMap
Represents a collection of key/value pairs in which the keys are weakly referenced WeakSet
Represents a collection of objects in which each object may occur only once WebAssembly
Provides access to WebAssembly
You can check if your function is running on the Edge runtime by checking the global globalThis.EdgeRuntime
property. This can be helpful if you need to validate that your function is running on the Edge runtime in tests, or if you need to use a different API depending on the runtime.
if (typeof EdgeRuntime !== 'string') {
// dead-code elimination is enabled for the code inside this block
}
The following modules can be imported with and without the node:
prefix when using the import
statement:
async_hooks
Manage asynchronous resources lifecycles with AsyncLocalStorage
. Supports the WinterCG subset of APIs events
Facilitate event-driven programming with custom event emitters and listeners. This API is fully supported buffer
Efficiently manipulate binary data using fixed-size, raw memory allocations with Buffer
. Every primitive compatible with Uint8Array
accepts Buffer
too assert
Provide a set of assertion functions for verifying invariants in your code util
Offer various utility functions where we include promisify
/callbackify
and types
Also, Buffer
is globally exposed to maximize compatibility with existing Node.js modules.
The Edge runtime has some restrictions including:
node_modules
can be used, as long as they implement ES Modules and do not use native Node.js APIsrequire
directly is not allowed. Use import
insteadThe following JavaScript language features are disabled, and will not work:
While WebAssembly.instantiate
is supported in Edge Runtime, it requires the Wasm source code to be provided using the import statement. This means you cannot use a buffer or byte array to dynamically compile the module at runtime.
You can use process.env
to access Environment Variables.
Middleware with the edge
runtime configured is neither a Node.js nor browser application, which means it doesn't have access to all browser and Node.js APIs. Currently, our runtime offers a subset of browser APIs and some Node.js APIs and we plan to implement more functionality in the future.
In summary:
edge
runtime configured.eval
) is not allowed (see the next section for more details)Dynamic code execution is not available in Middleware with the edge
runtime configured for security reasons. For example, the following APIs cannot be used:
You need to make sure libraries used in your Middleware with the edge
runtime configured don't rely on dynamic code execution because it leads to a runtime error.
Middleware with the edge
runtime configured must begin sending a response within 25 seconds.
You may continue streaming a response beyond that time and you can continue with asynchronous workloads in the background, after returning the response.
Plan Limit (after gzip compression) Hobby 1 MB Pro 2 MB Enterprise 4 MBThe maximum size for an Vercel Function using the Edge runtime includes your JavaScript code, imported libraries and files (such as fonts), and all files bundled in the function.
If you reach the limit, make sure the code you are importing in your function is used and is not too heavy. You can use a package size checker tool like bundle to check the size of a package and search for a smaller alternative.
Environment Variables can be accessed through the process.env
object. Since JavaScript objects have methods to allow some operations on them, there are limitations on the names of Environment Variables to avoid having ambiguous code.
The following names will be ignored as Environment Variables to avoid overriding the process.env
object prototype:
constructor
__defineGetter__
__defineSetter__
hasOwnProperty
__lookupGetter__
__lookupSetter__
isPrototypeOf
propertyIsEnumerable
toString
valueOf
__proto__
toLocaleString
Therefore, your code will always be able to use them with their expected behavior:
// returns `true`, if `process.env.MY_VALUE` is used anywhere & defined in the Vercel dashboard
process.env.hasOwnProperty('MY_VALUE');
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4