Cache API

Nitro provides a powerful caching system built on top of the storage layer.


const cachedFn = cachedEventHandler(fn, options)


  • name: Handler name. It will be guessed from function name if not provided and fallback to _ otherwise.
  • group: Part of cache name. Useful to organize cache storage.
  • getKey: A function that accepts same arguments of normal function and should generate cache key. If not provided, a built-in hash function will be used.
  • integrity: A value that changing it, will invalidate all caches for function. By default will be computed from function code.
  • maxAge: Maximum age that cache is valid in seconds. Default is 1 second.
  • swr: Enable Stale-While-Revalidate behavior. Enabled by default.


Example: Cache an API handler

// routes/cached.tsconst myFn = cachedEventHandler(async () => {  new Promise(resolve => setTimeout(resolve, 1000))  return `Response generated at ${new Date().toISOString()}`}, { swr: true })

Example: Cache a utility function

// utils/index.tsconst myFn = cachedFunction(async () => {  new Promise(resolve => setTimeout(resolve, 1000))  return Math.random()}, { swr: true })

Example: Enable Cache on a group of routes (🧪 Experimental!)

// nitro.config.tsimport { defineNitroConfig } from 'nitropack'export default defineNitroConfig({  routes: {    '/blog/**': { swr: true }  }})