01Build your game
Build your game
Start with a browser game, keep scripts inside the bundle, and declare its capabilities in game.json.
{
"schema": "uniplays/game-manifest/1",
"name": "Neon Dodge",
"version": "1.0.0",
"entry": "index.html",
"icon": "art/icon.png",
"engine": "vanilla",
"orientation": "landscape",
"inputs": ["keyboard", "mouse", "touch"],
"capabilities": ["storage", "leaderboard"],
"contentRating": "everyone",
"token": { "name": "Neon Dodge", "symbol": "DODGE" }
}Manifest fields
- schema
- The literal "uniplays/game-manifest/1".
- id
- Assigned on first publish. Include the game ID when updating an existing game.
- name
- At most 48 characters as a reader counts them, no leading or trailing spaces, and no control, bidi override or zero width characters.
- genre
- Optional. One of Arcade, Racing, Roguelike, Puzzle, Strategy, Adventure, Simulation, RPG, Shooter, Platformer, Card, Sports, Party, Chance, MMO, Other.
- tags
- Optional. 1 to 5 distinct tags from singleplayer, multiplayer, co-op, pvp, casual, competitive, idle, turn-based, real-time, pixel-art, 3d, retro, fantasy, sci-fi, horror, story-rich, physics, crafting, collectibles, mobile-friendly, beside genre. Players filter the catalog by genre and by tags, and a game must carry every tag they pick.
- version
- A semver string such as 1.3.0.
- entry
- A relative .html path inside the bundle: no leading slash, no .., no scheme, query or fragment, at most 255 characters.
- orientation
- One of any, portrait, landscape, default any: the layout the game needs. On a phone held the other way the player sees a rotate hint; nothing depends on a screen lock.
- inputs
- At least one of keyboard, mouse, touch, gamepad, motion. Declare touch only when the whole game plays by touch alone, with no hover-only or keyboard-only action. Without touch or motion, phone players are told the game needs a keyboard or mouse.
- icon
- Required. A path inside the bundle, used for the game icon and token logo. A square PNG or WebP of 512 px or more is recommended.
- screenshots
- Optional, at most 8 bundle paths, no repeats.
- engine
- One of phaser, pixi, three, godot, unity, playcanvas, construct, vanilla, other. The value decides the WASM import allowlist, so a wrong value fails validation.
- engineVersion, plugin
- Written by the UniPlays Unity and Godot plugins when they build; leave both as the build wrote them. plugin names the engine and plugin release, such as godot@0.1.0, and must match engine. For engine unity or godot the game's worker-src carries no blob:.
- changelog
- Optional, at most 2000 characters.
- capabilities
- An array, defaulting to empty. A capability that is not declared here is denied at runtime.
- network.allow
- The external HTTPS origins the frame may reach, at most 8, carried into the CSP connect-src after the bundle's own pinned path, each with its wss:// twin so a WebSocket to the same host and port works.
- token
- Required. The token's name, at most 31 UTF-8 bytes, and its symbol, 2 to 11 characters of A-Z and 0-9, both fixed at launch, plus optional holder gates that capability token.gate turns on.
- store
- Optional. Items sold through the shell, priced in USD or in whole tokens. Declared together with capability store.
- leaderboard
- Optional score ceiling, a decimal string of at most 38 digits. Requires capability leaderboard.
- leaderboards
- Optional, and exclusive with leaderboard: 1 to 32 boards, each with an id, a name of at most 40 characters and an order, desc or asc. A desc board keeps each player's highest score and may set maxScore. An asc board keeps the lowest score and needs minScore, the floor below which no score counts. A call that names no board uses the first, and every board keeps its own season rows. Requires capability leaderboard.
- assets
- Optional. The item types this game's collection can mint and the royalty on shop sales, which the first declaration freezes. Declared together with capability assets.
- rewards
- Optional. The per-player daily cap on rewarded tokens. Declared together with capability rewards.
- economy
- Optional. This game's treasury: its extra trading fee, purchase split, floors and outflows, with every ceiling frozen at launch. Declared together with capability economy.
- drops
- Optional. This game's drop tables and seasons, declared together with capability drops. They live only in the game's published files and change only through a game update: no route or manage page starts or edits a season or a table, and the manage and game pages only show them.
- draws
- Optional. Up to four paid prize draws, each with an id, a name, a price in USD or whole tokens, a win chance, a per-wallet cap, the share of each entry that is burned, and a prize pool whose counts equal each prize type's supply cap. Declared together with capabilities draws and assets.
- contentRating
- One of everyone, teen, mature. The default is everyone.
- sdkBuildHash, bundleHash
- Generated by the platform; omit these fields from your source manifest.
02Validate & preview
Validate & preview
Upload a ZIP, TAR, or TAR.GZ of up to 3,000 files with game.json at the root. The launch flow runs full validation, including a browser test. Fix errors, inspect warnings, then test controls and saves in the unlisted preview.
Full validation checks for first paint within 20 seconds and tests the bundle under the game runtime policy. Previews expire after 24 hours.
For MCP, use validate with mode: "full" before requesting preview.
03Launch your game & token
Launch your game & token
Review your name, ticker, description, artwork, social links, and optional first buy. Your wallet signs the launch transaction. The token profile and social links are set once.
- Name & ticker
- The token name allows up to 31 UTF-8 bytes. Use 2 to 11 ASCII letters or digits for the ticker. Both are permanent after launch.
- Token supply
- Every launch puts about 71.43% on the bonding curve, up to 20.41% into the pool at graduation, and 8.16% into a permanently locked reserve.
- Creator earnings
- The standard 1% trading fee is split equally between the creator and UniPlays.
- Launch fee
- A fixed 0.0004 ETH, plus network gas.
- First buy
- Optional, up to 20% of the graduation target, which is 4.2 WETH by default. There is no free creator allocation.
- Graduation
- When the curve sells out, raised WETH and reserved tokens move to a pool with locked liquidity.
04Updates & rollback
Updates & rollback
Use a higher semantic version in game.json and include the existing game ID. Add developer notes, validate and preview, then sign the update with your wallet. A rollback selects a previously published version and also requires a signature.
Updates can change code, capabilities, artwork, item prices, and allowed network origins. Manage versions from your game’s workspace.
Manage games in your profile05Items & marketplace
Items & marketplace
Declare item types, store prices, and trading permissions in your manifest. An item marketplace settles in the game token; the creator royalty is explicitly set from 0% to 10%.
Catalog price changes require a new published manifest. Handle a typed refusal so gameplay can continue when an economy feature is not configured on this deployment.
Your collection is also listed on marketplaces outside UniPlays. Its owner is the developer wallet registered for the game, so you claim and edit the collection page on OpenSea with that wallet. The burn election and the 10% royalty cap bind the UniPlays shop and the marketplaces that read the ERC-2981 royalty only. As owner you can also set fees on venues and royalty registries that key on collection ownership, and UniPlays neither sets nor caps those. A creator fee set on a venue comes out of the selling holder’s proceeds. After you hand the game to another developer wallet, re-point or clear any royalty registry override you set.
Items & market methods06Optional backend hosting
Optional backend hosting
Run entirely in the browser, connect your own HTTPS backend, or use UniPlays hosting when enabled. UniPlays hosting starts with $25 prepaid credit. Review the payment details at launch; recharges use USDG.
Upload a bundled JavaScript backend separately. Call uniplays.backend.call with a persistent idempotency key for each action, and reuse it on retries. Hosting supports short request functions, rather than continuous game servers.
07Runtime & supported engines
Runtime & supported engines
Single-threaded web exports from Phaser, Pixi, Three.js, Godot, Unity, PlayCanvas, Construct, and vanilla JavaScript are supported.
- Keep JavaScript and WebAssembly local to the bundle.
- Remove inline scripts, remote scripts, eval, service workers, and threaded WebAssembly.
- Declare external HTTPS data API origins in
network.allow. - Call
uniplays.ready()before platform methods.