> ## Documentation Index
> Fetch the complete documentation index at: https://summer-18f03259-codex-native-multiplayer-entry.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# manifest.json Reference

> Complete manifest.json field reference for Summer games submitted to Summercraft: required keys, optional keys, and validated examples.

## Overview

Every Summer game submitted to Summercraft must include a `manifest.json` file at the root
of the game pack.

The browser submission flow validates required keys and types at upload time. The release API
records and verifies the artifact; human review currently checks the game contract. The
production runtime and automated sandbox are not live, so the runtime rules below are
contract requirements rather than deployed enforcement:

* `entry_scene` and `player_scene` are resolved **relative to the manifest's location** in the pack (manifest at the root means `"main.tscn"` → `res://main.tscn`).
* The entry scene's root script must `extends SummerGame` for the future runtime contract.

See [platform capability status](/knowledge-base/source-status#platform-capability-status).

## Required Fields

These fields are required by submission validation:

| Field         | Type   | Required | Description                                                       |
| ------------- | ------ | -------- | ----------------------------------------------------------------- |
| `id`          | string | Yes      | Stable game identifier. Used for slug generation and updates.     |
| `name`        | string | Yes      | Display name shown in platform surfaces.                          |
| `version`     | string | Yes      | Semantic or creator-defined version string (for example `1.0.0`). |
| `summer_sdk`  | string | Yes      | SDK version your game targets (for example `1.0`).                |
| `entry_scene` | string | Yes      | Main scene path/name designated for the runtime contract.         |
| `min_players` | number | Yes      | Minimum players required before start flow.                       |
| `max_players` | number | Yes      | Maximum concurrent players for a match.                           |

## Optional Fields

| Field           | Type      | Required | Description                                                           |
| --------------- | --------- | -------- | --------------------------------------------------------------------- |
| `player_scene`  | string    | No       | Player scene path/name used by server/client spawning logic.          |
| `description`   | string    | No       | Short game description.                                               |
| `tags`          | string\[] | No       | Category/search tags.                                                 |
| `genre`         | string    | No       | Primary genre label.                                                  |
| `tick_rate`     | number    | No       | Future server-sync hint; no production runtime currently consumes it. |
| `preview`       | string    | No       | Preview asset path/name for discovery UI.                             |
| `input_actions` | object    | No       | Input action metadata for UX/docs tooling.                            |

## Minimal Valid Example

```json theme={null}
{
  "id": "coin-collector",
  "name": "Coin Collector",
  "version": "1.0.0",
  "summer_sdk": "1.0",
  "entry_scene": "coin_collector.tscn",
  "min_players": 1,
  "max_players": 8
}
```

## Full Example

```json theme={null}
{
  "id": "quest-arena",
  "name": "Quest Arena",
  "version": "1.2.0",
  "summer_sdk": "1.0",
  "entry_scene": "quest_arena.tscn",
  "player_scene": "player.tscn",
  "min_players": 1,
  "max_players": 12,
  "tick_rate": 60,
  "description": "Persistent multiplayer quests and progression.",
  "preview": "preview.png",
  "genre": "rpg",
  "tags": ["rpg", "quest", "persistence"],
  "input_actions": {
    "quest_complete": {"keyboard": "Q", "gamepad": "Y"},
    "buy_potion": {"keyboard": "B", "gamepad": "X"}
  }
}
```

## Validation Rules That Cause Rejection

* Missing any required key
* Wrong type for required string fields
* `min_players` or `max_players` not numeric
* Invalid JSON

## Versioning and Updates

When you submit a new `.pck`:

* Keep the same `id` for the same game
* Increase `version`
* Re-submit through the [publish flow](/api-reference/summer-sdk/exporting-and-uploading-your-game)

On the API release path, use the manifest's `version` string as the release `version` too — it must match `[A-Za-z0-9][A-Za-z0-9._-]{0,31}` (no `..`), and released versions are immutable: an update is always a new version. The platform stores versions and routes review/publishing from your newest submission.
