# dweller.json manifest

`dweller.json` lives in your project root. `dweller init` writes it; `dweller push` reads it. Commit it so you, your teammates and your AI agent can repeat releases exactly.

```json
{
  "game": "starfall",
  "title": "Starfall",
  "tagline": "Catch falling stars before the night runs out.",
  "description_file": "STORE.md",
  "tags": ["arcade", "cozy", "pixel art"],
  "engine": "Godot 4.7",
  "ai_tools": ["Claude Code"],
  "builds": [
    { "platform": "windows", "path": "build/windows", "exec": "Starfall.exe" },
    { "platform": "macos",   "path": "build/macos/Starfall.app", "arch": "universal" },
    { "platform": "linux",   "path": "build/linux", "exec": "Starfall.x86_64" },
    { "platform": "web",     "path": "build/web" },
    { "platform": "android", "path": "build/Starfall.apk" }
  ]
}
```

| Field | Meaning |
|---|---|
| `game` | The game's URL name on Dweller (`https://dweller.games/games/<game>`). Required for `push`. |
| `title`, `tagline`, `tags`, `engine`, `ai_tools` | Used when `dweller init` or `dweller push` creates the game, and by `dweller update --from-manifest`. |
| `description_file` | Markdown file used for the store description. |
| `builds[].platform` | `windows`, `macos`, `linux`, `web`, `android` or `gba`. |
| `builds[].path` | A file (zip, exe, apk, gba, AppImage) or a folder. Folders are zipped on upload. A `.app` folder is zipped with the bundle at the top level. |
| `builds[].arch` | `x64` (default for desktop), `arm64`, `universal` or `any`. |
| `builds[].exec` | Program to run after unpacking, relative to the build root. Optional: Dweller detects it when there's only one candidate. |
