Limits and fair use

Every plan comes with resource and network limits sized to the tier. Most apps never touch them; they exist to keep one workload from crowding out others, and to stop a bug or a compromised dependency from being used for abuse. If a limit is in your way for a legitimate reason, open a support ticket from your dashboard and we'll raise or lift it for your app or your whole team, usually the same day.

Compute (per plan)

Your plan sets each replica's CPU and memory, plus how many replicas and deployment slots you can run. Change plan any time; the new size applies on your next deploy. The full grid is on each app's Scaling tab and the pricing page. See Scaling and HA.

Per team, you can run one app, one database, and one cache without a card, and ten of each with one. The Free plan is limited to one app per team.

Disk is temporary

Your app's filesystem is scratch space. Anything written inside the container is gone after the next deploy or restart, and when a Free app goes to sleep. Keep anything that must last in Postgres, Valkey, external object storage, or a volume (paid plans, up to 50 GB per app).

Outbound network (egress)

The connection rules below only apply to connections your app itself opens; inbound requests and the responses to them aren't affected.

Where it can connect

By default an app can reach:

  • The public internet over HTTPS and HTTP (ports 443 and 80) - third-party APIs, webhooks, OAuth providers, and the like.
  • Its own managed Postgres and Valkey bound in the same project, whether in-cluster or over their external endpoint.
  • DNS.

Everything else outbound is blocked: other ports on the public internet, UDP other than DNS, and cloud metadata endpoints. This is a security default. It means a compromised app can't be turned into an internet port-scanner, a UDP flood source, or a spam relay, and it can't read the cloud provider's metadata service.

If your app legitimately needs to reach an external service on another port - an external database on 5432, a managed Redis on 6379, an SMTP server, an SSH or Git host, a WebRTC/UDP endpoint - open a support ticket and we'll open outbound for your app or your whole team. We grant these on request; we just don't leave every port open for everyone by default.

How much it can send

Bandwidth is unmetered. There's no per-GB egress fee and no monthly data-transfer meter, only the soft fair-use guideline described in Billing. If you expect sustained heavy traffic, open a ticket and we'll make sure your app has room.

Outbound email (SMTP)

App pods can't open direct SMTP connections (ports 25, 465, 587, 2525), to prevent spam-relay abuse. Send mail through a transactional email API over HTTPS (Postmark, Resend, SendGrid, SES, and similar) - those run over 443 and are unaffected. If you have a genuine need for direct SMTP, open a support ticket.

Environment variables

  • Keys: up to 200 characters, matching ^[A-Za-z_][A-Za-z0-9_]*$.
  • Values: up to 4000 characters. Put larger blobs (certificates, big JSON) in object storage and store the URL. See Environment variables.

Requesting a change

For any limit above, open a support ticket from your dashboard with your app or team name and what you need. Egress opt-outs, bandwidth raises, direct-SMTP grants, and resource-limit increases are all granted per app or per team on request.