Skip to content

Repository files navigation

Exfa 🚀

TypeScript-first Express-compatible web framework

Exfa is a modern, type-safe rewrite of Express.js that provides first-class TypeScript support while maintaining 100% API compatibility with Express middleware.

Features

  • TypeScript-first - Full generics for req.params, req.body, req.query
  • Express compatible - All Express middleware works out of the box
  • Modern - ES2022, NodeNext modules
  • Type-safe - Strict mode with comprehensive type definitions
  • Same API - Drop-in replacement for Express

Exfa vs Express

FeatureExpressExfa
TypeScript Support❌ Requires @types/express✅ Built-in
Type-safe paramsreq.params.id is anyreq.params.id is string
Type-safe bodyreq.body is any✅ Full generics support
Bundle Size~200KB~35KB
Module FormatCommonJS onlyESM + CJS
Middleware✅ All work✅ 100% compatible
APIExpress APISame API

Installation

npm install exfa
# or
bun add exfa

Quick Start

// index.tsimportexfafrom'exfa';constapp=exfa();// Type-safe route parametersapp.get<{id: string}>('/users/:id',(req,res)=>{// req.params.id is typed as string with autocomplete!res.json({userId: req.params.id});});// Type-safe bodyinterfaceCreateUserBody{name: string;email: string;}app.post<{},CreateUserBody>('/users',(req,res)=>{// req.body is typed as CreateUserBodyconst{ name, email }=req.body;res.status(201).json({ name, email });});app.listen(3000,()=>{console.log('Exfa server running on http://localhost:3000');});

Run:

npx tsx index.ts

Express Middleware Compatibility

All Express middleware works seamlessly:

importexfafrom'exfa';importcorsfrom'cors';importhelmetfrom'helmet';importcompressionfrom'compression';constapp=exfa();app.use(cors());app.use(helmet());app.use(compression());app.use(exfa.json());app.use(exfa.urlencoded({extended: true}));app.use(exfa.static('public'));

Built-in Middleware

MiddlewareDescription
exfa.json()Parse JSON bodies
exfa.urlencoded()Parse URL-encoded bodies
exfa.raw()Parse raw bodies
exfa.text()Parse text bodies
exfa.static()Serve static files

Migration from Express

- import express from 'express';+ import exfa from 'exfa';- const app = express();+ const app = exfa();

No other changes needed! All your routes and middleware work as-is.

License

MIT

About

express for all => exfa

Resources

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages