Cloudflare Workers Paid plan
Required for Durable Objects and Containers. The free plan won’t work.
You can run all of openma — the API, the Console, the integrations gateway, and the agent runtime — on your own Cloudflare account. The same code that powers openma.dev is the code in the public repo; nothing is held back.
This page describes what you’re getting into. The next page, Deploy, is the step-by-step.
openma deploys as four Workers plus a set of bindings:
| Worker | Purpose |
|---|---|
apps/main | REST API + Console static assets. The front door. |
apps/agent | Session Durable Objects + sandbox Containers. Where agents actually run. |
apps/integrations | OAuth callback + webhook gateway for Linear / GitHub / Slack. |
apps/docs | This site. (Optional — only if you want your own docs.) |
They talk to each other via service bindings (Worker-to-Worker calls, no public hop). State lives in:
SESSION_DO (per-session event log SQLite), SANDBOX (per-session container).bash tool runs in).Cloudflare Workers Paid plan
Required for Durable Objects and Containers. The free plan won’t work.
A domain
You’ll point routes at it. openma.dev in our deployment; whatever you own in yours.
An LLM provider
Anthropic, OpenAI, MiniMax, or any OpenAI-compatible endpoint. You pay them directly.
OAuth apps
You’ll register your own GitHub App, Linear OAuth, and Slack app. Walked through in OAuth Apps.
In rough order of cost (highest first):
There are no openma platform fees because there is no openma platform — it’s all your Cloudflare account.
A single self-hosted deployment supports multiple tenants out of the box (the same code path the hosted product uses). On first sign-up, the databaseHooks.user.create.after hook creates a tenant row idempotently. You don’t need to seed anything.
If you want stricter isolation (per-tenant D1 databases), set PER_TENANT_DB_ENABLED=true and configure STORE_BACKENDS. See Operations.