GETTING STARTED

Project Structure

Rasengan Server doesn't enforce a folder structure — modules, controllers, and providers are just classes and plain objects. In practice, a feature-folder convention (one file per concern, grouped by feature) tends to work best as an app grows:

A typical project layout
src/ main.ts # bootstrap() entry point app.module.ts # root module — imports feature modules user.module.ts # feature module user.controller.ts # routes for this feature user.service.ts # business logic, injected into the controller chat-room.module.ts chat-room.gateway.ts # WebSocket gateway (@rasenganjs/ws) chat-room.service.ts queue.module.ts queue.controller.ts hello.queue.ts # background queue (@rasenganjs/queue) rasengan.server.ts # CLI + bootstrap() configuration

Naming Convention

Each file is suffixed by what it is, not what it does — user.controller.ts, user.service.ts, user.module.ts — so related files sort together and their role is obvious at a glance:

SuffixRole
*.module.tsA defineModule() config — groups controllers/providers/imports
*.controller.tsA Controller subclass — HTTP routes
*.service.tsA plain class (or Provider subclass) — business logic, injected into controllers
*.gateway.tsA Gateway subclass (@rasenganjs/ws) — WebSocket event handlers
*.queue.tsA Queue subclass (@rasenganjs/queue) — background job handlers

The Root Module

app.module.ts is typically the one module registered directly in main.ts — every other feature module is imported into it:

app.module.ts
import { defineModule } from '@rasenganjs/server'; import userModule from './user.module'; import chatRoomModule from './chat-room.module'; import queueModule from './queue.module'; export default defineModule({ imports: [userModule, chatRoomModule, queueModule], });
main.ts
import { bootstrap } from '@rasenganjs/server'; import appModule from './app.module'; bootstrap((app) => { app.registerModule(appModule); });

See Modules for how imports/exports/global control visibility between feature modules.

Where Config Lives

rasengan.server.ts (project root, alongside package.json) holds the entry path, port, host, and build options consumed by the CLI — see Config & Build.

Installation
CLI