# manifest_not_canonical

> The archive game.json differs from its canonical serialization.

The archive game.json differs from its canonical serialization.

| | |
| --- | --- |
| Kind | Build or validation problem |
| Reported by | Archive validation (registry, room hosts, disko publish) |
| `disko` exit code | 1 (problems) |

The `game.json` inside the archive is not written in its one canonical form.
The archive manifest must be exactly the keys `entry`, `schemaVersion` and
`version`, sorted, with no whitespace and no trailing newline.

## Why it happens

Archive validation reports this code: the registry on upload, and room hosts
before loading. `disko publish` writes the archive manifest itself; your
source `game.json` can be formatted any way you like. You usually see this
code for an archive built by another tool that copied the source `game.json`
as-is.

## Wrong

```json title="game.json"
{
  "entry": "src/main.js",
  "schemaVersion": 1,
  "version": "1.4.2"
}
```

## Right

```text title="game.json"
{"entry":"src/main.js","schemaVersion":1,"version":"1.4.2"}
```

Build the archive with `disko publish --dry-run --out release.tgz`.

## See also

- [game.json reference](/reference/game-json)
- [`manifest_invalid`](/errors/manifest_invalid)
