StartXKit docs
Architectures

Modular Architecture

A feature-first layout where each module keeps its related files together.

Modular architecture organizes code by feature.

Each feature gets its own folder under src/modules. That folder can contain a route, controller, service, repository, interface, and validator depending on the layer depth you choose.

When To Use Modular

Use modular when:

  • Your API has several features
  • You want each feature to be easy to find
  • You prefer users files to live together
  • You want more structure than minimal, but less ceremony than layered
  • Your team works by feature area

Structure

src/
  server.ts
  routes/
    index.ts
  modules/
    health/
      health.route.ts
      health.controller.ts
    users/
      users.route.ts
      users.controller.ts
      users.service.ts
      users.repository.ts
      users.interface.ts
      users.validation.ts
  shared/
  config/

Request Flow

Request
  |
  v
routes/index.ts
  |
  v
modules/users/users.route.ts
  |
  v
modules/users/users.controller.ts
  |
  v
optional service/repository
  |
  v
Response

File Responsibilities

FileResponsibility
users.route.tsDefines HTTP paths and attaches handlers
users.controller.tsReads request data and returns responses
users.service.tsContains business logic
users.repository.tsContains data access code
users.interface.tsDefines shared TypeScript shapes
users.validation.tsKeeps validation schemas or validation helpers

Why Use Modular

Modular projects are easy to navigate:

Need to work on users?
  open src/modules/users

Need to work on orders?
  open src/modules/orders

The feature folder is the boundary. That makes modular a good default for many APIs.

Trade-Off

Modular keeps related files together, but large projects can still become dense if every module grows many layers. If your team needs all controllers together, all services together, or all repositories together, use layered.