Skip to main content

Limits

Beta

This feature is in beta. Core behavior is stable, but some APIs or configuration may change before general availability.

Technical limits for EdgeBase App Functions.

Execution

LimitDefaultConfigurableNotes
Max call depth5NoPrevents circular context.admin.functions.call() chains
Blocking hook timeout5 secondsNoFixed — beforeSignUp, beforeSignIn, onTokenRefresh, beforePasswordReset, beforeSignOut. On timeout the operation is rejected with 403 hook-rejected.
Non-blocking hookNo timeoutafterSignUp, afterSignIn, afterPasswordReset, afterSignOut, onDeleteAccount, onEmailVerified run via ctx.waitUntil()
Action handler timeout (Room)5 secondsNoPer onAction execution
Schedule function timeout10 secondsYesDefaults to 10s. Override with functions.scheduleFunctionTimeout. Applied by both Worker cron dispatch and DB-triggered schedule execution.
Alarm wall-clock budget30 secondsNoCloudflare DO Alarm limit; functions split if exceeded

HTTP Triggers

FeatureDetails
RoutingFilesystem-based (SvelteKit style)
Dynamic params[param].tscontext.params.param
Catch-all[...slug].tscontext.params.slug
Route groups(group)/file.ts → parentheses removed from URL
MethodsGET, POST, PUT, PATCH, DELETE (named exports)
Middleware_middleware.ts applies to directory and subdirectories
Ignored files_helper.ts (underscore prefix, not middleware)

Database Triggers

Trigger EventExecutionNotes
insertAsync (ctx.waitUntil())Never blocks API response
updateAsync (ctx.waitUntil())
deleteAsync (ctx.waitUntil())
Trigger errorLogged onlyBest-effort; does not roll back the CUD operation

Authentication Triggers

Trigger EventTypeTimeoutNotes
beforeSignUpBlocking5s (hardcoded)Can reject signup; rejected with 403 hook-rejected on timeout
beforeSignInBlocking5s (hardcoded)Can reject signin; rejected with 403 hook-rejected on timeout
onTokenRefreshBlocking5s (hardcoded)Can inject custom claims; on timeout the hook is skipped and the token is issued without hook claims (error is swallowed)
afterSignUpNon-blockingNonectx.waitUntil()
afterSignInNon-blockingNonectx.waitUntil()
beforePasswordResetBlocking5sCalled on both reset-password and change-password
afterPasswordResetNon-blockingNonectx.waitUntil()
beforeSignOutBlocking5sCan reject sign-out; rejected with 403 hook-rejected on timeout
afterSignOutNon-blockingNonectx.waitUntil()
onDeleteAccountNon-blockingNonectx.waitUntil()
onEmailVerifiedNon-blockingNonectx.waitUntil()

Schedule Triggers

LimitValueNotes
Cron syntaxStandard 5-fieldDefined in edgebase.config.ts, deployed as Cloudflare Cron Triggers
ExecutionWorker scheduled() handlerEach schedule function runs via ctx.waitUntil()
Concurrent executionParallelEach schedule trigger runs independently in the Worker

Rate Limiting

GroupDefaultKeyConfigurable
functions50 req / 60sIPYes
global10,000,000 req / 60sIPYes

Service Key requests bypass the functions group limit.

The same bypass semantics apply to all Admin SDKs.

FunctionError Codes

CodeHTTP Status
not-found404
permission-denied403
unauthenticated401
invalid-argument400
already-exists409
internal500
unavailable503
failed-precondition412
resource-exhausted429