Skip to main content
All configuration is via environment variables. Use .env.example in the repo as a starting point.
Required refers to production. Setting OMNARA_ALLOW_INSECURE_DEV_DEFAULTS=1 fills the fallbacks marked dev below (local Compose services, console email, an insecure secret-encryption key). Never set it in production.

Core

Database and Redis

PostgreSQL 18 or newer is required. The API, worker, and maintenance services default to a pool of 1–10 connections, a 30-minute idle timeout, a 30-minute connection lifetime, and five minutes of lifetime jitter. Override these with pool_* settings in OMNARA_DATABASE_URL, and budget connections across all service replicas. Direct PostgreSQL, RDS Proxy, and PgBouncer session pooling work with these settings. PgBouncer transaction pooling requires max_prepared_statements > 0; statement pooling is not supported. The migrator defaults to a 30-second lock timeout and a 15-minute statement timeout. Explicit values in OMNARA_DATABASE_URL take precedence.

Web serving and proxy

Email

Signup and password reset send email through OMNARA_EMAIL_DRIVER. In production, use smtp or sendgrid — or disable both flows with OMNARA_AUTH_SIGNUP_ENABLED=0 and OMNARA_AUTH_PASSWORD_RESET_ENABLED=0.

Auth and SSO connectors

GitHub uses kind:"github" (endpoints default to github.com; GitHub-compatible providers must supply issuer, authorization_url, token_url, and userinfo_url). Google and generic SSO providers — Keycloak, Okta, Auth0, Azure, ZITADEL — use kind:"oidc" with issuer discovery. An example is shown below:

Secret encryption

Secret values are envelope-encrypted with keys from this ring. Generate each key with openssl rand -base64 32. To rotate: add the new key to the ring, set it active, rewrap stored versions, then remove the old key once nothing references it.

Skill download capabilities

Skill archive offers use a short-lived capability bound to one machine, skill, and revision.

Blob storage

Artifact content lives in S3-compatible object storage; a bucket is required.

Machine daemon and pools

API daemon configuration

Machine pool templates automatically create a base machine pool for any new organization. The supported providers are listed below: Provider notes:
  • Custom pool images must provide a writable HOME or OMNARA_HOME, plus a POSIX shell, standard Unix utilities, curl, and sha256sum or shasum for the Omnara launcher (startup_script additionally requires base64).
  • Blaxel images must be sandbox images built or pushed through Blaxel (custom images must include sandbox-api), and unlimited persistence requires quota Tier 2 or higher — Tier 0 and Tier 1 cap sandbox lifetimes at 7 and 30 days.
  • Daytona snapshots are allowed by name, must be active in the selected target, must allow sandboxes to reach OMNARA_PUBLIC_URL, and their API-resolved CPU and memory count against the pool caps.
  • For Unikraft and Blaxel, sleep_after_ms enables scale-to-zero after that many milliseconds of daemon inactivity; omit or 0 disables it, and enabled values must be at least 30000.

Operator-provisioned default model provider

An installation can give each new organization a model provider without storing the upstream credential in configuration. Leave these variables unset to let organization owners configure providers themselves. The credential service contract has these invariants:
  • POST /model-provider-credentials receives the organization ID, creator user ID, and provider template. A successful response is 201 with {"credential_value":"..."}; 202 and 5xx are retryable, while 409 represents a durable identity or provisioner conflict.
  • The organization ID is the stable issuance identity. The same request may be repeated until Omnara commits the credential, provider, models, grants, and job completion together. The credential service must recover ambiguous issuance without returning an unusable credential.
  • Organization creation never depends on credential issuance. The API attempts provisioning after commit, and maintenance retries failures.
  • Apply migrations before deploying both binaries. The API and maintenance must use the same template, credential-service configuration, and secret-encryption key ring.

Host daemon configuration

Web tools

Web tools work out of the box: web_fetch has no vendor dependency, and web_search defaults to Exa’s keyless endpoint.