Client library and installs
The client's library is a folder of unpacked games plus a manifest. Understanding the unpack and launch rules is how you package a Windows build that actually starts.
Open Appsinity StudioWhen the client takes over a download
Only downloads that start while the current page URL matches /listing/<slug> are intercepted. Everything else behaves like a normal browser save with a Save-As dialog.
An intercepted file is written to <library>\<slug>\, where <library> is the folder the player chose in the Downloaded games drawer, or %LOCALAPPDATA%\Appsinity\library if they never chose one. A name collision is suffixed (2) through (99).
Unpacking and choosing the executable
A .exe or .msi download is a direct launch target and skips the unpack. Note that neither can be uploaded as a build, so in practice everything arrives as a zip — see Windows builds.
The id rides on the shortcut as one token, --launch=slug rather than --launch slug: Electron rebuilds the command line before it reports a second launch to the client that is already running, and that rebuild moves every loose value somewhere else. Shortcuts written in the old split form still resolve — the client asks its own library which token names an installed title before it gives up.
- Expand. A
.zipis unpacked with PowerShellExpand-Archiveinto<name>.appsinity. - Search. The first
.exewithin three folder levels is selected. - Skip. Names containing
unins,uninst,crash,helper,uploaderorupdateare ignored. - Shortcut. A real
.lnkis written to the Desktop targeting the client's own executable with--launch=<slug>and the description Play <name> through Appsinity. - Launch. The client spawns the executable detached and records the session, with the process id, in a local play log.
One progress bar, and the chip behind it
A listing streams a Windows build itself and shows its own download sheet, so while that sheet is on screen the client writes its messages into it — the sheet is the only bar a player sees, and it is the one that counted the bytes.
The client's 296 px chip is what appears when nothing on the page is already reporting: a sheet the player closed, a listing cached before it grew that door, or a save from another window. It is throttled to one update every 220 ms, holds the percentage at 99 until the transfer truly completes, and falls back to byte counts when the server sends no content length.
There is one case where the client says nothing at all: when the page has already fetched the file and is only asking for it to be filed away, re-reporting those bytes as a fresh transfer would snap a bar to 100% in one frame, so the client starts speaking at Unpacking.
| Message | Meaning | Developer action |
|---|---|---|
| Downloading | Bytes arriving | — |
| Unpacking | Expanding the archive | — |
| Ready - shortcut on your desktop | Success | — |
| Ready - shortcut blocked | Installed; Windows refused the shortcut | Ask the player to check folder permissions or antivirus |
| Download cancelled | The player cancelled | — |
| Download failed | The transfer or write failed | Check the build URL resolves |
| Could not add to library | The manifest write failed | Reproduce and report the slug |
The library drawer
Downloaded games lists installed titles with Play, Folder and Store page per entry, a Rescan action, an Open the store button, and an Install location tile that shows where builds are written and offers Change folder and Open it. The header states Shortcuts on your desktop route back through this client.
- Empty state: Nothing installed yet with a Browse the store button.
- Summary stats read N with a Windows executable, the total size, and launched through Appsinity or launch a title to start the count.
- The manifest holds up to 300 games, slugs are truncated at 64 characters and shortcut names at 80.
- Folder size is computed by walking up to 6,000 files, so an enormous install can report a low figure.
- The play log keeps the last 200 sessions.
Windows integration details
- The app user model id is
Appsinity.Client, so the taskbar tile resolves through the client's Start Menu shortcut. - WebP artwork is re-requested as PNG because the icon conversion cannot read WebP, and the icon is converted at 48 × 48.
- Every PowerShell call runs hidden, with no profile, execution policy bypassed, and a 60-second timeout.
- A shortcut whose tile still reads "Electron" means a stale shortcut on that machine, not a broken build.
Frequently asked questions
Can I install to a different folder?
The library path is fixed. The installer itself allows a custom install directory; per-game folders do not.
Why is my game missing from the tray Play list?
Either it has no detected executable, or it is past the first 15 launchable titles.
A player says their desktop shortcut reports the title is no longer in the library.
That was the split --launch <id> form losing its value when Electron rewrote the command line for an already-running client. It is fixed, and old shortcuts still resolve. If it persists on an up to date client, the title really is gone from %LOCALAPPDATA%\Appsinity\library\installed.json — ask them to download the listing again.
Why does a listing still show Download for a title the player already has?
Three reasons, in order of likelihood: the client is older than the Play handoff and cannot answer the question, the installed build has no Windows executable so there is nothing to start, or they are looking at the same listing in a browser, which has no library to consult.
Do I need to do anything for the client to find my build?
Only package it as a zip with one root executable and publish from a listing URL, see Windows builds.
Developer publishing support: [email protected]
General support: [email protected]
Partnerships: [email protected]
APPSINITY