Documentation/titan/Community Modules
In this section

Community Modules

community · @your-scope/titan-yourmodule

No community-maintained Titan modules are registered yet. This page is the canonical home for them as the ecosystem grows.

What counts as a community module

A community module is a third-party package that:

  1. Follows the Titan module conventions — exports a class with .forRoot(...) (and ideally .forRootAsync(...)).

  2. Depends on @omnitron-dev/titan and (optionally) @omnitron-dev/titan-redis or other ecosystem modules.

  3. Is published to a public registry (npm, GitHub Packages, etc.).

  4. Is maintained outside the omnitron-dev organisation.

Adopting a community module — what to check

flowchart LR
  Find[Find a candidate]
  Find --> Audit{Read the source}
  Audit -->|forRoot signature documented| OK1[OK]
  Audit -->|undocumented| Reject1[Reject]
  Audit --> Lifecycle{Honours onInit/onStop?}
  Lifecycle -->|yes| OK2[OK]
  Lifecycle -->|no| Reject2[Reject — resource leaks likely]
  Audit --> Pinning{Pins exact titan core?}
  Pinning -->|no \^/~ range| OK3[OK]
  Pinning -->|exact| Yellow[Yellow — needs updates]
  OK1 --> Try[Try in dev]
  OK2 --> Try
  OK3 --> Try
  Yellow --> Try
  Try --> Decide{Use in prod?}

Specifically:

  • Lifecycle compliance. Does it implement OnInit / OnStart / OnStop / OnDestroy properly? Lifecycle violations leak resources at shutdown.

  • Token isolation. Does it export typed tokens for all its services? Modules that resolve by string keys are fragile.

  • Configuration validation. Does the forRoot options interface have a Zod schema, or does it crash at first use on bad configuration?

  • Test coverage. Does the package ship with a test suite that exercises the public API?

  • Maintenance. When was the last commit? Does the maintainer respond to issues?

Publishing your own

Quick summary:

  1. Package convention. Name it <your-scope>/titan-<purpose> (e.g. @acme/titan-stripe).

  2. Module class. Export a XxxModule class with at least .forRoot(options). Add .forRootAsync(...) if your configuration depends on other providers.

  3. README. Document the forRoot options, the exported services and tokens, and a minimal quickstart.

  4. License. MIT or Apache 2.0 are the friendliest defaults.

  5. Mention us. Open a PR against omnitron-dev/omni adding your module to this page. Include the package URL, a one-line purpose statement, and a maintenance commitment.

→ Full step-by-step guide: Authoring a module covers the canonical package skeleton, every conventional file, options + tokens + service + module class + barrel + README, plus the conventions checklist that distinguishes a polished module from a thrown-together one.

Future entries

Once community modules are registered, each gets its own page in this section with a <span class="module-badge">community</span> chip. The reader knows at a glance the module is third-party and should be audited before adoption.

For the canonical Titan ecosystem, see the Official modules.