# Quickstart ## Installation Download the `tp` CLI tool to develop, playtest and publish games. ```sh tab="macOS and Linux" curl -fsSL https://ctrlz.gg/install.sh | sh ``` ```powershell tab="Windows" irm "https://ctrlz.gg/install.ps1" | iex ``` To learn more about the commands available run `tp help`. ## Your first game Use `tp new my-game` to dive right in with a simple starter project that demonstrates some basic features: a character to walk and jump with, balls dropping from a post, and other players joining in. ```sh tp new my-game tp dev my-game ``` ctrlz games are written using TypeScript. Using an editor like VS Code you can get autocomplete suggestions in scripts. A game's scripts are in three folders: - `server/` runs once for everyone: it builds the world and decides what happens in it. - `client/` runs on each player's device: the camera, the UI, what the player presses. - `shared/` is what both use, such as the game's components. You can use `tp dev my-game` to preview your game in the browser and see it reload as edits are saved to get feedback in real time. It prints an address to open, such as `localhost:8080/?watch` to play alone. Running `tp check my-game` builds the game and checks its types without running it. Check out the embedded starter project below, you can edit its scripts and try out the changes live. The starter game plays here, its scripts editable. To read its code, start a copy: `tp new my-game` (its `AGENTS.md` says where its pieces are). ## Examples Examples are small games, each showing one thing. `tp new --example` lists them, and this starts a copy of one to read and change: ```sh tp new my-chat --example chat ``` ## Publishing ### Developer account Anyone can play, but publishing needs a developer account. Sign in to the [developer dashboard](https://developer.ctrlz.gg/create/) with your email and apply to publish, telling us a little about what you'd like to make. Then sign in to `tp` with the same email: ```sh tp login ``` ### game.toml Ensure your `game.toml` has: - `id`: the game's address, `@/`. It can't change once published. - `image`: a 1280×720 picture in `assets/`, shown in the game list. - `name` and `description`, as players will see them. ### Publish ```sh tp publish my-game ``` Every version is reviewed before players get it: a person plays it and reads its code. Once approved it goes live, and new players get it. ## Updating Keep your `tp` up to date using `tp update`. Run `tp changes my-game` to see what changed for your game. ## Working with agents Projects created with `tp new` ship with `CLAUDE.md` and `AGENTS.md` instructing agents to use `tp guide` to learn more about engine features. Agents can also read the changelog with `tp changes` and follow its **Do:** lines to migrate your code. You can also use agents as an interactive teacher, for fast prototyping, etc. ## Next steps These docs are a work in progress. Until then, run `tp guide` to read the creator guide.