Skip to content

Shokupan

The web framework that feels like a fresh start.

Type Safe

End-to-end type safety with decorators. Pass data around without ever losing your types.

Zero Config

Stop configuring build tools. Shokupan just works, letting you focus on your product.

Debug Dashboard

Visualize your routes and debug requests with a beautiful built-in dashboard.

Snappy Performance

Built on Bun for instant startup times and low-latency responses.

Auto OpenAPI

Generate OpenAPI specs automatically from your routes

Rich Plugin System

CORS, Sessions, Auth, Validation, Rate Limiting, and more out of the box

Flexible Routing

Express-style routes and decorator-based controllers - fully interoperable and first-class

WebSocket Support

First-class WebSocket support with routers, controllers, and decorators for real-time apps

Express Compatible

Works with Express middleware patterns you already know

Built-in Telemetry

OpenTelemetry instrumentation out of the box

OAuth2 Support

GitHub, Google, Microsoft, Apple, Auth0, Okta ready to go

Multi-validator Support

Zod, Ajv, TypeBox, Valibot - use what you prefer

Beautiful Docs

Beautiful OpenAPI documentation with Scalar

import { Shokupan } from 'shokupan';
const app = new Shokupan({
port: 3000,
development: true
});
app.get('/', (ctx) => {
return { message: 'Hello, World!' };
});
app.listen();

That’s it! Your server is running securely at https://localhost:3000 🎉

Shokupan (食パン - Japanese for “white bread”) provides the foundation for your web applications - simple, reliable, and essential. It combines:

  • Familiarity: Express.js-like API that feels natural
  • Modern Architecture: NestJS-style decorators and dependency injection
  • Performance: Built on Bun for exceptional speed
  • Developer Experience: Full TypeScript support with excellent type inference
  • Ecosystem: Compatible with the vast Express plugin ecosystem

Shokupan makes a fundamental design decision: both functional routers and decorative controllers are first-class citizens and fully interoperable.

You can freely mix and match routing styles:

  • Functional routing (app.get(), app.post()) for simple APIs and rapid prototyping
  • Decorator-based controllers (@Get(), @Post()) for structured, enterprise applications
  • Combine both seamlessly in the same application

For large applications, choose whichever style your team prefers and stick with it for consistency. If you encounter gaps or limitations, file an issue - Shokupan solves problems at the fundamental level, not through monkeypatches.