Offline and delivery reliability
How each Gamebeast SDK delivers markers when the network drops, the app closes, or the backend is unreachable, and how configurations behave offline.
Every Gamebeast SDK batches markers, retries failed sends with backoff, and keeps configurations cached on the device, so a dropped connection doesn't lose data or change what players see. The client SDKs (Unity, Unreal, Godot, JavaScript) also save unsent markers on the device and send them later. This page sets out exactly what each SDK does, so you can check it against your requirements before you ship.
Markers
Each marker carries the time it happened on the device. A marker that arrives late, after the app was offline or closed, is recorded at the time it happened, not the time it arrived.
| SDK | Batching | When a send fails | Offline, backgrounded or closed |
|---|---|---|---|
| Unity | When full, every few seconds, and on quit | Retried | Flushed when the app is backgrounded or quits. Anything unsent is saved on the device and sent on the next launch. |
| Unreal | 10 markers, or every 30 seconds | Retried with backoff | Waiting markers are saved on the device when the game goes to the background or shuts down, and sent on the next launch. |
| Godot | 100 markers, or every 10 seconds | Retried with backoff | Saved on the device when the game quits or goes to the background, and sent when it returns or on the next launch. In web exports, markers saved while the browser is offline are sent once it's back online. |
| JavaScript | 10 markers, or every 10 seconds | Retried with exponential backoff | When the page is hidden or closed, markers go out with fetch keepalive, so they survive the page unloading. If the browser is offline, they're saved to localStorage and sent when the connection returns or on the next visit. |
| Node.js | 100 markers, or every 5 seconds | Retried with exponential backoff | During an outage the buffer holds up to 10,000 markers (maxBufferedMarkers), then drops the oldest first. Call flush() or shutdown() before the process exits. |
| Roblox | Every 10 seconds (markerFlushRate), or when the queue is full | Reported to OnMarkersFailed | Runs on the game server. Save failed markers (for example to a DataStore) from OnMarkersFailed and resend them with RetryFailedMarkersAsync. |
Batch sizes and intervals are the release defaults; each SDK's page lists the settings that change them.
What is dropped
Markers are dropped only when they can never be accepted:
- An invalid marker, such as properties that aren't a plain JSON object, is dropped with an error in the log. It never fails the rest of its batch.
- A rejection the backend won't accept on retry, such as a bad key or a project over its plan limit, is logged and dropped rather than retried forever.
- The Node.js buffer drops its oldest markers once it holds 10,000 during an outage.
A marker that was already on its way when the game was killed isn't resent, since it may have arrived. That prevents double counting at the cost of, rarely, losing that one batch.
Configurations
Configurations are cached on the device in Unity, Unreal and Godot, and in localStorage in the JavaScript SDK. On the next launch values are there immediately, offline included, and refresh in the background. Every read takes a default value, which the SDK returns until the configuration first loads. Pass the value your game ships with today as the default, so a player who has never been online gets the same experience.
A cache written by a different build, or for a different player, is discarded rather than applied.
Experiments
A player's experiment group arrives with their configurations, so it's cached the same way: an assigned player keeps seeing their group while offline. Only markers sent after a player was assigned count toward their group, and they count at the time they happened, so offline play lands in the right group and the right day.
See also
- Experiment statistics: how results are calculated.
- Data retention and export: how long Gamebeast keeps your data and how to get it out.
Data retention and export
How long Gamebeast keeps your analytics data on each plan (6 months Free, 1 year Beast, 2+ years Enterprise), how to export raw data over the API, MCP, or CSV, and how deletion works.
Experiment statistics
How Gamebeast calculates experiment results: per-unit metrics, the z-test and Welch t-test, 95% confidence intervals, significance, minimum sample sizes, and the sample ratio mismatch check.