The Deployment Problem
You write an Express server. It runs on Node.js. Now your boss says 'deploy to Cloudflare Workers.' You rewrite everything.
Nitro builds once, deploys anywhere. Same code runs on Node, Deno, Bun, Cloudflare Workers, Vercel, Netlify, or AWS Lambda.
What Nitro Gives You
Universal Server Routes
// server/routes/hello.ts
export default defineEventHandler(() => {
return { message: 'Hello World' };
});
// GET /hello → { message: 'Hello World' }
File-Based Routing
server/
routes/
index.ts → GET /
users/
index.ts → GET /users
[id].ts → GET /users/:id
api/
posts.post.ts → POST /api/posts
Built-In Storage (KV, Database, File)
// Use any storage backend — configured at deploy time
export default defineEventHandler(async () => {
await useStorage('db').setItem('key', { data: 'value' });
const item = await useStorage('db').getItem('key');
return item;
});
Storage adapters: Redis, Cloudflare KV, Vercel KV, filesystem, memory.
Caching
export default defineCachedEventHandler(async () => {
const data = await fetch('https://api.example.com/expensive');
return data.json();
}, {
maxAge: 60 * 60, // Cache for 1 hour
swr: true, // Stale-while-revalidate
});
Tasks (Background Jobs)
// server/tasks/cleanup.ts
export default defineTask({
meta: { description: 'Clean up old data' },
async run() {
await db.deleteOldRecords();
return { result: 'done' };
},
});
Deploy Anywhere
# Build for different targets
nitro build --preset cloudflare-pages
nitro build --preset vercel
nitro build --preset netlify
nitro build --preset node-server
nitro build --preset deno-server
nitro build --preset bun
Same code. Different output. No rewrites.
Quick Start
npx giget@latest nitro my-server
cd my-server
npm install
npm run dev
Why This Matters
Nitro powers Nuxt 3's server engine. It proves that server code doesn't have to be tied to one platform. Write it once, deploy anywhere.
Building universal APIs? Check out my web scraping actors on Apify Store — data APIs for any platform. For custom solutions, email spinov001@gmail.com.
Top comments (0)