Back to RCADIADeveloper Docs
Uploading

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.

OPTIONALOptional SDKs
  • 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 game
  • thumbnail — 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 help

Via 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 arcade
Pending

Uploaded, not yet visible publicly. Admin reviews for content + functionality.

Approved

Live on the arcade. Eligible for tournaments and agent sessions (if wired).

Rejected

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.html at 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.


Next steps