Limits and quotas
The numbers you need before you design a function, and the known gaps of the current platform.
1. A function
| Limit | Value | Where it comes from |
|---|---|---|
| Name | 1 to 64 characters among a-z, A-Z, 0-9, _, - | Enforced at deploy |
| Source size | 20 MB | Enforced at deploy |
| Runtimes | deno (TypeScript or JavaScript) and wasm | |
| Memory | 16 to 1024 MB, default 128 | permissions.memory_mb |
| Duration | 1 to 300 s, default 30 | permissions.timeout_secs |
| Outbound network | Open by default | permissions.allow_net: when not empty, only the listed hosts are reachable |
A value outside the bounds is refused with 400; it is never clamped silently. Real answer for timeout_secs: 0: permissions.timeout_secs doit être compris entre 1 et 300 secondes.
Change permissions without redeploying:
Only the fields you send change.
2. A call
| Limit | Value | Source |
|---|---|---|
| Request body | About 256 KiB | Measured: 260 KB passed, 300 KB failed with 503 |
| Response body | About 256 KiB | Measured: 250 KB passed; 300 KB returned nothing within 50 s |
| State between calls | None | Every call runs in a new isolated V8 worker |
| Regions | One | No region selection |
The message that crosses the platform is limited to 1 MiB and each byte of a request body counts four times, so a body above about 256 KiB is rejected with 503 SERVICE_UNAVAILABLE. The SDK reports it as a FunctionsRelayError, which is misleading: retrying cannot help. A response above the same size did not come back at all in our test. Keep requests and responses below 250 KB and send larger data through Storage.
3. Rate and plan quotas
Invocation rate, per client IP:
| Profile | Value |
|---|---|
| Burst | 15 calls |
| Sustained | 1 call per second |
In a real run of 30 quick calls, 15 returned 200 and 15 returned 429. A 429 carries x-ratelimit-* and retry-after headers, and the SDK exposes the delay as error.retryAfter.
Monthly quotas per plan, from the platform's plan table:
| Plan | Invocations | Total duration |
|---|---|---|
| Free | 100,000 | 6,000,000 ms (100 min) |
| Pro | 1,000,000 | 60,000,000 ms (1,000 min) |
| Team | 10,000,000 | 600,000,000 ms (10,000 min) |
| Enterprise | 100,000,000 | 6,000,000,000 ms (100,000 min) |
On the Free plan the limit is hard: a call beyond it is refused with 403 QUOTA_EXCEEDED. On paid plans the table is the monthly allowance, and what happens beyond it depends on your subscription's overage setting. A call is counted once your function has answered, whatever its status. A call that fails before the function answers is not counted. Jobs and cron firings count as invocations too.
4. Jobs, cron and alerts
| Limit | Value |
|---|---|
| Job attempts | 3 by default, set per job with maxAttempts |
| Delay between attempts | 5 s, fixed |
| Parallel jobs per service instance | 8 by default |
| Running lease | 450 s, then the job is reclaimed |
| Finished jobs kept | 14 days by default |
listJobs page | 1 to 500, default 50 |
| Cron schedule | 5 or 6 fields, UTC, no aliases |
| Alert check | Every 60 s |
These job values are service settings: JOB_MAX_RETRIES, JOB_RETRY_DELAY_SECS, WORKER_CONCURRENCY, JOB_RUNNING_LEASE_SECS and JOB_RETENTION_DAYS. Ask your platform operator for the values of a managed deployment.
5. Known gaps
- No access to a function's own logs. What a function writes with
console.logorconsole.errorstays in the runtime's logs, which only the platform operator can read.aura functions logsshows requests (method, path, status, duration, request id), not that output. Return the information you need in the response, or send it to your own logging service. - No request id inside the function. The identifier of a call is not forwarded to the function.
- No versions or rollback. Deploying replaces the code. Keep the previous version in your repository.
- No streaming. The whole response is buffered before it reaches the SDK.
- An empty
allow_netrestricts nothing. The network is open by default; list your hosts to restrict it. - Local emulation is partial.
aura functions serveruns your file with Deno but does not reproduce the platform route, headers or limits.