exfa
v0.1.2
Published
TypeScript-first Express-compatible web framework
Maintainers
Readme
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
| Feature | Express | Exfa |
|---------|---------|------|
| TypeScript Support | ❌ Requires @types/express | ✅ Built-in |
| Type-safe params | ❌ req.params.id is any | ✅ req.params.id is string |
| Type-safe body | ❌ req.body is any | ✅ Full generics support |
| Bundle Size | ~200KB | ~35KB |
| Module Format | CommonJS only | ESM + CJS |
| Middleware | ✅ All work | ✅ 100% compatible |
| API | Express API | Same API |
Installation
npm install exfa
# or
bun add exfaQuick Start
// index.ts
import exfa from 'exfa';
const app = exfa();
// Type-safe route parameters
app.get<{ id: string }>('/users/:id', (req, res) => {
// req.params.id is typed as string with autocomplete!
res.json({ userId: req.params.id });
});
// Type-safe body
interface CreateUserBody {
name: string;
email: string;
}
app.post<{}, CreateUserBody>('/users', (req, res) => {
// req.body is typed as CreateUserBody
const { 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.tsExpress Middleware Compatibility
All Express middleware works seamlessly:
import exfa from 'exfa';
import cors from 'cors';
import helmet from 'helmet';
import compression from 'compression';
const app = 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
| Middleware | Description |
|------------|-------------|
| 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
