{"id":"pg_a7l560pdh1d8","property_id":"prp_pklgwresh6hp","domain_id":"dom_zrkwapcbulfb","root_domain":"vercel.com","locale":"en","url":"https://vercel.com/docs/frameworks/backend/nitro","url_hash":"9df38b011f478daef8003b170d880244bf8d4cc3a86cac2a4ecb032013c37321","path":"/docs/frameworks/backend/nitro","depth":1,"canonical_url":"https://vercel.com/docs/frameworks/backend/nitro","canonical_page_id":null,"page_type":"docs","page_type_guess":"docs","state":"indexed","skip_reason":"budget","priority":"1.4","discovered_via":"sitemap","first_seen_at":"2026-08-27T09:05:10.076Z","last_seen_at":"2026-09-26T09:10:02.787Z","http_status":200,"content_hash":"f639ab34c9ac4afedbe28d8d7e2dc483e6bc8c08817152c24006d8efc531f506","title":"Nitro on Vercel","description":"Deploy Nitro applications to Vercel with zero configuration. Learn about observability, ISR, and custom build configurations.","author":"Vercel","published_at":null,"modified_at":"2026-08-10T08:00:08.000Z","word_count":569,"reading_time_sec":155,"lang_detected":"en","images":[],"links_out":null,"markdown_source":"readability","refresh_interval":"monthly","last_fetched_at":"2026-09-26T09:09:12.367Z","next_refresh_at":"2026-10-26T09:09:12.367Z","runs_count":1,"changes_count":0,"last_changed_at":null,"fail_count":0,"last_error":null,"created_at":"2026-08-27T09:05:10.076Z","updated_at":"2026-08-27T09:05:10.076Z","inlinks":28,"inlinks_body":8,"outlinks":186,"outlinks_external":13,"anchor_terms":["NextNitro","Nitro"],"template_score":"0.93333333333333333333","cash":"0.0315373628157422473","cash_total":"0.65053316930942263540","pagerank":"0.0336226975825662","is_orphan":false,"link_confirmed":true,"discovered_wave":0,"embedded_hash":null,"embedded_at":null,"domain_name":"Vercel Inc.","brand_color":null,"domain_rank":579,"spam_score":14,"markdown":"Nitro is a full-stack framework with TypeScript-first support. It includes filesystem routing, code-splitting for fast startup, built-in caching, and multi-driver storage. It enables deployments from the same codebase to any platform with output sizes under 1MB.\n\nYou can deploy a Nitro app to Vercel with zero configuration.\n\nTo get started with Nitro on Vercel, use the following Nitro template to deploy to Vercel with zero configuration:\n\nVercel deployments can [integrate with your git provider](https://vercel.com/docs/git) to [generate preview URLs](https://vercel.com/docs/deployments/environments#preview-environment-pre-production) for each pull request you make to your Nitro project.\n\nGet started by initializing a new Nitro project using [Vercel CLI init command](https://vercel.com/docs/cli/init):\n\nThis will clone the [Nitro example repository](https://github.com/vercel/vercel/tree/main/examples/nitro) in a directory called `nitro`.\n\nWhen you deploy a Nitro app to Vercel, you can use Vercel specific features such as [Incremental Static Regeneration (ISR)](#incremental-static-regeneration-isr), [preview deployments](https://vercel.com/docs/deployments/environments#preview-environment-pre-production), [Fluid compute](https://vercel.com/docs/fluid-compute), [Observability](#observability), and [Vercel firewall](https://vercel.com/docs/vercel-firewall) with zero or minimum configuration.\n\n[ISR](https://vercel.com/docs/incremental-static-regeneration) allows you to create or update content without redeploying your site. ISR has three main benefits for developers: better performance, improved security, and faster build times.\n\nWith [on-demand revalidation](https://vercel.com/docs/incremental-static-regeneration/quickstart#on-demand-revalidation), you can purge the cache for an ISR route whenever you want, foregoing the time interval required with background revalidation.\n\nTo revalidate a path to a prerendered function:\n\n1.  Create an [Environment Variable](https://vercel.com/docs/environment-variables) to store a revalidation secret by:\n    \n    -   Using the command:\n    \n    -   Or [generating a secret](https://generate-secret.vercel.app/32) to create a random value.\n2.  Update your configuration to use the revalidation secret as follows:\n    \n3.  You can revalidate a path to a prerendered function by making a `GET` or `HEAD` request to that path with a header of `x-prerender-revalidate: bypassToken`\n    \n    When the prerendered function endpoint is accessed with this header set, the cache will be revalidated. The next request to that function will return a fresh response.\n    \n\nTo have more control over ISR caching, you can pass an options object to the `isr` route rule as shown below:\n\nBy default, query parameters are ignored by cache unless you specify them in the `allowQuery` array.\n\nThe following options are available:\n\nOption\n\nType\n\nDescription\n\n`expiration`\n\n`number | false`\n\nThe expiration time, in seconds, before the cached asset is re-generated by invoking the serverless function. Setting the value to `false` (or `isr: true` in the route rule) will cause it to never expire.\n\n`group`\n\n`number`\n\nGroup number of the asset. Use this to revalidate multiple assets at the same time.\n\n`allowQuery`\n\n`string[] | undefined`\n\nList of query string parameter names that will be cached independently. If you specify an empty array, query values are not considered for caching. If `undefined`, each unique query value is cached independently. For wildcard `/**` route rules, `url` is always added.\n\n`passQuery`\n\n`boolean`\n\nWhen `true`, the query string will be present on the request argument passed to the invoked function. The `allowQuery` filter still applies.\n\nWith [Vercel Observability](https://vercel.com/docs/observability), you can view detailed performance insights broken down by route and monitor function execution performance. This can help you identify bottlenecks and optimization opportunities.\n\nNitro (>=2.12) generates routing hints for [functions observability insights](https://vercel.com/docs/observability/insights#vercel-functions), providing a detailed view of performance broken down by route.\n\nTo enable this feature, ensure you are using a compatibility date of `2025-07-15` or later.\n\nFramework integrations can use the `ssrRoutes` configuration to declare SSR routes. For more information, see [#3475](https://github.com/unjs/nitro/pull/3475).\n\nWhen you deploy a Nitro app to Vercel, your server routes automatically become [Vercel Functions](https://vercel.com/docs/functions) and use [Fluid compute](https://vercel.com/docs/fluid-compute) by default.\n\nLearn more about deploying Nitro projects on Vercel with the following resources:","storage":{"htmlKey":"stealpage/html/vercel.com/pg_a7l560pdh1d8/run_nthdkpl5i0e5.html.gz","markdownKey":"stealpage/md/vercel.com/pg_a7l560pdh1d8/run_nthdkpl5i0e5.md.gz"},"facets":null,"assets":[{"kind":"image","src_url":"https://vercel-docs.vercel.sh/vc-ap-0cca3e/_next/static/immutable/media/vercel-light.3_gxxexgi1nmy.svg","r2_key":null,"alt":"Vercel","caption":null,"width":16,"height":14,"is_hero":false,"zone":"footer"},{"kind":"image","src_url":"https://vercel-docs.vercel.sh/vc-ap-0cca3e/_next/static/immutable/media/vercel-dark.1f3cgy23m5_jy.svg","r2_key":null,"alt":"Vercel","caption":null,"width":16,"height":14,"is_hero":false,"zone":"footer"},{"kind":"image","src_url":"https://7nyt0uhk7sse4zvn.public.blob.vercel-storage.com/docs-assets/static/topics/icons/nitro.svg","r2_key":null,"alt":"","caption":null,"width":16,"height":16,"is_hero":false,"zone":"unknown"},{"kind":"image","src_url":"https://vercel.com/vc-ap-vercel-docs/_next/static/immutable/media/logo-nuxt-color-light.3nioj22-jeo1s.svg","r2_key":null,"alt":"","caption":null,"width":16,"height":16,"is_hero":false,"zone":"unknown"},{"kind":"image","src_url":"https://vercel.com/vc-ap-vercel-docs/_next/static/immutable/media/logo-nuxt-color-dark.3nioj22-jeo1s.svg","r2_key":null,"alt":"","caption":null,"width":16,"height":16,"is_hero":false,"zone":"unknown"}],"shots":[{"viewport":"mobile","width":390,"height":844,"r2_key":"stealpage/shots/vercel.com/pg_a7l560pdh1d8/run_nthdkpl5i0e5-mobile.png","phash":"46a0a8c0c0c0c1c4","visual_delta":null,"captured_at":"2026-09-26T09:09:19.139Z"},{"viewport":"desktop","width":1440,"height":900,"r2_key":"stealpage/shots/vercel.com/pg_a7l560pdh1d8/run_nthdkpl5i0e5-desktop.png","phash":"076463434e406040","visual_delta":null,"captured_at":"2026-09-26T09:09:18.964Z"}],"history":[{"id":"run_nthdkpl5i0e5","started_at":"2026-09-26T09:09:12.358Z","http_status":200,"fetcher":"direct","changed":false,"diff":null,"word_count":569}],"citedBy":[{"id":"pg_4ljdb7zfqzvh","url":"https://vercel.com/docs/frameworks","title":"Frameworks on Vercel","anchors":["Nitro"],"zone":"main"},{"id":"pg_cxzclerjkj5k","url":"https://vercel.com/docs/frameworks/backend/fastapi","title":"Deploy a FastAPI app on Vercel","anchors":["Nitro"],"zone":"main"},{"id":"pg_sh-yy95u68le","url":"https://vercel.com/docs/frameworks/full-stack/tanstack-start","title":"TanStack Start on Vercel","anchors":["Nitro"],"zone":"main"},{"id":"pg_a4gkqthxdgur","url":"https://vercel.com/docs/frameworks/full-stack/nuxt","title":"Nuxt on Vercel","anchors":["Nitro"],"zone":"main"},{"id":"pg_shocgxz1klct","url":"https://vercel.com/templates","title":"Templates - Vercel","anchors":["Nitro"],"zone":"main"},{"id":"pg_maex0vniv8we","url":"https://vercel.com/docs/frameworks/backend","title":"Backends on Vercel","anchors":["Nitro","NextNitro"],"zone":"main"},{"id":"pg_i-l_8qzl_azq","url":"https://vercel.com/docs/frameworks/full-stack/sveltekit","title":"SvelteKit on Vercel","anchors":["Nitro"],"zone":"main"}]}