Thedecorator-drivenHTTP framework

Build structured, type-safe APIs with decorators, dependency injection, and Koa-style middleware - powered by Web Standards. Deploy to Bun, Deno, Node.js, or any serverless / edge platform.

Runs everywhere JavaScript runs

Bun
Deno
Node.js
Cloudflare
AWS Lambda
Vercel

01 · Developer experience

Familiar patterns,
modern foundation

The architecture you know from Angular and NestJS - controllers, modules, DI, and Koa-style middleware - rebuilt from scratch on native decorators and Web Standards.

  • Decorators That Just Work

    @Controller, @Get, @Injectable, @Module - the modern decorator standard. No reflect-metadata, no experimental flags, no setup.

  • Web Standards First

    Request in, Response out. Your handlers receive standard web objects - no proprietary context, no framework lock-in.

  • Koa-Style Middleware

    A single middleware concept replaces interceptors, pipes, and filters. Easier to learn, easier to compose.

users.controller.ts
@Controller('/users')
export class UserController {
  private userService = inject(UserService)

  @Get('/')
  async list() {
    return this.userService.findAll()
  }

  @Post('/')
  @Status(201)
  @ValidateBody(CreateUserSchema)
  async create(ctx: RequestContext) {
    const input = await ctx.json<CreateUserInput>()
    return this.userService.create(input)
  }
}

02 · Portability

One handler,
every platform

Inspired by Hono's multi-runtime philosophy. Write your API once and deploy it to any JavaScript runtime, serverless platform, or edge network.

  • True Portability

    Bun, Deno, Node.js, Cloudflare Workers, AWS Lambda - same code, different entry point.

  • Modern JavaScript Only

    Pure ESM, latest ECMAScript target. Clean imports, fast startup, works with modern tooling out of the box.

  • Serverless Ready

    Use app.fetch as your handler - Cloudflare Workers, AWS Lambda, or any edge platform. Lazy init, zero overhead.

main.ts
const app = new Miia().register(AppModule)

// Bun / Deno - auto-detected
await app.listen(3000)

// Node.js / uWebSockets.js
await app.listen(3000, serve)

// Cloudflare Workers
await app.init()
export default app

03 · Batteries included

Everything you need.
Nothing you don't.

Every tool you need to ship production APIs. Nothing you need to rip out later.

Simple Dependency Injection

Per-app container with inject() - no global singletons, no hidden magic. Singleton, transient, and request scopes built in.

Auth & Guards

JWT and local strategies with composable guards. Protect routes at any level - skip specific guards when needed.

Schema Validation

Validate request body, query, and params with any ZodLike schema. Type-safe from request to handler, errors handled automatically.

Database Ready

Official integrations for PostgreSQL, MySQL, and SQLite via Drizzle ORM, and MongoDB via Papr and Mongoose.

Swagger / OpenAPI

OpenAPI 3.1 spec auto-generated from your decorators. Swagger UI included and ready to serve.

Developer CLI

Dev server, production builds, type-checking, and project scaffolding - one tool for the full workflow.

17%

faster than Hono
on Bun (realistic API)

38%

faster than
NestJS + Fastify on Bun

0

reflect-metadata,
experimental flags, lock-in

Ready to build with
MiiaJS?

Start building in minutes. Open source, MIT licensed.