Quotas and limits
Use these limits when configuring an App Service Builder app.
The tables cover configuration limits and app and subscription quotas. Your subscription's assigned policy can impose lower limits; ask your preview contact which allowances apply. An allowance does not reserve regional capacity or guarantee that a deployment can start. When a request exceeds a limit, the error explains the limit and what to do next.
Contract limits
| Area | Limit |
|---|---|
| Manifest | At least one component; unique case-sensitive names and public paths |
| Deployed outputs | At most one static output and one public compute output, including inferred framework outputs |
| Public catch-all | At most one / component mount |
| Compute listening port | 1–65535; default 8080 |
| Explicit health status list | Nonempty, unique HTTP codes in 100–599; requires explicit health path |
| Variables | At most 100 |
| Variable name | At most 256 characters; identifier syntax; case-insensitive uniqueness |
| Variable value | At most 32,768 UTF-8 bytes |
| Aggregate variable names and values | At most 65,536 UTF-8 bytes |
| Authentication entries | At most 100 combined per provider; customer Entra API audiences included |
| Autoscale minimum | Integer at least 0; 0 opts into scale-to-zero |
| Autoscale maximum | Greater than minimum, at most 20 |
| CPU/memory target | Whole percentage 1–100; with a positive minimum, select at least one target or enable HTTP scaling |
| HTTP scaling | Optional with a positive minimum; always enabled by minimum 0 |
| App count | Effective-policy maximum per Azure subscription |
| Compute size | Every compute component must use a size allowed by the effective policy |
| Replicas per app | Sum of configured maximum replicas across all compute components |
| Replicas per subscription | Total allocated maximum replicas, including increases requested by operations still in progress |
| Concurrent builds per app | One active AppVersion build |
| Concurrent builds per subscription | Effective-policy maximum across apps |
| Build starts per app | Rolling token allowance; replay of the same request does not consume another token |
| Build starts per subscription | Rolling token allowance shared by all apps |
| Build duration | Total time allowed for an accepted build to finish |
| Scale increases per app | Rolling allowance for a request that raises minReplicas, maxReplicas, or both |
| Scale increases per subscription | Rolling allowance shared by all apps; scale-down does not consume allowance |
| Non-build activations per app | Rolling allowance for retained-version activation or redeploy without a new build |
| Non-build activations per subscription | Rolling allowance shared by all apps |
During the no-charge preview, the default preview-standard policy is intentionally permissive:
300 apps, every published compute size, 20 replicas per app, 6,000 replicas per subscription,
300 concurrent builds, 1,000 app build starts/hour, 300,000 subscription build starts/hour,
1,000 app operations/hour and 300,000 subscription operations/hour for each initial operation
category, and a 60-minute build deadline. The available preview-free policy is 5 apps, small compute only,
2 replicas per app, 10 replicas per subscription, 2 concurrent builds, 10 app build starts/hour,
30 subscription build starts/hour, 10 app operations/hour and 30 subscription operations/hour for
each initial operation category, and a 10-minute build deadline. Both policies retain the
one-active-build-per-app invariant. preview-free is not selected by default.
When a limit is reached
Configuration or replica limits return HTTP 409.
Build and operation rate or concurrency limits return HTTP 429, build timeouts return HTTP 408, and a temporarily unavailable limit check returns HTTP 503.
A deployment can be accepted before its build is checked.
If that check fails, read the limit error in the completed operation rather than expecting another HTTP response from the original request.
Builder CLI prints the error and recovery action; --json includes details under error.serviceLimit.
| Code | Meaning | Remediation |
|---|---|---|
BuilderAppComputeSizeLimitExceeded (ComputeSizeLimitExceeded through ARM) | A component requested a compute size outside the effective policy | Choose one of allowedSizes or obtain a different policy |
BuilderAppReplicaLimitExceeded (AppReplicaLimitExceeded through ARM) | The app's summed component maxima exceed the per-app policy | Reduce configured maximum replicas or obtain a different policy |
SubscriptionReplicaLimitExceeded | Committed maxima plus in-flight positive deltas exceed the subscription policy | Scale down another app, wait for cleanup/release, or obtain a different policy |
AppBuildAllowanceExceeded | The app exhausted its rolling build-start allowance | Wait until retryAt, then retry the same intent with a new request ID |
SubscriptionBuildAllowanceExceeded | The subscription exhausted its rolling build-start allowance | Wait until retryAt, reduce build frequency, or obtain a different policy |
SubscriptionBuildConcurrencyLimitExceeded | All subscription build slots are occupied | Wait for an active build to finish, then retry |
AppBuildTimeoutExceeded | The build exceeded its time limit | Inspect build logs, reduce build duration, and start a new build |
BuildLimitCheckUnavailable | The service could not check the build allowance | Wait for the supplied retry time and check operation status before retrying |
AppOperationAllowanceExceeded | The app exhausted the rolling allowance for the reported operationKind | Wait until retryAt, then retry the same intent with a new request ID |
SubscriptionOperationAllowanceExceeded | The subscription exhausted the rolling allowance for the reported operationKind | Wait until retryAt, reduce operation frequency, or obtain a different policy |
OperationLimitCheckUnavailable | The service could not check the operation allowance | Wait for the supplied retry time and check operation status before retrying |
The error details identify the limit, its app or subscription scope, and the recovery action.
Numeric limits include current, requested, and maximum values; compute-size errors include the requested and allowed sizes.
For HTTP 503 responses, wait for the period specified by Retry-After before retrying.
Build and operation allowance details can also include remaining, capacity, refillPerHour, and retryAt.
Failed and timed-out accepted builds still count toward the build-start allowance.
Retrying the same accepted request with its original request ID does not consume another build start.
A component can emit more than one output. For example, hybrid framework output can use the whole static-plus-compute allowance. Counting only manifest entries is insufficient.
Availability boundaries
| Capability | Boundary |
|---|---|
| Push deployment | Not ready for use in this Private Preview; keep automatic deployments off and deploy explicitly |
| Runtime versions | Confirm the language, version, and framework with your preview contact |
| Retained-version activation | Requires ready, retained artifacts; no unlimited retention promise |
| Custom domains | Not supported in this Private Preview |
| Scale policy | Saved desired policy subject to app and subscription admission; not guaranteed regional capacity or live replica telemetry |
| Scale to zero | Requires an image-backed version; requests can be interrupted when the app sleeps. See scaling |
VNet integration, managed database/cache provisioning, and shell access are not supported in this Private Preview. The Portal does not provide live runtime-log streaming or customer request-log browsing. Configurable runtime log export to Log Analytics is separate and requires an enabled preview environment and an app managed identity with ingestion permission. See feature status for current availability.
Use troubleshooting for evidenced failures and deployments for artifact and completion semantics.