The difference
One function instead of three handlers.
Without Pikku, the same business logic gets rewritten for every protocol — with separate validation, auth, and error handling each time. With Pikku, you write it once.
// routes/send-reminder.ts
app.post('/send-reminder', authMiddleware, async (req, res) => {
const { userId, urgency } = validateInput(req.body)
const user = await db.users.find(userId)
await email.send({ to: user.email, template: 'reminder', urgency })
res.json({ sent: true })
})
// workers/billing-reminders.ts
queue.process('billing-reminders', async (job) => {
const { userId, urgency } = validateInput(job.data)
const session = await getSystemSession()
checkPermissions(session, 'sendReminder')
const user = await db.users.find(userId)
await email.send({ to: user.email, template: 'reminder', urgency })
})
// cron/daily-reminders.ts
cron.schedule('0 9 * * *', async () => {
const { userId, urgency } = validateInput(config.dailyReminder)
const session = await getSystemSession()
checkPermissions(session, 'sendReminder')
const user = await db.users.find(userId)
await email.send({ to: user.email, template: 'reminder', urgency })
})
Same validation, same auth checks, same logic — written three times. And this is only three protocols.
Your functions are just TypeScript.
Pikku is a wiring layer, not a runtime. Your function receives typed input and injected services. Inside it, use any npm package, any database driver, any API client.
Need raw request access? Escape hatches exist. Need to self-host? Run on Fastify, Express, Lambda, Cloudflare Workers, or Bun. The framework is open-source and MIT-licensed.
If you stop using Pikku tomorrow, your business logic still works.
How it works
Write a function. Wire it to anything.
Every function gets typed I/O, permissions, and services injected automatically. The function never knows which protocol called it.
REST routes with OpenAPI generation
Background jobs with retries
Managed scheduled execution
Typed realtime channels
LLM tools with approval gates
Model Context Protocol server
Command-line interfaces
Direct function calls
End-to-end type safety
Zod schemas validate at runtime. TypeScript types flow from function definition to auto-generated clients. No drift.
Built-in auth and permissions
Session management, JWT, and role-based access — declared once on the function, enforced on every surface.
Auto-generated OpenAPI
Your API spec stays in sync with your code. Routes, schemas, and permissions — always accurate.
Any runtime
Fastify, Express, Lambda, Cloudflare Workers, Bun, Next.js. Same Pikku project, your infrastructure.
Pikku Fabric
Deploy the whole backend with one command.
Fabric reads your Pikku project and deploys each function as a serverless worker. Optional — you can always self-host.
Serverless by default
Each function becomes an independent worker. Scales to zero. Pay only when functions execute.
Server mode when you need it
One flag: --mode server. Runs on Fastify, Express, or any Node/Bun runtime.
Eject anytime
Fabric is optional. Self-host on any cloud, any runtime. The framework is yours regardless.
Pricing
Open Source
Free
forever
The full framework. Self-host anywhere.
Fabric
$20/mo
scales to zero · $0 when idle
Serverless deployment platform.
Enterprise
Custom
annual license
Deploy to your own cloud.
Fabric
Get early access.
Serverless deployment for Pikku. One email when it ships.
The framework is available now.