Enforcement patterns#
Because Gamearly is DRM-agnostic — we never modify your files — you decide how strictly to enforce ownership. Pick one of three postures and apply it consistently.
Posture A — no verification#
Ignore the token and the context entirely. Your game is unaffected by any of this. A reasonable choice for free games, demos, or anything where piracy isn't a concern.
Posture B — verify online, stay flexible offline#
Recommended.
GAMEARLY_TOKEN_STATUS |
What to do |
|---|---|
ok |
Verify server-side. Gate online services on entitlement.owns. |
offline / server_error / auth_expired / unknown |
Allow single-player play if now - GAMEARLY_LAST_VERIFIED_AT is inside your grace window — 7 to 14 days is typical. Otherwise ask the player to reconnect. Keep online services disabled until a real verification succeeds. |
not_entitled |
Refuse online services, and optionally refuse to boot. |
(no GAMEARLY_LAUNCHER at all) |
Treat as unverified: single-player only, no online services. |
Because GAMEARLY_LAST_VERIFIED_AT comes from the launcher, you can implement the grace window
without a backend of your own and without the player ever linking an account. If you do
have a backend, prefer your own recorded verification time from /launch_tokens/verify or
/entitlements/check — a value you store cannot be edited by the player.
Posture C — hard requirement#
Require a verified token on every launch: anything other than ok followed by a valid: true
response means no play.
Strongest, and it makes offline play impossible — including for legitimate owners on a plane, and during any Gamearly outage. If you choose this, say so on your store page.
Build Posture C on the verified token only
Do not build it on the advisory context variables; a player can set those by hand.
Situations to plan for#
| Situation | What your game sees | Recommended |
|---|---|---|
| Online launch through Gamearly | GAMEARLY_LAUNCHER=1, TOKEN_STATUS=ok, token present |
Verify, enforce fully. |
| Offline launch, real owner | TOKEN_STATUS=offline, ONLINE=0, LAST_VERIFIED_AT set |
Grace window. |
| Gamearly outage | TOKEN_STATUS=server_error, ONLINE=1 |
Same as offline — never punish. |
| Player signed out of Gamearly | TOKEN_STATUS=auth_expired |
Same as offline; optionally prompt to sign in. |
| Player does not own the game | TOKEN_STATUS=not_entitled |
Refuse online services, and optionally boot. |
| Access revoked or refunded | Your game does not launch at all | The launcher blocks it and prompts the player to remove the files. |
| Token read too late in boot | Token present, verify returns expired |
Fail open; read it earlier next time. |
| Your game relaunched itself | Same token, verify returns already_used |
Verify once per process tree. |
.exe run directly; Gamearly closed or not installed |
No GAMEARLY_* variables |
Unverified. Posture B: single-player only, no online services. |
| Install folder copied to another machine | No variables (no Gamearly there) | Same as above. |
Direct launches and copied files#
A direct launch never receives a token, and we cannot stop the operating system from running a copied binary without putting DRM inside your files — which we will not do. Two durable options:
Gamearly Connect plus server-side checks#
Require a login to your account for meaningful features, and have your backend call
GET /v1/entitlements/check?partner_user_id=… to confirm ownership independently of
the launcher and of any token. A player who copied the files and was later revoked is caught the
moment they go online, even on a direct launch. Combine it with the entitlement.revoked
webhook to react in real time.
Signed offline entitlement#
Coming. We are adding a longer-lived, Ed25519-signed entitlement ticket: issued during an
online launch, cached by the launcher, and passed on every subsequent launch — including offline
ones — as GAMEARLY_OFFLINE_TICKET. It is bound to GAMEARLY_INSTALLATION_ID, so a ticket
copied to another machine fails verification, and you will be able to verify it entirely
offline against our published public key. That will make Posture B cryptographically sound
rather than advisory. This page will be updated with the ticket format and the key endpoint when
it ships.
In short
The launch token protects the launcher path and gives you an identity even before a player
links their account. The launch context tells you exactly why a token is absent, so you can
respond proportionately instead of guessing. /entitlements/check plus Gamearly Connect give
you a durable, launcher-independent ownership check. A grace-period policy covers offline
play.
Full file-copy prevention for a purely offline single-player game is only achievable with heavy third-party DRM, which stays your choice to add.