Modules Catalog
Fourteen core modules across nine domains, each a typed contract behind the plugin host - use them, override them, or swap their adapters.
Introduction
Openora.ai ships fourteen core modules, grouped into nine domains. Each is a typed contract behind the plugin host, so you can use it as-is, override individual operations, or swap out its adapters. All fourteen load by default; a gated add-on loads only when you allowlist it.
Platform
- IAM - admin roles, a permissions matrix, and admin invitations.
- Identity - sessions, registration, password reset, two-factor, lockout.
- Audit - append-only, sha256 hash-chained log of every state-changing action.
- Notifications - delivery behind a swappable adapter.
- Compliance - KYC verification, responsible gaming (limits, cool-off, self-exclusion), geo rules.
Player-facing
- Wallet - deposits, withdrawals, auto-withdrawal rules, multi-currency transaction history, idempotency on the money path.
- Gaming - game catalogue and game rounds.
- Lobby - lobby categories and featured slots.
- Chat - rooms, messages, user blocks, pushed over SSE.
- Profile - the player's own profile and status.
- Tag - player segmentation and rule-driven tagging.
Backoffice
- Admin console - admin routes behind a single
AdminGuardenforcement point. - Player note - operator notes against a player.
- CMS - pages and banners.
Plus one gated add-on, player-management (the admin PAM surface), which loads only when listed in the OSS_ADDONS allowlist.
Adapter ports
Every third-party integration sits behind a typed token. A mock implementation ships as the reference; you bind the real vendor in your own plugin.
- PAYMENT_ADAPTER - your PSP.
- KYC_ADAPTER - your verification vendor.
- GAME_ADAPTER / AGGREGATOR_ADAPTER / RNG_ADAPTER - your game providers.
- NOTIFICATION_DELIVERY_ADAPTER, SEND_EMAIL - your delivery channels.
- JOB_QUEUE, CACHE, RATE_LIMITER - in-process by default, Redis-backed when
REDIS_URLis set. - MESSAGE_BROKER, REALTIME_TRANSPORT - in-process bus and SSE by default.
No production vendor implementation ships in the framework today. That is deliberate: the port is the contract, and the binding is yours.
In your own repo, pnpm gen plugin <name> scaffolds an overlay under
extensions/<name>/, and pnpm gen adapter binds your vendor over a shipped
mock - both registered in extensions.config.ts, zero files forked. The
module, route, config, event, service and app generators are
core-only - they throw outside the framework monorepo.
What isn't here
There is no sportsbook, no bonus/promotions engine, and no affiliate module. Those are domains you build on top of the same wallet, identity, compliance and audit foundation - see Solutions.
Next: read Compliance & Audit Trail before you go live with real-money flows.