Nora operates in one of two platform modes, controlled by theDocumentation Index
Fetch the complete documentation index at: https://noradocs.solomontsao.com/llms.txt
Use this file to discover all available pages before exploring further.
PLATFORM_MODE environment variable. In selfhosted mode (the default), you define the resource envelope your users can draw from and no billing system is involved. In paas mode, Stripe billing is enabled and each user’s resource allocation is determined by their subscription plan tier. Choose the mode that matches how you intend to operate Nora.
You can check which mode is currently active by calling the
/config/platform endpoint on your backend API. It returns a JSON object with the current platform_mode value.Comparing modes
| Self-hosted | PaaS | |
|---|---|---|
PLATFORM_MODE value | selfhosted | paas |
| Resource limits | Set by operator via env vars | Locked to Stripe subscription plan tier |
| Billing | None | Stripe (when BILLING_ENABLED=true) |
| Agent limit source | MAX_AGENTS env var | Subscription plan |
| vCPU / RAM / disk source | MAX_VCPU, MAX_RAM_MB, MAX_DISK_GB | Subscription plan tier |
| Free tier | All users share operator limits | Automatic free plan (3 agents, 2 vCPU, 2 GB RAM, 20 GB disk) |
Self-hosted mode
Self-hosted is the default mode. WhenPLATFORM_MODE=selfhosted, Nora reads a set of maximum resource values from environment variables and enforces them for every user on the platform. There is no billing system involved.
Configuring resource limits
Set the following variables to define what users can allocate when deploying agents:| Variable | Default | Description |
|---|---|---|
MAX_VCPU | 16 | Maximum vCPUs any user may allocate to a single agent. |
MAX_RAM_MB | 32768 | Maximum RAM in megabytes (32 GB default). |
MAX_DISK_GB | 500 | Maximum disk space in gigabytes. |
MAX_AGENTS | 50 | Maximum number of agents a single user may deploy. |
MAX_AGENTS, the deployment request is rejected with the message:
Agent limit reached (N/N). Contact your administrator.To increase the limit, update
MAX_AGENTS in your .env and restart the stack.
PaaS mode
PaaS mode is designed for operators who want to offer Nora as a hosted service with metered billing. WhenPLATFORM_MODE=paas, Stripe billing is integrated and each user’s resource allocation is tied to their active subscription plan.
Plan tiers
Three tiers are defined in the billing module:| Plan | Agents | vCPU | RAM | Disk |
|---|---|---|---|---|
free | 3 | 2 | 2 GB | 20 GB |
pro | 10 | 8 | 16 GB | 200 GB |
enterprise | 100 | 16 | 32 GB | 500 GB |
free plan when they first deploy an agent.
Required Stripe variables
You must configure all four Stripe variables before enabling billing:| Variable | Description |
|---|---|
STRIPE_SECRET_KEY | Your Stripe secret key. Use sk_test_... during development and sk_live_... in production. |
STRIPE_WEBHOOK_SECRET | Webhook signing secret from the Stripe dashboard, used to verify incoming events. |
STRIPE_PRICE_PRO | Stripe Price ID for the Pro plan. |
STRIPE_PRICE_ENTERPRISE | Stripe Price ID for the Enterprise plan. |
How billing enforcement works
WhenPLATFORM_MODE=paas and BILLING_ENABLED=true:
- Each deployment request checks the user’s active subscription plan.
- If the user has no subscription, a free-tier record is created automatically.
- If the user has reached their plan’s agent limit, the deployment is rejected with an upgrade prompt.
- Successful Stripe Checkout completions create or update the subscription via webhook.
- Canceled subscriptions downgrade the user to the free plan automatically.
Switching modes
To switch fromselfhosted to paas (or back), update PLATFORM_MODE in your .env and restart the stack:
Existing agents are not affected when you switch modes. The mode change only affects how new deployment requests are evaluated and what resource limits are applied.