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 →