Lewati ke konten utama
Flowra v1.0.3

Flowra adds structure to Node.js services

Flowra is a modular Express framework with a dependency-injected container and CLI that standardize how services are organized.

Node.js 18+ExpressKnexAwilix
Quickstart
npm install -g flowra-cli
flowra create-app my-flowra-app
cd my-flowra-app
npm install
npm run dev
Run flowra route:list to see generated routes.

Why teams choose Flowra

Flowra keeps Express familiar while adding structure, tooling, and clarity for modern backend teams.

Modules

Module-first architecture

Each module includes routes, controllers, services, and models so teams keep features cohesive and easy to navigate.

Container

Dependency injection that stays explicit

Services resolve through a lightweight container with scoped modules and clear naming. Dependencies remain explicit across scopes.

CLI

Scaffolding you can trust

Generate modules, models, migrations, and resources quickly. The CLI keeps conventions consistent across teams.

Runtime

Operational defaults

Helmet, request IDs, structured logging, cache managers, and health checks are wired in so your baseline behaviors stay consistent.

A framework you can reason about

Flowra keeps the request path explicit: build a container, register modules, map routes, and respond.

Step 1: Compose the container

Core, infrastructure, and modules are registered into a predictable container scope. Dependencies stay explicit and testable.

Step 2: Attach module routes

Each module exports a routes function. The HTTP router loops through enabled modules and binds their routes to Express.

Step 3: Return consistent responses

Controllers call services, errors flow through the handler, and every response carries a request ID for traceability.

Minimal routes, maximum clarity

The CLI scaffolds modules with controllers and services wired in. You only add the logic that makes your API unique.

// app/Modules/Status/status.routes.js
module.exports = ({ router, container }) => {
const controller = container.resolve('modules.status.controllers.main');
router.get('/status', controller.index.bind(controller));
return router;
};

Ready to build your first module?

Follow the guide and put a working API together.

Build your first API