Appearance
Manifest and bundles
Manifest
A small JSON document listing, per locale:
- Bundle version (integer)
- URL to fetch the bundle
The SDK polls the manifest on init and when realtime signals a newer publish.
Bundles
Each bundle is an immutable JSON file: flat key → string for one locale and environment.
Example:
json
{
"common.greeting": "Hello",
"common.welcome": "Hello, {name}!",
"items.count": "{count, plural, one {# item} other {# items}}"
}Bundles are served from the CDN with long cache headers. Publishing creates a new version — clients pick it up via manifest refresh.
Manifest request limits (Hosted)
On the Hosted delivery path, each application has a per-minute cap on authenticated manifest GET requests (RPM = requests per minute, not per second). Limits protect shared infrastructure; normal SDK usage stays well below them.
| Plan (typical) | Manifest GETs / minute / app |
|---|---|
| Free / Pilot | 60–120 |
| Starter | 100 |
| Growth | 600 |
| Business | 3,000 |
| Enterprise | 10,000 (or custom) |
When exceeded, the API returns 429 with Retry-After. The SDK should backoff and retry — do not poll the manifest in a tight loop.
MAU metering: Hosted plans also meter unique visitors per month (SDK usage beacon + manifest fallback). At 100% of plan MAU after grace, manifest may return 402 PLAN_LIMIT until you upgrade or the next UTC month.
Edge / Studio: Edge (BYO CDN) and Studio (export-only) use different billing meters — see pricing or your sales contact. This page applies to the default hosted manifest URL.
TIP
Enable reportUsage: true in init() so MAU counts dedupe correctly. See the SDK README for defaults.
Why this model
- Scale — no database read per page view
- Cache-friendly — edge caches bundle bytes
- Safe rollback — previous bundle versions remain addressable by version number
Your API key never ships to the CDN origin for cross-origin bundle fetches; the manifest request is authenticated against allowed domains.