Quickstart
Run the framework locally, scaffold an app on top of it, and call your first typed route.
Openora is headless by design. This guide gets a local copy running so you can explore the modules, contracts and plugin host, then scaffolds the consumer app that actually serves an API.
Requirements
- Node.js 26+ and pnpm 11+
- PostgreSQL 16, or Docker if you would rather not install it locally
Set up the framework repo
The framework repo is a library, not a server. It ships @openora/core and the tooling around it; there is no API to boot here. The fastest path checks prerequisites, installs dependencies, starts Postgres and applies migrations:
git clone https://github.com/blurifycom/openora
cd openora
pnpm setup:agent # prereqs + deps + Postgres + migrations
pnpm seed # demo data: admin + players + wallets + gamesPrefer the explicit steps?
pnpm install
docker compose up -d # Postgres only
pnpm -F @openora/core generate # generate Drizzle migrations
pnpm db:migrate:all # apply them
pnpm seedSeeding logs you in with [email protected] / password123. Flags: --players=<n>, --admin-email=<e>, --admin-password=<p>.
Not an API. The runnable API lives in a consumer app you generate with pnpm create:app.
Run an API
Scaffold a consumer app. It installs @openora/core from npm, registers every core module against the plugin host, and never forks the framework:
pnpm create:app my-gaming-core
cd my-gaming-core
pnpm install
cp .env.example .env # set DATABASE_URL + AUTH_SECRET
pnpm db:migrate
pnpm dev # api on :3001curl http://localhost:3001/healthThe generated app is a thin createApp() entry plus your own extensions.config.ts. Your frontend is a separate repo that talks to this API over HTTP via @openora/core/react.
Add a module
Inside the framework monorepo, scaffold a standalone core add-on - schema, service, router, contract slice and plugin.ts are generated and registered for you:
pnpm gen module tournaments # creates @openora-addons/tournaments + registers it
pnpm regen && pnpm verifyFill the // AGENT: implement here regions and leave the wiring alone.
gen module, route, config, event, service and app are core-only generators - they throw outside the framework monorepo. In a consumer repo you extend through overlays instead:
pnpm gen plugin <name> # an overlay under extensions/<name>/
pnpm gen adapter # bind your vendor over a shipped mockNext steps
- Core concepts - plugins, contracts, services, adapters, events.
- Modules catalog - every core domain that ships out of the box.
- Compliance and audit trail - read before you touch anything real-money.