fluo is a modern TypeScript backend framework built from the ground up on TC39 standard decorators. It provides a high-performance, explicit, and metadata-free alternative to legacy decorator-based frameworks.
Most TypeScript frameworks (like NestJS) are stuck in the past, relying on experimentalDecorators and emitDecoratorMetadata flags that deviate from the JavaScript language path. fluo moves the industry forward.
- 🚀 Performance Without Magic: No heavy reflection libraries or hidden metadata emit. fluo is lean, fast, and stays close to the metal.
- 🛡️ Explicit Over Implicit: Dependency injection is clear and auditable. You see your dependency graph in your code, not in compiler-generated blobs.
- 🌍 Run Anywhere: Built on a unified runtime facade. Move from Fastify on Node.js to Bun, Deno, or Cloudflare Workers with zero logic changes.
- ✨ Future-Proof: Designed for the modern TypeScript era. Use the strongest type-safety features without fighting legacy compiler behaviors.
Imagine a framework that feels like NestJS in its organizational power, but like Go in its explicitness.
import { Module, Inject } from '@fluojs/core';
import { UsersRepository } from './users.repository';
@Inject(UsersRepository)
export class UsersService {
constructor(private readonly repo: UsersRepository) {}
}
@Module({
providers: [UsersService, UsersRepository],
})
export class UsersModule {}No legacy flags required. Just standard TypeScript.
The fastest way to experience fluo is through the official CLI.
# Get the CLI
pnpm add -g @fluojs/cli
# Spin up a project
fluo new my-backend
cd my-backend
# Start the engine
pnpm devGenerated Node.js starter lifecycle scripts delegate to fluo dev, fluo build, and fluo start, so the CLI selects runtime-specific commands and applies sensible NODE_ENV defaults when unset. Bun, Deno, and Cloudflare Workers starters keep the same fluo dev abstraction while defaulting to runtime-owned watch loops, expose fluo dev --runner fluo when you need the CLI restart supervisor, and use runtime-native production or deployment scripts.
The starter template gives you a production-ready setup with Fastify, built-in health checks, and an organized directory structure designed to scale.
fluo isn't a monolith. It's a collection of precision-engineered modules:
| Category | Packages |
|---|---|
| Runtimes | Fastify, Node.js, Bun, Deno, Workers |
| Database | Prisma, Drizzle, Mongoose |
| API/Comm | HTTP, GraphQL, OpenAPI, WebSockets, Socket.IO |
| Logic | DI, CQRS, Validation, Serialization, Config |
| Messaging | Notifications, Email, Slack, Discord |
| Ops | Metrics, Health (Terminus), Redis, Queue |
- 📖 Documentation Hub: Deep dives into architecture, DI, and patterns.
- 🚀 Getting Started: Your first 15 minutes with fluo.
- 🧭 Canonical Runtime Package Matrix: The source of truth for official runtime/package coverage.
- 💡 Example Apps: From minimal setups to complex RealWorld APIs.
- 🛠️ CLI Guide: Master the
fluocommand for rapid development.
- 💬 Discussions: Questions, ideas, RFCs, and showcase posts.
- 🐛 Issues: Bug reports, documentation gaps, and feature requests.
- 🤝 Contributing: Local setup, verification steps, and PR process.
- 🛟 Support: Which channel to use for usage help and triage.
- 🔒 Security: Private vulnerability reporting policy.
We believe in Behavioral Contracts. Every package in this repo follows strict reliability rules, ensuring that your backend behaves exactly how you expect it to, regardless of the runtime.
Built with ❤️ for the TypeScript Community.
