Preset: vercel
Deploying to Vercel comes with the following features:
And much more. Learn more in the Vercel documentation.
Vercel supports Nitro with zero-configuration. Deploy Nitro to Vercel now.
Nitro /api directory isn't compatible with Vercel. Instead, you should use:
routes/api/ for standalone usageYou can use Bun instead of Node.js by specifying the runtime using the vercel.functions key inside nitro.config:
export default defineNitroConfig({
vercel: {
functions: {
runtime: "bun1.x"
}
}
})
Alternatively, Nitro also detects Bun automatically if you specify a bunVersion property in your vercel.json:
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"bunVersion": "1.x"
}
You can provide additional build output configuration using vercel.config key inside nitro.config. It will be merged with built-in auto-generated config.
On-demand revalidation allows you to purge the cache for an ISR route whenever you want, foregoing the time interval required with background revalidation.
To revalidate a page on demand:
openssl rand -base64 32 or Generate a Secret to generate a random value.import { defineNitroConfig } from "nitro/config";
export default defineNitroConfig({
vercel: {
config: {
bypassToken: process.env.VERCEL_BYPASS_TOKEN
}
}
})
bypassToken. When that Prerender Function endpoint is accessed with this header set, the cache will be revalidated. The next request to that function should return a fresh response.By default, query params affect cache keys but are not passed to the route handler unless specified.
You can pass an options object to isr route rule to configure caching behavior.
expiration: Expiration time (in seconds) before the cached asset will be re-generated by invoking the Serverless Function. Setting the value to false (or isr: true route rule) means it will never expire.group: Group number of the asset. Prerender assets with the same group number will all be re-validated at the same time.allowQuery: List of query string parameter names that will be cached independently.undefined each unique query value is cached independently./** route rules, url is always addedpassQuery: When true, the query string will be present on the request argument passed to the invoked function. The allowQuery filter still applies.export default defineNitroConfig({
routeRules: {
"/products/**": {
isr: {
allowQuery: ["q"],
passQuery: true,
},
},
},
});