
nitro
โ Officialโ 276by sentry ยท part of getsentry/junior
Build and deploy universal JavaScript servers with Nitro v3. Use when working with nitro.config.ts, defineNitroConfig, defineHandler, defineConfig, server.ts entry, filesystem routing, route rules, useStorage, defineCachedHandler, useDatabase, definePlugin, runtime hooks, Vercel/Cloudflare deployment, or migrating from Nitro v2/nitropack.
This is the playbook your agent receives when the skill activates โ you don't need to read it to use the skill, but it's here to audit before installing.
Build, configure, and deploy Nitro v3 applications using correct APIs and patterns.
Step 1: Classify the request
| Request type | Read first |
|---|---|
| API surface, handler signatures, imports, config options | references/api-surface.md |
| Setup, routing, caching, storage, plugins, frameworks, common patterns | references/common-use-cases.md |
| Build failures, runtime errors, deployment issues, migration from v2 | references/troubleshooting-workarounds.md |
Load only the reference(s) matching the request. If the task spans categories, load relevant files.
Step 2: Apply core guardrails
- Import
defineHandlerfrom"nitro", notdefineEventHandler(v2 API). - Import config helpers from subpaths:
"nitro/config","nitro/cache","nitro/storage","nitro/database","nitro/runtime-config","nitro/types". - Use web standard
event.req(Request) for body/headers โ not v2 utilities likereadBodyorgetHeader. - Never return from middleware unless intentionally terminating the request.
- Only
GET/HEADrequests are cached bydefineCachedHandler; other methods bypass automatically. useDatabaseanddefineTaskrequire experimental feature flags.- Use
"nitro"package name, not"nitropack"(v2).
Step 3: Implement
- For new projects, use
defineConfigfrom"nitro"innitro.config.tsor addnitro()plugin from"nitro/vite"tovite.config.ts. - For server entry, export a web-compatible
fetch(Request): Responsehandler fromserver.ts, or useserver.node.tsfor Express/Fastify. - For filesystem routes, place handlers in
routes/orapi/with[param]for dynamic segments and.get.ts/.post.tsfor method-specific routes. - For caching, use
defineCachedHandlerfrom"nitro/cache"withmaxAgeandswroptions. - For storage, use
useStorage(namespace)from"nitro/storage"and configure drivers viastorageconfig. - For plugins, create files in
plugins/directory usingdefinePluginand hook intorequest,response,error, orclose. - For deployment, set
presetin config or useNITRO_PRESETenv var; Vercel/Netlify/Cloudflare are auto-detected.
Step 4: Validate
- Run
nitro devand verify routes respond correctly. - Run
nitro buildand check.output/server/contains expected files. - For cached routes, verify cache headers (
etag,cache-control) and 304 responses. - For storage, verify data persists across requests with configured driver.
- For deployment, verify the preset produces correct output format.
npx skills add getsentry/junior --skill "nitro" --full-depthRun this in your project โ your agent picks the skill up automatically.
Step 5: Troubleshoot
defineEventHandler is not definedโ usedefineHandlerfrom"nitro"(v3 API).Cannot find module 'nitropack'โ rename to"nitro"in imports and package.json.- Route not matched โ check file is in
routes/orapi/, or verifyroutesconfig mapping. - Middleware returning responses unexpectedly โ ensure middleware does not return a value.
- For detailed diagnostics, read
references/troubleshooting-workarounds.md.
Licensed under Apache-2.0โ you can use, modify, and redistribute it under that license's terms.
View the full license file on GitHub โ