---
title: Limits
description: "Capability profile, concurrency, upload caps, request/response body sizes, and account quotas."
---

## Capability profile

`http-sync-v0`: one synchronous `fetch` handler, optional `scheduled` and `queue` handlers, `env.*` bindings, no streaming, no WebSockets. See [The handler](/concepts/handler) for the full compatibility table.

## Concurrency

One request executes at a time per process. Client concurrency past two or three in flight adds latency, not throughput — a deployed sprout is one process. Scale a [standalone binary](/get-started/standalone) with several copies behind `SO_REUSEPORT`.

## Size limits

| Limit | Value | Notes |
| --- | --- | --- |
| Sprout upload | 16 MiB | |
| Assets, total | 64 MiB | across up to 4096 files |
| Inbound request body | 1 MiB | `SB_REQUEST_BODY_MAX`; the runtime answers `413` before the handler runs, so a larger upload never reaches your code |
| Outbound `fetch()` response body | 32 MiB | `SB_FETCH_MAX_BYTES`; the remote host chooses the size and the body is held whole, so this is what stops one upstream exhausting a box |

:::warning
[R2](/bindings/r2) objects are held whole in memory — see the note there before storing anything large.
:::

## Account quotas

| Scope | Limit |
| --- | --- |
| Per account | 50 projects, 100 storage resources |
| Per project | 25 retained versions, 5 custom domains, 64 secrets |

Deploys are rate-limited per account and per IP.

:::note
Node compatibility is Porffor alpha. Test against your box before relying on anything exotic.
:::
