dojo-init

$npx mdskill add dojoengine/book/dojo-init

Initialize complete Dojo game projects with structure and dependencies.

  • Creates Scarb.toml, dojo_dev.toml, and source directories instantly.
  • Depends on sozo init and dojo-starter template for project generation.
  • Executes based on user input for project name or interactive prompts.
  • Delivers a fully configured project ready for immediate development.

SKILL.md

.github/skills/dojo-initView on GitHub ↗
---
name: dojo-init
description: Initialize new Dojo projects with proper directory structure, configuration files, and dependencies. Use when starting a new Dojo game project or setting up the initial project structure.
allowed-tools: Read, Write, Bash, Glob
---

# Dojo Project Initialization

Initialize new Dojo projects with the complete directory structure, configuration files, and dependencies.

## When to Use This Skill

- "Create a new Dojo project"
- "Initialize a Dojo game called [name]"
- "Set up a new Dojo application"
- "Start a new provable game project"

## What This Skill Does

Creates a complete Dojo project with:
- `Scarb.toml` with Dojo dependencies
- `dojo_dev.toml` for local development
- Source directory structure
- Example models and systems
- Test files

## Quick Start

**Using sozo init:**
```bash
sozo init my-game
```

This creates a new Dojo project from the [dojo-starter template](https://github.com/dojoengine/dojo-starter).

**Interactive mode:**
```
"Create a new Dojo project called my-game"
```

## Project Structure

After initialization:

```
my-game/
├── Scarb.toml              # Package manifest and dependencies
├── dojo_dev.toml           # Local development profile
├── dojo_release.toml       # Production deployment profile
└── src/
    ├── lib.cairo           # Module exports
    ├── models.cairo        # Game state models
    ├── systems/
    │   └── actions.cairo   # Game logic systems
    └── tests/
        └── test_world.cairo # Integration tests
```

## Configuration Files

### Scarb.toml

Package manifest with Dojo dependencies:

```toml
[package]
cairo-version = "2.12.2"
name = "my_game"
version = "1.0.0"
edition = "2024_07"

[[target.starknet-contract]]
sierra = true
build-external-contracts = ["dojo::world::world_contract::world"]

[dependencies]
starknet = "2.12.2"
dojo = "1.7.1"

[dev-dependencies]
cairo_test = "2.12.2"
dojo_cairo_test = "1.7.1"

[tool.scarb]
allow-prebuilt-plugins = ["dojo_cairo_macros"]
```

### dojo_dev.toml

Local development configuration:

```toml
[world]
name = "My Game"
seed = "my_game"

[env]
rpc_url = "http://localhost:5050/"
account_address = "0x127fd..."
private_key = "0xc5b2f..."

[namespace]
default = "my_game"

[writers]
"my_game" = ["my_game-actions"]
```

## Starter Template Contents

The starter template includes:

### Models (`src/models.cairo`)
- `Position` model with player key and Vec2 coordinates
- `Moves` model tracking remaining moves and direction
- `Direction` enum

### Systems (`src/systems/actions.cairo`)
- `spawn` function to initialize player state
- `move` function to update player position
- Example event emission

### Tests (`src/tests/test_world.cairo`)
- Test world setup with `spawn_test_world`
- Integration tests for spawn and move

## Development Workflow

1. **Initialize project:**
   ```bash
   sozo init my-game
   cd my-game
   ```

2. **Start Katana:**
   ```bash
   katana --dev --dev.no-fee
   ```

3. **Build and deploy:**
   ```bash
   sozo build && sozo migrate
   ```

4. **Test your system:**
   ```bash
   sozo execute my_game-actions spawn
   ```

5. **Run tests:**
   ```bash
   sozo test
   ```

## Customization

After initialization, customize your project:

1. **Add models:** Create new model structs in `src/models.cairo` or separate files
2. **Add systems:** Create new contract modules in `src/systems/`
3. **Update permissions:** Edit `[writers]` in `dojo_dev.toml`
4. **Add dependencies:** Edit `[dependencies]` in `Scarb.toml`

## Next Steps

After initialization:
1. Use `dojo-model` skill to add game state models
2. Use `dojo-system` skill to implement game logic
3. Use `dojo-test` skill to write tests
4. Use `dojo-deploy` skill to deploy your world

## Related Skills

- **dojo-model**: Add models to your project
- **dojo-system**: Add systems to your project
- **dojo-config**: Modify configuration
- **dojo-deploy**: Deploy your project

More from dojoengine/book

SkillDescription
dojo-clientIntegrate Dojo with game clients for JavaScript, Unity, Unreal, Rust, and other platforms. Generate typed bindings and connection code. Use when connecting frontends or game engines to your Dojo world.
dojo-configConfigure Scarb.toml, dojo profiles, world settings, and dependencies. Use when setting up project configuration, managing dependencies, or configuring deployment environments.
dojo-deployDeploy Dojo worlds to local Katana, testnet, or mainnet. Configure Katana sequencer and manage deployments with sozo. Use when deploying your game or starting local development environment.
dojo-indexerSet up and configure Torii indexer for GraphQL queries, gRPC subscriptions, and SQL access. Use when indexing your deployed world for client queries or real-time updates.
dojo-migrateManage world migrations, handle breaking changes, and upgrade Dojo versions. Use when updating deployed worlds, migrating to new versions, or handling schema changes.
dojo-modelCreate Dojo models for storing game state with proper key definitions, trait derivations, and ECS patterns. Use when defining game entities, components, or state structures.
dojo-reviewReview Dojo code for best practices, common mistakes, security issues, and optimization opportunities. Use when auditing models, systems, tests, or preparing for deployment.
dojo-systemCreate Dojo systems that implement game logic, modify model state, and handle player actions. Use when implementing game mechanics, player commands, or automated logic.
dojo-testWrite tests for Dojo models and systems using spawn_test_world, cheat codes, and assertions. Use when testing game logic, verifying state changes, or ensuring system correctness.
dojo-tokenImplement, deploy, and index ERC20 and ERC721 tokens in Dojo. Use when adding token contracts, deploying them, or configuring Torii to index balances and transfers.