Limits and tiers
OpenVibe runs every project within limits it can keep paying for. Usage is metered per project and per environment, and each limit below is what the service that enforces it reports from its running configuration. Codes reads it every few minutes and never keeps its own copy.
How limits work
- Two environments. A project's
sandboxis for building and testing: smaller limits, shorter retention, kept apart from production data.productionis what people use. - Enforced at the capability. The service that owns a capability checks the token's grant and the project's limit in one place, before it does the work. Nothing else can grant more.
- Past a limit the answer is a problem (
application/problem+json) with a stable code:429for a rate or a count,413for a size. Rate limits say when to retry (Retry-Afterorretry_after). - Trust tiers (unreviewed, reviewed, first-party; ADR-013) change defaults and discovery, never the grant check. Every tier meets the same limits today.
- Raising a limit is a per-project override staff set at the owning service; the numbers here are the defaults every project starts with.
OpenVibe Host
From OpenVibe Host's /limits.json: per project and environment; projects per owner.
| Limit | Capability | Sandbox | Production | Past it |
|---|---|---|---|---|
| Projects one person owns | host.site.manage | 10 | 10 | 429 quota.projects |
| Sites | host.site.manage | 3 | 10 | 429 quota.sites |
| Custom domains | host.site.manage | none | 5 | 429 quota.custom_domains |
| Deploys in 24 hours | host.site.manage | 20 in 24 hours | 50 in 24 hours | 429 quota.deploys_per_day |
| Stored bytes (every deploy kept) | host.site.manage | 100 MB | 1 GB | 413 quota.storage |
| Files in one deploy | host.site.manage | 2,000 | 10,000 | 413 quota.max_files |
| Size of one file | host.site.manage | 10 MB | 25 MB | 413 quota.max_file_bytes |
OpenVibe Events
From events.openvibe.network/limits.json: per project and environment (ADR-014).
| Limit | Capability | Sandbox | Production | Past it |
|---|---|---|---|---|
| Events published per minute | events.app.publish | 30 a minute | 120 a minute | 429 events.quota_exceeded |
| Event bytes kept | events.app.publish | 5 MB | 50 MB | 429 events.quota_exceeded |
| Days an event is kept | events.app.read | 7 days | 30 days | pruned |
| Webhook subscriptions | events.app.subscribe | 5 | 20 | 429 events.quota_exceeded |
| Payload size of one event | events.app.publish | 64 KB | 64 KB | 413 events.payload_too_large |
| Events in one request | events.app.publish | 100 | 100 | 413 events.batch_too_large |
| Topics on one realtime connection | — | 20 | 20 | 400 realtime.too_many_topics |
OpenVibe Media
From openvibe.media/limits.json: per project tenant and environment; namespaces app.<project_id> and app.<project_id>.sandbox (WS-G task 2).
| Limit | Capability | Sandbox | Production | Past it |
|---|---|---|---|---|
| Stored bytes (every namespace of the tenant) | media.object.upload | 100 MB | 1 GB | 413 media.quota.exceeded |
| Namespaces below the root | media.object.upload | 100 | 100 | 413 media.quota.namespaces_exceeded |
| Size of a single-part upload | media.object.upload | 256 MB | 256 MB | 413 media.object.too_large |
| Size of a multipart upload | media.object.upload | 20 GB | 20 GB | 413 media.object.too_large |
| Size of one multipart part | media.object.upload | 256 MB | 256 MB | 413 media.object.too_large |
| Size of an object played publicly | media.object.upload | 500 MB | 500 MB | 422 media.invariant.public_object_too_large |
| Hours an unfinished upload holds its quota | media.object.upload | 72 hours | 72 hours | failed, bytes freed |
| Days a deleted object can be restored | media.object.delete | 30 days | 30 days | purged |
Other capabilities
These can be granted to apps, but their owners do not publish their limits yet. Each shows its quota class from openvibe-contracts v0.53.0.
| Owner | Capabilities (quota class) |
|---|---|
codes | codes.release.manage (codes-release-write), codes.release.read (codes-read) |
community | community.paste.create (community-write), community.post.create (community-write), community.pulse.read (community-read), community.space.read (community-read), community.thread.read (community-read) |
games | games.mod.read (games-read), games.prop.place (games-mod-runtime), games.world.announce (games-mod-runtime) |
live | live.channel.read (live-read), live.discovery.read (live-read), live.stream.read (live-read) |
search | search.query.run (search-query) |
tools | tools.job.cancel (tools-job), tools.job.create (tools-job), tools.job.read (tools-read), tools.net.probe (tools-probe), tools.tool.read (tools-read), tools.tool.run (tools-run) |
vip | vip.perk.list (vip-read), vip.plan.list (vip-read) |