diff --git a/apps/docs/content/docs/platform/self-hosting/environment-variables.mdx b/apps/docs/content/docs/platform/self-hosting/environment-variables.mdx index 67ffc91f6da..fd8da18f57d 100644 --- a/apps/docs/content/docs/platform/self-hosting/environment-variables.mdx +++ b/apps/docs/content/docs/platform/self-hosting/environment-variables.mdx @@ -278,7 +278,7 @@ Configure at least one. Every configured provider stays active and is tried in o ## Limits -Self-hosted deployments (billing disabled) run without plan limits: no rate limits, no execution timeouts, no table or storage caps, and no retention-based data deletion. Each limit can be opted back in individually by explicitly setting its variable. +Self-hosted deployments (billing disabled) run without plan limits: no plan rate limits, no execution timeouts, no table or storage caps, and no retention-based data deletion. Each limit can be opted back in individually by explicitly setting its variable. | Variable | Opts in | Suggested value | |----------|---------|-----------------| @@ -299,6 +299,10 @@ Self-hosted deployments (billing disabled) run without plan limits: no rate limi Neither deployment presets these. The Helm chart previously did, which enforced hosted-plan caps on self-hosted installs; chart 1.5.0 removed the presets so Compose and Kubernetes behave identically. + + One limit applies regardless of billing: the v2 API (`/api/v2/...`) allows each client IP a burst of 600 requests, then 300 per minute, checked before authentication. `BILLING_ENABLED` and the variables above don't change it. With Docker Compose, requests from the host machine all arrive from the bridge gateway address and share one budget. Behind a reverse proxy, set `AUTH_TRUSTED_PROXIES` so each client is counted by its own address. + + ### Removing a limit you already inherited If a limit is still enforced after upgrading — most often a `FREE_TABLES_LIMIT` or `FREE_TABLE_ROWS_LIMIT` carried forward from a chart older than 1.5.0, or copied into your own values file — the variable is still reaching the pod. On Helm, remove it by overriding it with `null`: