# The folder

eggox.json, a folder per room, a file per thing. Nothing in a game lives outside this shape.

```
eggox.json                the game: its name, API version, its rooms
rooms/<Room>/room.json    one room: size, view, chat; its rules; what stands where
rooms/<Room>/<file>.lua   the room's script files, compiled in name order
things/<Thing>.lua        the script on a thing (every one of it, in every room)
things/<Thing>.json       the bricks on a thing
```

A **thing** is a mint the game holds in its [stock](/project/stock). Rooms
place it by name, as many times as they like. What is set on a thing, its
script and its bricks, holds for every one placed. A **placed** thing can
carry bricks of its own on top (a sign's text, a spawn's team); it cannot
carry a script. A **room** has settings, rules (the bricks on the game) and
its script files. The **game** is the root room and the rooms made inside it.

## eggox.json

```json
{
  "name": "Ninja Skybound",
  "api": 1,
  "id": "room:tpi_room_…",
  "rooms": ["Skybound", "Belt Island"]
}
```

| field | meaning |
| --- | --- |
| `name` | the game's name, as its door shows it |
| `api` | the [scripting API version](/api/overview) every room runs on |
| `id` | the game's id, written by a pull; a push needs it |
| `rooms` | the rooms in order, root first; folder names under `rooms/` |

## Names

Rooms and things are named by their names in Eggox, made safe for a file
name: letters, digits, spaces, `-` and `_`, at most 40 characters. Two stock
items with the same name are told apart as `Name`, `Name 2`, `Name 3`, oldest
first. `eggox stock` shows the exact name of every thing.

## What is not in the folder

The voxel art of a thing is the mint's, made in the blueprint Studio and
held in the game's stock; the folder only names it. Players' saves and
leaderboards are the game's data, not its definition. Both stay where they
are when you push.

