AppsinityAPPSINITY
Guides and support

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 Studio

What is actually measured

Everything above is unaudited data your code or a visitor reports; see Spam policy for why that matters.
SignalSourceWhere you see it
Listing visitsA visit event per page viewAnalytics totals and country rows
DownloadsA download event per download actionAnalytics totals, listing counter
Play sessionsPOST /api/listing-play with playSecondsSession count and averages
Average play lengthAggregated from session rowsPlay stats read
Total play timeSum of reported secondsPlay stats read
Ad eventsImpression, click, completed, skippedAds stats
Rating averageArithmetic mean of review rowsListing header, analytics
Not available: Not measured anywhere on the platform: load time, frame rate, memory, battery, storage used, crash rate, ANR rate, install success rate, download throughput, or per-device performance.

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 }
Note: Web titles count opens rather than installs, and the listing labels the difference, see Web game builds.

A fast web build

  1. Ship the fewest bytes that run. The whole tree sits behind one URL with no bundler between you and the player.
  2. Compress large payloads. The presign accepts a contentEncoding so a .data or .wasm blob can be served marked as encoded.
  3. Get content types right. .wasm must be application/wasm or streaming compilation fails; that is inferred from the extension for you.
  4. Split assets from code. A 300 MB initial download is a review, whatever the game is worth.
  5. Keep one file under 5 GiB. The per-object ceiling, enforced twice, see Upload limits and file types.
  6. Version the folder, not the file names. A version segment gives you a clean rollback target.
Watch out: Web uploads skip the extension allow-list but not the block-list. A build with a stray .sh helper in it fails to presign, and the error names the extension.

Downloads and caching

ThingBehaviourConsequence
Release filesServed from object storage over HTTPSA large file is one PUT and one GET
Store HTMLCached at the edge for about a dayA corrected listing can look stale for hours
/assets sheetsCached for four hoursBump the ?v= query when you change one
Presigned PUT window10,800 secondsA slow upload must finish inside three hours
Object visibilityImmediate once the PUT completesNo approval step delays the URL
Note: If you change a file and a player still sees the old one, the difference is the cache, not the storage. Re-fetch with a cache-busting parameter to confirm.

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.
Not available: Nothing in the client reports frame rate, load time or crashes to the store. Its numbers are for the player sitting at that machine.

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.

Need help?

Developer publishing support: [email protected]
General support: [email protected]
Partnerships: [email protected]