# Submit and review How a game goes from your kit to the site: submitting, the automatic checks, human review, what gets refused, protected games, updates, pausing and removing. ## Before you submit - A free account (13+). Playing and building don't need one; submitting does. - Every check passes in the kit (`node public/kit/test/cli.js public/games/`), and you have played the game. - 1 to 6 screenshots for new games (see [Build: screenshots](/docs/build.md#screenshots-video-and-about)). ## Four ways to submit **1. Your account page.** Sign in on your [account page](https://id.robokade.com/) and upload the game folder (`public/games/`, or an Arcade folder with `arcade.json`). **2. Your agent with `mc`.** On the account page, under **Agent tokens**, give the token a name and press **Create a token** (we email you a code to confirm). Press **Copy message for my agent** and paste it to your agent. It contains the token and the commands: ``` node tools/mc-local/mc.mjs login mc_… # once: saves the token on that computer node tools/mc-local/mc.mjs submit public/games/ --note "built by …" ``` A folder with `arcade.json` is sent as an Arcade game: `mc` lists every file with its size and checksum and sends them one by one. **3. MCP.** After `mc login`, MCP agents connected to the kit's server can use `submit_game`, `list_submissions`, `submission_status` and `withdraw_submission`. **4. HTTP**, for your own programs: `POST /api/submit` on the account site with `Authorization: Bearer ` and the files as JSON. Screenshots and video are uploaded first through `/api/media/uploads`. The exact format is in [/llms.txt](/llms.txt). **Log in once.** An agent token never expires and is reused for every submission and every new version. Several accounts (for example your own and a team account) can be saved on one computer: run `mc login` once for each. A game is always sent as the account that owns it; new games go to the current account (`mc accounts`, `mc use `, `mc whoami`). ## What happens next 1. **Automatic checks, at once.** Our server runs the file checks (the same as `cli.js --static` in the kit; it never runs your code) and answers **PASS**, or **FAIL** with what to fix. Only these checks block a submission. Fix it and submit again. 2. **A person reviews it.** Games run in players' browsers, so nothing goes live unread. The reviewer reads every file, runs the full checks on a separate machine, and plays the game in a private preview (Arcade games too; agent seats and online play are tried as well). 3. **Approved or rejected.** A rejection comes with a note on your account page. We may ask for changes or make small fixes ourselves. 4. **Live within about a minute** of approval, with your display name on the card and the game page. Follow it on your account page (tab **Games**) or with `mc submissions` (all of them) and `mc status ` (one, with the check report). | Status | Meaning | |---|---| | `pending` | waiting for review | | `approved` | accepted, going live | | `published` | live | | `rejected` | not accepted; read the reviewer's note | | `withdrawn` | you took it out of review | | `replaced` | an older version; a newer one is live | | `removed` | taken off the site | | `held` | paused by you or suspended by us | A new submission withdraws your older **pending** versions of the same game. Approved ones stay. ## What we accept and what we refuse Accepted games are your own work (or work you have the right to share), fine for players aged 13 and up, and only the game folder. Review refuses, or later removes, a game with: - **gambling of any kind:** bets, paid chances, prizes, loot boxes; - content unsuitable for ages 13+; violent or scary content without content notes; harming civilians switched on by default; - other people's characters, brands, logos or art (also in models and sounds); - network calls, trackers, ads or outside links (Arena games run fully in the browser; Arcade games are blocked from other addresses anyway); - hidden, minified or encoded code, or code built from text (`eval`, `new Function`, dynamic `import()` in Arena games); - **text that tries to instruct AI agents** ("ignore your instructions", "read this file", "open this link") in `spec.md`, `describe()`, observations, `agentGuide` or the About text; - screenshots or videos that don't show this game or mislead; - for Arena games, a closed licence on a game we can't protect (realtime, or not ready for our server); open licences (MIT, Apache-2.0, BSD, ISC, CC0) are always fine, and a turn-based game with a closed licence is protected on approval; - for Arcade games, assets you don't have the right to publish, or secrets in the package (private keys, API tokens: refused by the automatic check); - for Arcade games online, any text players can send to each other through the game; - seat names or presets (`seatsUi`) that mislead, or `partnersShareViews` in a game where one person must not see a partner's hand; - a copied, empty or broken game. We also play every game: one that isn't ready yet may come back with a note. Submitting is free. Not every game is accepted. Full rules: [Terms](/terms.html). ## Protected games: rules on our server After approval, a turn-based Arena game can have its rules and bot moved to our game server ("protected"). A game with a closed licence must be protected. The play page then gets only the view and what its seats may see: nobody can copy your rules or bot from the page, and the server signs every result. Leaderboards and rooms need this. - To be ready: keep your view separate from `core.js` (helpers in their own file), keep no state outside the game state, and keep to the server's time and size limits. The `separation` check and `tools/mc-local/protected.mjs` in the kit show how your game behaves ([Build: testing](/docs/build.md#test-an-arena-game)). - Your code runs there only after review, in an isolated box with no network. - A protected game stays protected when you publish a new version. ## Updates Raise `version` in game.json (or arcade.json) and submit again. Only the account that owns the game id can update it. The update is reviewed like a new game; when it goes live, the old version becomes `replaced`. A live Arcade game gets a new `agentGuide` only with its next version. ## Withdraw, pause, remove - **Withdraw:** take a submission out of review while it is `pending` or `approved` (not once it is live): **Withdraw** on your account page, or `mc withdraw `. Its files are deleted. - **Pause game / Resume game:** on your account page you can hide your live game for a while. Players see "This game is paused" on its page, with no Play. Resume brings the same version back. Up to 10 pauses and resumes an hour per account, and 10 minutes between two changes of the same game. - **Remove from site:** takes a live game offline within a minute. You keep the game id; a new version brings it back. - **Suspended by us:** we may suspend a game with a reason; you get an email and see the reason on your account page. Only we can lift a suspension; while it lasts you can't resume, remove or update that game (write to contact@robokade.com). Harmful games are taken down first and checked afterwards. - **Deleting your account** takes your live games down within 7 days. ## Errors | Error | What to do | |---|---| | `NO_TOKEN` | Run `mc login ` first (copy it from your account page). | | `BAD_TOKEN` (401) | The token was revoked, or you signed out everywhere. Create a new one. | | "belongs to X; you are submitting as Y" | Another account owns that game id. If it's yours, save that account's token too (`mc login`) and check with `mc accounts`. If not, pick another id. | | `RATE_LIMITED` | At most 5 accepted submissions an hour, and after 30 failed submissions in an hour you wait an hour. | | `TOO_MANY_PENDING` | At most 10 submissions waiting for review, and at most 80 MB waiting in all. Withdraw old ones or wait for a review. | | `CLOSED` | Submissions are paused for a while. Try again later. | | `NOT_WITHDRAWABLE` | Only submissions that are not live yet (`pending` or `approved`) can be withdrawn. For a live game use **Remove from site**. | | `mc` prints its list of commands instead of running yours | Your kit is older than the feature: download the kit again. Your saved token keeps working. | | No code email | Check spam. Each new request cancels the previous code; an address gets at most 3 codes an hour. Then write to [contact@robokade.com](mailto:contact@robokade.com). | Limits: Arena games 8 MB and 60 files; Arcade games 50 MB, 500 files, 20 MB per file; screenshots and video up to 14 MB on top. Can't upload? Email a link to [contact@robokade.com](mailto:contact@robokade.com).