# Limits & scaling

A plan is bought by one workspace, can cover several of its owner's workspaces (Pro 3, Team 10 and Scale 25), and limits how many things you create and the monthly allowances. Free limits are per person, across all your free workspaces. A paid plan's limits are shared across the workspaces it covers. A Pro subscription from before these plans keeps what Pro included then (100 GB of files, 10 GB of database storage, 5,000 emails a month, $10 of AI usage a month included and server apps with no hourly charge), shared across the workspaces it covers, until we move it to Pro as listed here; we email the owner first. The technical limits below apply on every plan. File storage, database storage and build minutes have an amount included per plan; bandwidth and function traffic have no plan quota yet — they are listed as not metered.

## Plans

|  | Hobby | Pro | Team | Scale |
| --- | --- | --- | --- | --- |
| Price (per subscription) | Free | $20 a month | $100 a month | $500 a month |
| Workspaces covered (limits shared) | Per person | Up to 3 | Up to 10 | Up to 25 |
| Usage credit | None | None | $20 a month | None |
| AI usage | Pay as you go from your balance | Pay as you go from your balance | Pay as you go from your balance | Pay as you go from your balance |
| Emails (rolling 30 days) | 100 | 2,000 | 10,000 | 100,000 |
| Custom sending domains | 1 | 10 | 25 | 50 |
| Apps and sites (projects) | 3 | 20 | 100 | 500 |
| Server apps | Pro and up | Included | Included | Included |
| Functions | 5 | 50 | 100 | 100 |
| Databases (10 GB each) | 1 | 10 | 50 | 100 |
| Storage buckets | 2 | 20 | 100 | 500 |
| Vector collections | 1 | 10 | 25 | 100 |
| Memory stores | 2 | 20 | 100 | 500 |
| Agents | 2 | 20 | 100 | 500 |
| Auth pools | 1 | 10 | 50 | 100 |
| Payment accounts | 1 | 10 | 50 | 100 |
| Media assets (videos and live channels) | Pro and up | 100 | 500 | 1,000 |
| Repos | 5 | 50 | 200 | 500 |
| Your own domains connected | 2 | 20 | 100 | 500 |
| Team members | 3 | 10 | 25 | 100 |
| Workspaces you can own | 2 | 10 | 20 | 50 |
| AI requests a minute | 60 | 600 | 2,000 | 6,000 |
| Agent runs at once | 1 | 5 | 10 | 20 |

> Past a count the create call answers 402 with code plan_limit, the limit and the current count. On Hobby the count is the total across every free workspace the owner owns (the answer carries shared_workspaces); on a paid plan it is the total across the workspaces its subscription covers (the answer says how many share it), except team members, which are counted per workspace. Upgrading a free workspace, or covering it with a plan you pay for, moves it to that plan's limits. Server apps are on Pro and up, and videos and live channels on Pro and up: on a plan without them the deploy or create answers 402 plan_limit with required_plan, before anything is built or created. Server apps that were already live on a free workspace when server apps moved to Pro keep running and can be redeployed. Nothing existing is deleted when a plan changes; only new creates are refused. Enterprise is arranged with us, from $2,000 a month, and is not bought online (`POST /api/billing` and checkout answer 409 `contact_sales` with `contact_url`); workspaces already on Enterprise keep it, at the price they pay.

## Usage included per plan

Measured daily (sizes, and server-app awake time as the runner counts it) and per deploy (build minutes), and shown on Billing → Usage, workspace by workspace on Billing → Workspaces. On a plan that covers several workspaces their use adds up against one amount, and the paying workspace's owner is emailed at 80% and at 100%.

| Usage | Hobby | Pro | Team | Scale | Past it |
| --- | --- | --- | --- | --- | --- |
| File storage | 1 GB | 50 GB | 250 GB | 1,000 GB | Hobby: new uploads are refused (402 usage_limit). Pro, Team and Scale: $0.05 per GB a month, charged daily from the paying workspace's Balance (Team's $20 monthly usage credit pays first); new uploads paused (402 usage_paused) only while a charge cannot be paid: the Balance is empty or smaller than the charge, or the spending limit is reached. |
| Database storage | 0.5 GB | 5 GB | 25 GB | 100 GB | Hobby: database writes that add data (reads and deletes still work) are refused (402 usage_limit). Pro, Team and Scale: $1.00 per GB a month, charged daily from the paying workspace's Balance (Team's $20 monthly usage credit pays first); database writes that add data (reads and deletes still work) paused (402 usage_paused) only while a charge cannot be paid: the Balance is empty or smaller than the charge, or the spending limit is reached. |
| Build minutes (per calendar month, UTC) | 100 minutes | 1,000 minutes | 5,000 minutes | 10,000 minutes | Hobby: new deploys are refused (402 usage_limit). Pro, Team and Scale: $0.01 per minute, charged daily from the paying workspace's Balance (Team's $20 monthly usage credit pays first); new deploys paused (402 usage_paused) only while a charge cannot be paid: the Balance is empty or smaller than the charge, or the spending limit is reached. |
| Server-app awake time (per calendar month, UTC) | not charged | none included | none included | none included | Hobby: not charged. Pro, Team and Scale: $0.05 per awake hour, charged daily from the paying workspace's Balance (Team's $20 monthly usage credit pays first); new deploys paused (402 usage_paused) only while a charge cannot be paid: the Balance is empty or smaller than the charge, or the spending limit is reached. |

> Database storage past the limit holds only statements that add data (INSERT, UPDATE, REPLACE, UPSERT, CREATE, ALTER), and a batch that contains one is held whole: reads and DROP sent on their own always run, and so does DELETE unless the database has triggers (a trigger can add data when rows are deleted: drop it first), so you can clean up. Database sizes are measured again daily, so room you free counts from the next measurement. Each single database still stops at the engine's 10 GB.

## Not metered or capped yet

- Requests and bandwidth to sites and server apps, and traffic to function URLs.
- Errors and latency are not measured.

## Databases

| Limit | Value |
| --- | --- |
| Size of one database | 10 GB |
| One row or value | 2 MB |
| One SQL statement | 100 KB |
| Bound parameters per statement | 100 |
| Time per query | 30 seconds |
| Columns per table | 100 |
| Statements in one batch | 100 |
| Query requests per workspace | 600 per 5 minutes (a batch counts once) |

## Deploys and server apps

| Limit | Value |
| --- | --- |
| One upload (folder, tar.gz or JSON files) | 25 MB compressed, 40 MB unpacked |
| One file | 10 MB |
| Files in one upload | 5,000 |
| Files a static site serves | 500 |
| Git repository download | 20 MB compressed, no file-count cap |
| Build time | about 13 minutes |
| Server app | one container per app (about a quarter of a CPU and 1 GB of memory), no extra copies |
| Server app sleep | after 15 idle minutes; disk wiped on sleep and on every deploy |
| Awake server apps | 40 across the whole platform today; sleeping apps do not count |

## Functions, storage and repos

| Limit | Value |
| --- | --- |
| Function code | one ES module, at most 200 KB, no npm install |
| CPU time per request (functions and worker.js programs) | 50 ms on Hobby, 1 second on Pro, 2 seconds on Team and 10 seconds on Scale; waiting on the network or a database does not count. A plan change applies on the next deploy |
| Function deploys | one deploy, rollback or delete of a function at a time: another sent meanwhile answers 409 `deploy_in_progress` |
| Test invoke | first 16 KB of the response, 10-second timeout |
| One storage upload | 5 GB (one signed PUT); a link with `size` is at most 1 GB on Hobby, all the file storage it includes |
| Object key | 1,024 characters |
| Download link lifetime | 60 seconds to 7 days (default 15 minutes); viewers and read-only keys at most 15 minutes |
| Upload link lifetime | at most 15 minutes (a longer `expiresIn` is shortened); `size`, optional on every plan, locks the link to the file's exact length |
| Objects per listing page | 1,000 (default 100), with a cursor for the next page |
| Repo push over REST | 500 files, 10 MB per file, 25 MB per push |

## AI, vectors, memory and agents

| Limit | Value |
| --- | --- |
| Gateway input | 200,000 characters (system prompt plus messages), up to 500 messages |
| Gateway output | max_tokens up to 8,192 (2,048 on the Llama edge models); default 1,024 |
| AI requests a minute | 60 hobby, 600 pro, 2,000 team, 6,000 scale — chat and embeddings counted separately |
| What one AI request may reserve | $2 hobby, $10 pro, $10 team, $10 scale (402 `ai_request_too_large`) |
| Embeddings per call | 100 inputs |
| Vector dimensions | 384, 768 (default), 1,024 or 1,536 |
| Vectors per upsert | 1,000 (100 when sending text to embed) |
| Vector query topK | 100, or 50 with full metadata or values |
| Memory value / key | 1 MB / 512 characters |
| Conversation window | 1,000 most recent messages per scope |
| Memory quotas | hobby: 10,000 items per store, 25 MB in all per workspace; pro: 100,000 items per store, 250 MB in all shared by the workspaces it covers; team: 250,000 items per store, 500 MB in all shared by the workspaces it covers; scale: 1,000,000 items per store, 1 GB in all shared by the workspaces it covers; every kind of store counts, and a write past them gets 402 `plan_limit` |
| Agent steps | 1–24 per run (default 8) |
| Agent runs | 6 a minute per workspace; input up to 32,000 characters |
| Agent schedules and events | a schedule runs at most every 10 minutes; a scheduled, event or background run starts within about 10 minutes and has 5 minutes to finish; a visitor's chat message has 60 seconds |
| Media upload | video only, up to 1 hour |

## Mail, payments and auth pools

| Limit | Value |
| --- | --- |
| Email per call | one recipient; text and/or HTML |
| Email quota | 100 hobby, 2,000 pro, 10,000 team, 100,000 scale per rolling 30 days; a Pro subscription from before these plans keeps 5,000; optional daily cap of your own |
| Custom sending domains | 1 hobby, 10 pro, 25 team, 50 scale (pending and failed domains count until removed) |
| Checkout amount | $0.50 to $1,000,000, USD, one-time |
| Checkout link | single use, expires after 24 hours |
| Earnings hold | 7 days per payment before it can be withdrawn |
| End-user password | 8–256 characters; 10 wrong tries lock the account for 15 minutes |
| End-user token | HS256 JWT, valid 7 days unless the pool sets a shorter `tokenTtl` (5 minutes to 7 days) |
| End-user refresh token | ends after 60 days without a refresh, and a year after sign-in; 20 signed-in devices per user |
| Browser sign-up | 10 per IP an hour (an IPv6 address counts by its /64), 600 per pool an hour |
| Sign-up from your server | 600 per pool an hour, counted apart from the browser's; with `ip`, that address is also held to the browser's 10 an hour |
| Push notifications | 100 users and 500 devices per send, 600 sends an hour per pool; 20 devices per user |
| Codes asked for from the browser | 50 an hour and 300 a day per pool; at most 20% of the email quota per workspace (20 / 400 / 2,000 / 20,000 per 30 days) |

## Rate limits

Every 429 carries `code`, a Retry-After header and `retry_after` seconds in the body. API quotas also send X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Back off for Retry-After seconds and try again.

| What | Limit | Code |
| --- | --- | --- |
| AI chat | 60 / 600 / 2,000 / 6,000 a minute (hobby / pro / team / scale) | ai_rate_limited |
| Embeddings, memory search, text sent to vectors | a separate bucket of the same size | ai_rate_limited |
| Database queries, vector calls, memory calls, video status checks | 600 calls per 5 minutes per workspace, shared (a batch of statements is one call, and every memory call counts, key-value and conversation ones included). All workspaces together also share a platform ceiling lower than that on the calls that reach the edge, which can refuse calls first | rate_limited |
| Agent runs | 6 a minute per workspace | rate_limited |
| Push sends | 600 an hour per sign-in pool | rate_limited |
| Balance top-ups | 10 an hour | rate_limited |
| New workspaces | 5 a day per person | rate_limited |
| Email | your optional daily cap | daily_cap |
| Auth-pool codes asked for from the browser | 50 an hour and 300 a day per pool, and 20% of the email quota per workspace | code_limit |

## How it scales

| Service | At millions of users today |
| --- | --- |
| Static sites | Scale: served from the edge cache close to each visitor, the rest from object storage. |
| Functions | Scale: each request runs at the edge location nearest the caller, with no servers to size. |
| Storage | Scale: uploads and downloads go straight to object storage, never through Harakumo. Stored bytes count toward the plan's file storage (1 GB hobby, 50 GB pro, 250 GB team, 1,000 GB scale); past it Hobby stops and Pro, Team and Scale pay $0.05 per GB a month. Each signed link is one API call to Harakumo, so sign download links with a longer expiresIn and reuse them rather than signing one per page view. |
| Auth pools | Verify tokens in your app with the JWT secret (no call per request). Sign-ups and logins run on the shared platform and suit apps with thousands of active users. |
| Databases | Each database has one writer and stops at 10 GB, and each query is an HTTPS call through Harakumo capped at 600 requests per 5 minutes per workspace. Good for development, internal tools and low-traffic apps; not yet for a high-traffic public app. Batch statements, cache reads and split data across databases. |
| Server apps | One small container per app with no extra copies, a cold start after it sleeps, and a platform-wide cap on awake apps. For large traffic, put the front end on a static site and the server logic in functions. |
| AI | Model capacity scales with the vendors; your workspace is capped by the per-minute limits above. |
| Mail | Up to the plan's 30-day quota, one recipient per call. |

> Coming: databases reached directly from your functions and apps (no HTTPS hop, no shared limit), read replicas, a Postgres engine for datasets over 10 GB, extra copies and larger sizes for server apps, and metered traffic.
