con un clic
dojo-config
// Configure Scarb.toml, dojo profiles, world settings, and dependencies. Use when setting up project configuration, managing dependencies, or configuring deployment environments.
// Configure Scarb.toml, dojo profiles, world settings, and dependencies. Use when setting up project configuration, managing dependencies, or configuring deployment environments.
Integrate 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.
Deploy 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.
Create Dojo models for storing game state with proper key definitions, trait derivations, and ECS patterns. Use when defining game entities, components, or state structures.
Create Dojo systems that implement game logic, modify model state, and handle player actions. Use when implementing game mechanics, player commands, or automated logic.
Implement, deploy, and index ERC20 and ERC721 tokens in Dojo. Use when adding token contracts, deploying them, or configuring Torii to index balances and transfers.
Set 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.
| name | dojo-config |
| description | Configure Scarb.toml, dojo profiles, world settings, and dependencies. Use when setting up project configuration, managing dependencies, or configuring deployment environments. |
| allowed-tools | Read, Write, Edit, Glob |
Manage Dojo project configuration including Scarb.toml, deployment profiles, and world settings.
Manages configuration files:
Scarb.toml - Package manifest and dependenciesdojo_dev.toml - Local development profiledojo_<profile>.toml - Other environment profilesInteractive mode:
"Update my Dojo configuration"
I'll ask about:
Direct mode:
"Add the Origami library to my dependencies"
"Configure production deployment for Sepolia"
Dojo projects use two types of configuration files:
Scarb.toml - Project ManifestDefines project dependencies and build settings:
[package]
cairo-version = "2.12.2"
name = "my-dojo-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_<profile>.toml - Profile ConfigurationProfile-specific deployment settings.
Dojo looks for dojo_dev.toml by default.
[world]
name = "My Game"
description = "An awesome on-chain game"
seed = "my-unique-seed"
cover_uri = "file://assets/cover.png"
icon_uri = "file://assets/icon.png"
[env]
rpc_url = "http://localhost:5050/"
account_address = "0x127fd..."
private_key = "0xc5b2f..."
[namespace]
default = "my_game"
[writers]
"my_game" = ["my_game-actions"]
[owners]
"my_game" = ["my_game-admin"]
Dojo uses profiles to manage different environments:
# Use default 'dev' profile (dojo_dev.toml)
sozo build
sozo migrate
# Use specific profile (dojo_mainnet.toml)
sozo build --profile mainnet
sozo migrate --profile mainnet
Profile file naming: dojo_<profile>.toml
dojo_dev.toml - Development (default)dojo_staging.toml - Stagingdojo_mainnet.toml - Production[world]
name = "My Game" # Human-readable name
description = "A provable game" # Description
seed = "my-unique-seed" # Unique seed for address generation
cover_uri = "ipfs://Qm..." # Cover image (ipfs:// or file://)
icon_uri = "ipfs://Qm..." # Icon image
[world.socials]
x = "https://x.com/mygame"
discord = "https://discord.gg/mygame"
[env]
rpc_url = "http://localhost:5050/"
account_address = "0x127fd..."
private_key = "0xc5b2f..."
# Or use keystore for production:
# keystore_path = "/path/to/keystore"
world_address = "0x077c0..." # Set after first deployment
Namespaces organize your resources:
[namespace]
default = "my_game" # Default namespace for all resources
# Optional: Map specific resources to namespaces
mappings = { "weapons" = ["Sword", "Bow"], "characters" = ["Player", "Enemy"] }
Resources get tagged as <namespace>-<resource_name>.
Set up initial permissions at deployment time:
[writers]
# Namespace-level: actions can write to all resources in my_game
"my_game" = ["my_game-actions"]
# Resource-specific: movement can only write to Position
"my_game-Position" = ["my_game-movement"]
[owners]
# Namespace ownership
"my_game" = ["my_game-admin"]
[dependencies]
starknet = "2.12.2"
dojo = "1.7.1"
[dev-dependencies]
cairo_test = "2.12.2"
dojo_cairo_test = "1.7.1"
Origami (game utilities):
[dependencies]
origami_token = { git = "https://github.com/dojoengine/origami", tag = "v1.0.0" }
Alexandria (math utilities):
[dependencies]
alexandria_math = { git = "https://github.com/keep-starknet-strange/alexandria" }
When using external libraries with models:
[[target.starknet-contract]]
build-external-contracts = [
"dojo::world::world_contract::world",
"armory::models::m_Flatbow", # Format: <crate>::<path>::m_<ModelName>
]
[world]
name = "My Game (Dev)"
seed = "dev-my-game"
[env]
rpc_url = "http://localhost:5050/"
account_address = "0x127fd..."
private_key = "0xc5b2f..."
[namespace]
default = "dev"
[writers]
"dev" = ["dev-actions"]
[world]
name = "My Game"
seed = "prod-my-game"
description = "Production deployment"
cover_uri = "ipfs://YourCoverHash"
icon_uri = "ipfs://YourIconHash"
[env]
rpc_url = "https://api.cartridge.gg/x/starknet/mainnet"
account_address = "0x..."
keystore_path = "~/.starknet_accounts/mainnet.json"
[namespace]
default = "game"
[writers]
"game" = ["game-actions"]
[owners]
"game" = ["game-admin"]
Never commit private keys. Use .gitignore:
# Ignore sensitive configs
dojo_mainnet.toml
dojo_*_secrets.toml
# Keep development config
!dojo_dev.toml
Use keystore for production:
[env]
keystore_path = "~/.starknet_accounts/mainnet.json"
# Instead of: private_key = "0x..."
"Profile not found":
dojo_<profile>.toml exists in project root--profile flag"World not found":
world_address in [env] after first deployment"Account not found":
After configuration:
dojo-deploy skill to deploy with your configdojo-migrate skill when updating deploymentsdojo-world skill to manage runtime permissions