Skip to content

Vision & why Omega

This topic explains why Omega exists and when it helps — comparable to Angular’s high-level “why Angular” narratives before you adopt patterns across a codebase.

Omega is an architecture for large or growing Angular applications where user intent, feature orchestration, and side effects (HTTP, storage, analytics) should stay explicit and decoupled. omega-angular brings that model to Angular with a small runtime: channel, intents, flows, agents, and optional tooling (ESLint, schematics).

Vision

  1. Intent-first — Everything important a user or subsystem wants to do is expressed as an OmegaIntent (a name + typed payload). That makes “what happened” readable in logs, tests, and code reviews.

  2. Flows orchestrate, agents executeOmegaFlow classes describe what should happen next in a feature (validation, emitting channel events, coordinating steps). OmegaAgent + behaviors turn events into reactions (call APIs, persist session). Flows stay thin; IO lives where it belongs.

  3. One shared channelOmegaChannel broadcasts OmegaEvent instances. Flows and agents coordinate without importing each other’s concrete classes: they agree on wire names and payloads. That reduces coupling as the app adds features and teams.

  4. Explicit activationOmegaFlowManager decides which flows are active (switchTo, activate, …). That makes feature boundaries and “who listens now” a deliberate choice — helpful for navigation-heavy or modular UIs.

  5. Tooling as architecture guardrails — Lint rules and eslint-then builders nudge you toward services + agents for IO, flows for orchestration, keeping components mostly presentational — so the vision doesn’t erode under deadline pressure.

In short: Omega’s vision is a structured, event-driven collaboration layer between UI and the rest of the world, with clear words (intents/events) and clear roles (flow vs agent).

Why use omega-angular?

ReasonDetail
Scales with featuresAdd a feature folder with omega/ (flow, behaviors, agent) without rewiring the whole app — register in omega-setup.ts.
TestabilityDrive flows with handleIntent; assert OmegaChannel emissions; mock HttpClient behind agents — boundaries are explicit.
Aligned teamsShared vocabulary (intent, event, flow, agent) across features and in docs — easier onboarding and PR reviews.
Less “god services”Orchestration sits in flows; long if-chains of unrelated concerns are harder to justify when agents and events are the default path.
Shipped toolingng add omega-angular, feature/ecosystem schematics, bundled ESLint config — less boilerplate and fewer ad-hoc patterns.

When it might be overkill

  • Very small apps or internal tools with one screen and no growth — plain services + signals/components can be enough.
  • Teams that don’t want event-driven semantics — Omega assumes you’ll name events and route intents deliberately; that has a learning curve.
  • If you need offline-first sync or CRDT as the core model, you may layer Omega on top, but it isn’t a replacement for a domain-specific data layer.

Where to go next

Omega Angular — by Yeferson Segura. Documentation for the npm package and this repository.