Performance
The platform measures engagement, not speed. There is no frame rate, no load time and no crash metric anywhere in Studio; the closest thing is play-session seconds reported by your own code.
Open Appsinity StudioWhat is actually measured
| Signal | Source | Where you see it |
|---|---|---|
| Listing visits | A visit event per page view | Analytics totals and country rows |
| Downloads | A download event per download action | Analytics totals, listing counter |
| Play sessions | POST /api/listing-play with playSeconds | Session count and averages |
| Average play length | Aggregated from session rows | Play stats read |
| Total play time | Sum of reported seconds | Play stats read |
| Ad events | Impression, click, completed, skipped | Ads stats |
| Rating average | Arithmetic mean of review rows | Listing header, analytics |
Reporting play time honestly
- Report at session end or on a timer, not every second; each report is a row.
- Report wall-clock play, not a guess, because the average is what your listing's engagement figure becomes.
- Do not report for a tab you cannot see; a hidden page inflates the number and means nothing.
- Accept that a player can post the same call themselves; the metric is not tamper-proof.
POST /api/listing-play
{ "collection": "games", "listingId": "my-game", "playSeconds": 340 }
// playSeconds is rounded and clamped at 0
// a value of 0 writes nothing but still answers 200 { ok: true }A fast web build
- Ship the fewest bytes that run. The whole tree sits behind one URL with no bundler between you and the player.
- Compress large payloads. The presign accepts a
contentEncodingso a .data or .wasm blob can be served marked as encoded. - Get content types right.
.wasmmust beapplication/wasmor streaming compilation fails; that is inferred from the extension for you. - Split assets from code. A 300 MB initial download is a review, whatever the game is worth.
- Keep one file under 5 GiB. The per-object ceiling, enforced twice, see Upload limits and file types.
- Version the folder, not the file names. A version segment gives you a clean rollback target.
Downloads and caching
| Thing | Behaviour | Consequence |
|---|---|---|
| Release files | Served from object storage over HTTPS | A large file is one PUT and one GET |
| Store HTML | Cached at the edge for about a day | A corrected listing can look stale for hours |
/assets sheets | Cached for four hours | Bump the ?v= query when you change one |
| Presigned PUT window | 10,800 seconds | A slow upload must finish inside three hours |
| Object visibility | Immediate once the PUT completes | No approval step delays the URL |
The desktop client
The Windows client is a browsing shell around the store with a local library, so its performance characteristics are mostly disk and process management rather than rendering.
- Games install under
%LOCALAPPDATA%\Appsinity\library\<slug>, one directory per title; a large install is disk, not memory. - The library manifest and play log are bounded lists, so the client does not grow without limit as you install.
- The performance overlay (CPU, GPU, memory) is a local HUD, laid out from the store's In-game overlay row and toggled with
Ctrl+Shift+F12; it reports nothing to Appsinity. - Close sends the client to the tray rather than quitting, so a background instance holds memory until you quit from the tray.
- GPU utilisation comes from one shared Windows performance stream, which is why the HUD updates together rather than per metric.
Frequently asked questions
Do you show me crash reports?
No. There is no crash pipeline on the platform; you need your own SDK and must declare it in data safety, see Crash reports.
Why is my average play time strange?
Because the number is whatever your code reported. A client that reports once on load produces a tiny average; one that reports forever inflates it.
Can I see performance per device?
No device or model breakdown exists. Country is the only segmentation on events.
Is 5 GiB per file or per build?
Per object. A build is a folder of objects, and the worker has no folder total; the browser client imposes one before it starts.
Developer publishing support: [email protected]
General support: [email protected]
Partnerships: [email protected]
APPSINITY