Submit a Game

Built a game with AI? Get it on ExpoArcade in three steps.

1

Build

Create your game with the ExpoArcade SDK

2

Submit

Send it via the MCP server from Claude Code

3

Play

Once approved, your game goes live

Step 1: Build your game with the SDK

Your game is a plain HTML/CSS/JS bundle with an index.html at the root. Add the ExpoArcade SDK to hook into the platform — it handles score reporting, pause/resume, and the loading state.

Minimal game template

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport"
        content="width=device-width, initial-scale=1">
  <title>My Game</title>
  <style>
    body {
      margin: 0;
      background: #1a1a2e;
      color: #fff;
      font-family: system-ui;
      display: flex;
      align-items: center;
      justify-content: center;
      min-height: 100vh;
    }
  </style>
</head>
<body>
  <h1>My Game</h1>
  <script>
    // initExpoArcade is injected by the platform
    const ea = initExpoArcade({
      onPause:  () => { /* pause your game loop */ },
      onResume: () => { /* resume your game loop */ },
    });

    // Call ready() once your game has loaded
    ea.ready();

    // When the game ends, report the score
    // ea.reportScore(1500);
  </script>
</body>
</html>

SDK API

MethodDescription
ea.ready()Signal that your game has loaded. Required.
ea.reportScore(n)Submit a score to the leaderboard (integer, 0–999,999,999).
ea.isPaused()Returns true if the player paused. Check this in your game loop.
ea.requestFullscreen()Ask the platform to enter fullscreen.

Requirements

  • index.html at bundle root
  • Must call initExpoArcade() and ea.ready()
  • Total bundle size under 10 MB
  • No external network requests (fetch, XMLHttpRequest, WebSocket)
  • No eval()
  • Allowed file types: html, css, js, json, images, audio, fonts
Step 2: Set up the MCP server and submit

Games are submitted through the ExpoArcade MCP server, which you can use from Claude Code or any MCP-compatible tool.

1. Get an API key

Sign in to ExpoArcade, go to your Profile, and create an API key. Copy it — you'll only see it once.

2. Configure the MCP server

Add this to your Claude Code MCP settings:

{
  "mcpServers": {
    "expoarcade": {
      "type": "streamable-http",
      "url": "https://expoarcade.com/api/mcp",
      "headers": {
        "Authorization": "Bearer ea_your_key_here"
      }
    }
  }
}

3. Submit from Claude Code

Ask Claude to submit your game. It will use the submit_game tool automatically:

“Submit my game to ExpoArcade. The title is 'Space Dodge', it's a dodge-the-asteroids game. Tag it with arcade and space.”

Available MCP tools

ToolDescription
submit_gameUpload your game bundle with title, description, and tags
check_submission_statusCheck if your submission is approved, pending, or rejected
list_my_submissionsSee all your past submissions
update_submissionFix and resubmit a pending or rejected game
get_sdk_docsGet SDK docs and example code (useful for Claude)
Step 3: Review and go live

After you submit, your game goes through automatic validation and then manual admin review.

Submitted
Validated
In Review
Approved

Automatic validation checks

  • Bundle size under 10 MB
  • index.html exists
  • SDK integration detected
  • No flagged APIs (fetch, eval, etc.)
  • Only allowed file types

If your submission is rejected, you'll see the reviewer's notes when you check the status. Fix the issues and resubmit with update_submission.