ExisJS
v0.7.0 · MIT licensed · Open source

Developer experience meets thoughtful engineering.

A modern TypeScript web framework for Node.js. Build clean APIs with file-based routing, modular boundary pipelines, and end-to-end type safety without boilerplate.

~npm create exisjs@latest
Cold start
60ms
Config required
0 files
Type coverage
DB → client
License
MIT

A file becomes an endpoint. An endpoint becomes a function call.

No route registry, no manually maintained client SDK. Both sides come from the same source of truth.

src/http/users/[id]/route.ts
import { controller, route } from 'exisjs/router'import { tex } from 'exisjs/validator'
const ParamsSchema = tex.object({ id: tex.string() })
export default controller({  get: route.get('/', {    params: ParamsSchema,    handle({ params }) {      return { id: params.id, name: "Alice" }    }  })})
anywhere on your client
import { client } from '@/api'
const user = await client.users['[id]'].get({  params: { id: "42" }})
// user is fully typed:// { id: string, name: string }

A cohesive foundation for your API.

Built with a focused, standard set of core primitives so you can write clean, maintainable backend services with confidence.

File-System Routing

Drop a file in src/http and get a typed API endpoint back. Functional handlers and OOP decorators both work, with zero boilerplate to wire them up.

Dependency Injection

A DI container built into core, not bolted on. Structure business logic with providers and injectables, with zero reflection configuration.

Folder Boundaries

A modern boundary.ts system. Configure CORS, headers, exclusions, and an auto-detected onion pipeline scoped cleanly to any sub-tree.

Rust-Powered Validation

A fast, native schema validation engine that checks request payloads efficiently without adding bloat to your dependencies.

Plugin Architecture

A modular core architecture built on definePlugin. Encapsulate functionality, register middleware, and extend the framework cleanly.

End-to-End Type Safety

The ultimate file → typed endpoint → typed client loop. ResolveSchema infers TypeScript types directly from validation definitions.

From zero to a typed API in three steps.

01

Install

One command scaffolds a project with sane defaults.

02

Add a route file

Create a file under src/http. The path and method are inferred from its name.

03

Call it, fully typed

Import the generated client anywhere. Params, response shape, and errors are all typed.

Built in the open.

ExisJS is MIT-licensed and developed in public. Read the source, open an issue, or ship a fix the roadmap and RFCs live on GitHub, not behind a paywall.

Ship your next API without the setup tax.

One command scaffolds a fully typed project. No config files to write before you can make your first request.