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.tomlwith Dojo dependencies - •
dojo_dev.tomlfor 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.
Interactive mode:
code
"Create a new Dojo project called my-game"
Project Structure
After initialization:
code
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)
- •
Positionmodel with player key and Vec2 coordinates - •
Movesmodel tracking remaining moves and direction - •
Directionenum
Systems (src/systems/actions.cairo)
- •
spawnfunction to initialize player state - •
movefunction 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
- •
Initialize project:
bashsozo init my-game cd my-game
- •
Start Katana:
bashkatana --dev --dev.no-fee
- •
Build and deploy:
bashsozo build && sozo migrate
- •
Test your system:
bashsozo execute my_game-actions spawn
- •
Run tests:
bashsozo test
Customization
After initialization, customize your project:
- •Add models: Create new model structs in
src/models.cairoor separate files - •Add systems: Create new contract modules in
src/systems/ - •Update permissions: Edit
[writers]indojo_dev.toml - •Add dependencies: Edit
[dependencies]inScarb.toml
Next Steps
After initialization:
- •Use
dojo-modelskill to add game state models - •Use
dojo-systemskill to implement game logic - •Use
dojo-testskill to write tests - •Use
dojo-deployskill 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