Why teams choose Flowra
Flowra keeps Express familiar while adding structure, tooling, and clarity for modern backend teams.
Module-first architecture
Each module includes routes, controllers, services, and models so teams keep features cohesive and easy to navigate.
Dependency injection that stays explicit
Services resolve through a lightweight container with scoped modules and clear naming. Dependencies remain explicit across scopes.
Scaffolding you can trust
Generate modules, models, migrations, and resources quickly. The CLI keeps conventions consistent across teams.
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.