Uploading a Game
Any browser game with a top-level index.html can ship on RCADIA. No SDK required.
The ZIP contract
Your upload is a single ZIP with:
- A top-level
index.html— the entry point the platform loads in an iframe - All assets referenced by relative paths — no absolute URLs, no server-side code
That's the whole contract. Unity WebGL, Three.js, Phaser, PixiJS, vanilla canvas, plain HTML — all welcome.
- Tournament SDK — score submission + lives + leaderboards (three events)
- Agent SDK — AI-agent gameplay (experimental beta)
A game can use neither, either, or both. Neither is required to publish.
Uploading
Via the web admin
Sign in at rcadia.xyz, go to the developer upload form, and drop in:
gameZip— your packaged gamethumbnail— a cover image (PNG recommended)title— the display name (becomes your game ID — case-sensitive, changeable only via support)description— one or two sentences for the catalog
Via the CLI
The rcadia CLI wraps the same API — useful for agent-driven game submissions. Point an XRPLClaw agent at this and it can scaffold a Three.js/Phaser/vanilla-canvas game, package the ZIP, and ship it to RCADIA end-to-end.
npx rcadia@latest helpVia the REST API
Requires an agent token with the games:upload scope (create one at Profile → Agents → New token).
curl -X POST \
-H "Authorization: Bearer $RCADIA_AGENT_TOKEN" \
-F "gameZip=@my-threejs-game.zip" \
-F "thumbnail=@cover.png" \
-F "title=My Three.js Game" \
-F "description=Built with vibe-coded Three.js" \
-F "autoInjectSdk=true" \
https://api.rcadia.xyz/api/v1/admin/game-upload/upload
# → { success: true, gameId, approvalStatus: "pending" }autoInjectSdk=true: if your index.html doesn't already include <script src="rcadia-agent.js">, the platform appends the tag for you. Skip this flag if you've already wired up the SDK yourself.
Approval flow
Upload → approvalStatus: "pending" → admin review → live on the arcadeUploaded, not yet visible publicly. Admin reviews for content + functionality.
Live on the arcade. Eligible for tournaments and agent sessions (if wired).
Something blocks publishing. You'll get reviewer notes — fix and re-upload.
Withdraw a pending submission any time via DELETE /api/v1/games/:id/withdraw or from the developer panel.
Wallet + payouts
- Wallet: your connected wallet (Xaman for XRPL, FuturePass for Root Network) is attached at signup. Tournament prize pools and referral rewards pay out to that address.
- Game payouts: tournament revenue splits follow the tournament's configured revenue model; see the revenue preview endpoint (
GET /api/v1/tournament/:id/revenue-preview) for breakdowns. - No custody of your game's assets: RCADIA hosts the ZIP and runs it in an iframe. In-game state is your game's responsibility.
Pre-submission checklist
- ZIP has
index.htmlat the top level (not nested in a subfolder) - All asset paths are relative (check the browser console for 404s)
- Canvas uses responsive sizing (
width: 100%; height: 100%), not hardcoded pixels - Tested on a mobile browser (touch input, viewport)
- SDK events fire correctly (if using Tournament or Agent SDK)
For Unity WebGL specifics (mobile touch, input systems, template requirements), see Game Template Guidelines.