Skip to content
GigadriveDocs

Function limits

The platform ceilings that apply to every Function, and the status code behind each rejected request.

These are platform ceilings: they apply to every Function on every plan and cannot be raised in configuration. Quotas that do change with your plan, including per-Function memory and Concurrency, live in Limits and billing.

Ceilings

LimitValue
Request headers64 KiB total
Request body6 MiB
Response body per invocation32 MiB
Invocation duration1 second to 28800 seconds (8 hours), default 30 seconds
Memory per Function128 MB to 3009 MB declared, raised to 256 MB minimum
vCPU per Function1, not configurable
Requests per copy of a Function32
WebSocket connections per copy250 per 256 MB of memory
WebSocket connection lifetimemax_duration, capped at 4 hours
WebSocket idle close15 minutes with no bytes in either direction

A request whose headers exceed 64 KiB is answered with 431 before your code runs. A body above 6 MiB never reaches your code either; a handler-style Function answers it with 413. The response ceiling is set higher than the request ceiling on purpose, so that server-rendered pages and large JSON responses are not cut off. Response bytes are forwarded as they are produced, which makes 32 MiB a bound on one invocation rather than on a buffer.

WebSocket traffic does not pass through the request-body path, so the 6 MiB figure does not apply to frames on an open connection.

What a rejected request looks like

Every rejection in the following table renders a branded error page that prints its errorCode next to the request ID, so a screenshot from a visitor is enough to identify which condition fired. Pair it with request logs to find the invocation.

StatuserrorCodeCondition
429EDGE_FUNCTION_CONCURRENCY_LIMITThe plan's Concurrency for this Function is fully in use
503EDGE_FUNCTION_AT_CAPACITYEvery copy is busy and new capacity did not arrive in time
503EDGE_FUNCTION_RESUMINGThe Function is finishing an idle transition
503EDGE_FUNCTION_STARTINGThe copy a sticky URL points at is still starting
503EDGE_FUNCTION_UNAVAILABLETemporarily unavailable for another reason
503EDGE_ORGANIZATION_COMPUTE_LIMITThe organization is at its compute limit or its billing cap
503EDGE_FUNCTION_START_FAILEDThe Function could not be started
503EDGE_FUNCTION_NOT_READYThe Function could not be prepared to run
502EDGE_FUNCTION_UNREACHABLEThe Function could not be reached
504EDGE_FUNCTION_TIMEOUTThe invocation exceeded max_duration before sending headers
501EDGE_HANDLER_UNSUPPORTEDThe matched route points at a handler this deployment cannot serve
500EDGE_ROUTE_MISCONFIGUREDThe matched route is incomplete
403EDGE_STICKY_SESSION_REJECTEDThe sticky URL is invalid, expired, or bound to another route

EDGE_FUNCTION_CONCURRENCY_LIMIT, EDGE_FUNCTION_AT_CAPACITY, EDGE_FUNCTION_RESUMING and EDGE_FUNCTION_STARTING carry Retry-After: 2, because each of them clears on its own within seconds. The rest need a change from you: a code fix, a config fix, or a plan change.

A 429 is the one to watch for in production, since it means real traffic is being turned away rather than queued. Concurrency covers how the limit is counted and what raises it.