Skip to content

fluojs/fluo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,899 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fluo framework logo

fluo

Standard-First TypeScript Backend Framework

English  ·  한국어

GitHub stars License CI Issues


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.

Why fluo?

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.

The Developer Experience

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.

Quick Start

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 dev

Generated 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.

A Modular Ecosystem

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

Where to Go Next?

Community

  • 💬 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.

Our Philosophy

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.

Packages

 
 
 

Contributors