Skip to main content

Efesto

Filesystem-routing API framework for Node.js/Express and Bun/Elysia

one framework, two stacks: express · bun/elysia

Your filesystem is the router

Drop a file in routes/. Its location is the URL. No route tables to register, no decorators to keep in sync.

routes/index.ts/
routes/health.ts/health
routes/users/index.ts/users
routes/users/[id].ts/users/:id
routes/users/[id]/posts.ts/users/:id/posts

One file serves every verb: declare _get, _post, _put, _delete in the same module.

Filesystem routing

One model, two runtimes

The same routes directory runs on Node with Express, or on Bun with Elysia. Switch the import, keep the conventions.

import efesto from "efesto" // Node + Express
import efesto from "efesto/elysia" // Bun + Elysia
Bun / Elysia →

OpenAPI and types, generated

Express derives Swagger and TypeScript types from your schemas; Elysia infers them from TypeBox. Your editor already knows the request shape.

"string::email!"string
"@User[]"User[]
Type generation