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.
93
Does it follow best practices?
Validation for skill structure
Deploy your Dojo world to local Katana sequencer, Sepolia testnet, or Starknet mainnet.
Handles deployment workflows:
sozo migrateLocal development:
"Start Katana and deploy my world"Testnet deployment:
"Deploy my world to Sepolia"Mainnet deployment:
"Deploy to Starknet mainnet"Start Katana:
katana --dev --dev.no-feeThis launches Katana with:
http://localhost:5050Build and deploy:
sozo build && sozo migrateVerify:
# Preview deployment
sozo inspect
# Execute a system
sozo execute dojo_starter-actions spawnConfigure profile:
# dojo_sepolia.toml
[world]
name = "My Game"
seed = "my-game-sepolia"
[env]
rpc_url = "https://api.cartridge.gg/x/starknet/sepolia"
account_address = "YOUR_ACCOUNT"
private_key = "YOUR_KEY"
[namespace]
default = "my_game"
[writers]
"my_game" = ["my_game-actions"]Deploy:
sozo build --profile sepolia
sozo migrate --profile sepoliaConfigure profile:
# dojo_mainnet.toml
[world]
name = "My Game"
seed = "my-game-mainnet"
[env]
rpc_url = "https://api.cartridge.gg/x/starknet/mainnet"
account_address = "YOUR_ACCOUNT"
keystore_path = "~/.starknet_accounts/mainnet.json"
[namespace]
default = "my_game"
[writers]
"my_game" = ["my_game-actions"]Deploy:
sozo build --profile mainnet
sozo migrate --profile mainnetSee the Katana configuration guide for all available TOML options.
Most Dojo projects use a katana.toml config file rather than CLI flags.
Recommended starter config:
[dev]
dev = true
no_fee = true
[cartridge]
controllers = true
[server]
http_cors_origins = "*"Start with config file:
katana --config katana.tomlWhen using Cartridge Controller locally, Katana must deploy Controller contracts at genesis. Without this, Controller transactions fail with "Requested contract address ... is not deployed".
# katana.toml
[cartridge]
paymaster = true # Enables paymaster AND deploys Controller contracts at genesisNote: paymaster = true implicitly enables controllers = true.
See the Controller setup docs for client-side configuration.
katana --dev --dev.no-feeInstant (default):
katana --dev --dev.no-feeMines block immediately on transaction.
Interval:
katana --block-time 10000Mines block every 10 seconds.
katana --db-dir ./katana-dbFork Starknet mainnet:
katana --fork.provider https://api.cartridge.gg/x/starknet/mainnetFork at specific block:
katana --fork.provider https://api.cartridge.gg/x/starknet/mainnet --fork.block 1000000sozo build# See what will be deployed/changed
sozo inspect# Deploy with default dev profile
sozo migrate
# Deploy with specific profile
sozo migrate --profile sepolia# Call a system function
sozo execute <CONTRACT_TAG> <FUNCTION> [ARGS...]
# Example: spawn
sozo execute dojo_starter-actions spawn
# Example: move with argument
sozo execute dojo_starter-actions move 1sozo test)dojo-review skill)dojo-config skill)sozo build)sozo inspect)sozo migrate)manifest_<profile>.json)dojo-indexer skill)dojo-client skill)dojo-world skill)Terminal 1: Start Katana
katana --dev --dev.no-feeTerminal 2: Build and deploy
sozo build && sozo migrateTerminal 3: Start Torii
torii --world <WORLD_ADDRESS> --indexing.controllersThis skill includes deploy_local.sh, a template script for automated local development.
Copy it into your project's scripts/ directory and customize it for your needs.
Setup:
cp deploy_local.sh your-project/scripts/chmod +x scripts/deploy_local.shRun:
# Default dev profile
./scripts/deploy_local.sh
# Specific profile
PROFILE=staging ./scripts/deploy_local.shWhat it does:
Customization points:
PROFILE: Default build/deploy profileRPC_URL: Katana endpoint (default: http://localhost:5050)TORII_URL: Torii endpoint (default: http://localhost:8080)Slot provides hosted Katana and Torii instances.
slot auth loginOptimistic mode (simplest):
slot deployments create <PROJECT_NAME> katana --optimisticWith configuration file:
slot deployments create <PROJECT_NAME> katana --config katana.tomlSee the Katana configuration guide for TOML options.
Create a torii.toml with your world address and RPC endpoint, then deploy:
slot deployments create <PROJECT_NAME> torii --config torii.toml --version <DOJO_VERSION>See the dojo-indexer skill for full Torii configuration details.
# Stream logs
slot deployments logs <PROJECT_NAME> katana -f
slot deployments logs <PROJECT_NAME> torii -f
# Delete a deployment
slot deployments delete <PROJECT_NAME> katana
slot deployments delete <PROJECT_NAME> toriiAfter deployment, manifest_<profile>.json contains:
Example:
{
"world": {
"address": "0x...",
"class_hash": "0x..."
},
"models": [
{
"tag": "dojo_starter-Position",
"address": "0x..."
}
],
"contracts": [
{
"tag": "dojo_starter-actions",
"address": "0x..."
}
]
}sozo build before migratingtarget/ and rebuilddojo_<profile>.toml exists--profile flaghttp://localhost:5050https://api.cartridge.gg/x/starknet/sepoliahttps://api.cartridge.gg/x/starknet/mainnetAfter deployment:
dojo-indexer skill to set up Toriidojo-client skill to connect frontenddojo-world skill to configure permissionsdojo-migrate skill for updates3c1874f
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.