Self-hosted vs PaaS platform modes
Understand the difference between Nora’s selfhosted and paas modes, how resource limits and Stripe billing apply to each, and how to switch between them.Nora operates in one of two platform modes, controlled by the
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 plan tiers control agent-count and managed-backup entitlements while the operator sets one platform-wide vCPU, RAM, and requested-disk default for new agents. 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 mode value.Comparing modes
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:
When a user reaches
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 applies plan-specific agent-count and managed-backup entitlements. New-agent compute specs come from the operator-managed platform deployment defaults rather than the user’s plan tier.
Plan tiers
Three tiers are defined in the billing module:vCPU, RAM, and disk are not differentiated by plan tier. Every PaaS subscription receives the
platform-wide deployment defaults (
default_vcpu / default_ram_mb / default_disk_gb)
configured in Admin Settings — only the per-tier agent limit (and managed-backup limits) differ.
The shipped fallback defaults are 1 vCPU / 1024 MB / 10 GB.free plan when they first deploy an agent.
Required Stripe variables
You must configure all four Stripe variables before enabling billing: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:

