Dojo Deployment Deploy your Dojo world to local Katana sequencer, Sepolia testnet, or Starknet mainnet. When to Use This Skill "Deploy my world to Katana" "Start Katana sequencer" "Deploy to Sepolia testnet" "Deploy to mainnet" What This Skill Does Handles deployment workflows: Start and configure Katana sequencer Deploy worlds with sozo migrate Verify deployments Manage world addresses Configure network settings Quick Start Local development: "Start Katana and deploy my world" Testnet deployment: "Deploy my world to Sepolia" Mainnet deployment: "Deploy to Starknet mainnet" Deployment Workflow 1. Local Development (Katana) Start Katana: katana --dev --dev.no-fee This launches Katana with: RPC server at http://localhost:5050 10 pre-funded accounts Instant block mining Gas fees disabled Build and deploy: sozo build && sozo migrate Verify:
Preview deployment
sozo inspect
Execute a system
sozo execute dojo_starter-actions spawn 2. Testnet Deployment (Sepolia) Configure 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 sepolia 3. Mainnet Deployment Configure 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 mainnet Katana Configuration See the Katana configuration guide for all available TOML options. TOML Configuration 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.toml Cartridge Controller on Katana When 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 genesis
Note: paymaster = true implicitly enables controllers = true . See the Controller setup docs for client-side configuration. Quick Start (CLI flags) katana --dev --dev.no-fee Mining Modes Instant (default): katana --dev --dev.no-fee Mines block immediately on transaction. Interval: katana --block-time 10000 Mines block every 10 seconds. Persistent Storage katana --db-dir ./katana-db Network Forking Fork Starknet mainnet: katana --fork.provider https://api.cartridge.gg/x/starknet/mainnet Fork at specific block: katana --fork.provider https://api.cartridge.gg/x/starknet/mainnet --fork.block 1000000 Sozo Commands Build sozo build Inspect (Preview Deployment)
See what will be deployed/changed
sozo inspect Migrate (Deploy)
Deploy with default dev profile
sozo migrate
Deploy with specific profile
sozo migrate --profile sepolia Execute System
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
1
Deployment Checklist
Pre-Deployment
All tests passing (
sozo test
)
Code reviewed (
dojo-review
skill)
Configuration set (
dojo-config
skill)
Target network funded (for gas)
Private key secured (not committed)
Deployment
Build succeeds (
sozo build
)
Inspect looks correct (
sozo inspect
)
Migration succeeds (
sozo migrate
)
Manifest generated (check
manifest_
--indexing.controllers Sample Deploy Script This 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: Copy the script to your project: cp deploy_local.sh your-project/scripts/ Adjust configuration variables (profile name, URLs) as needed Make executable: chmod +x scripts/deploy_local.sh Run:
Default dev profile
./scripts/deploy_local.sh
Specific profile
PROFILE
- staging ./scripts/deploy_local.sh
- What it does:
- Checks for required tools (katana, sozo, torii, jq)
- Starts Katana with health checking
- Builds and deploys contracts
- Extracts addresses from the manifest
- Starts Torii indexer
- Cleans up all services on exit (Ctrl+C)
- Customization points:
- PROFILE
-
- Default build/deploy profile
- RPC_URL
-
- Katana endpoint (default:
- http://localhost:5050
- )
- TORII_URL
- Torii endpoint (default:
http://localhost:8080
)
Add project-specific post-deploy steps (e.g., seeding data, running migrations)
Slot Deployment (Remote)
Slot
provides hosted Katana and Torii instances.
Authentication
slot auth login
Katana on Slot
Optimistic mode (simplest):
slot deployments create
<
PROJECT_NAME
katana --optimistic With configuration file: slot deployments create < PROJECT_NAME
katana --config katana.toml See the Katana configuration guide for TOML options. Torii on Slot 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. Useful Commands
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
torii Manifest File After deployment, manifest_
.json contains: World address Model addresses and class hashes System/contract addresses ABI information Example: { "world" : { "address" : "0x..." , "class_hash" : "0x..." } , "models" : [ { "tag" : "dojo_starter-Position" , "address" : "0x..." } ] , "contracts" : [ { "tag" : "dojo_starter-actions" , "address" : "0x..." } ] } Troubleshooting "Account not found" Ensure account is deployed on target network Check account address in profile config Verify account has funds for gas "Class hash mismatch" Run sozo build before migrating Check Scarb.toml for correct Dojo version Clear target/ and rebuild "Insufficient funds" Fund account with ETH/STRK for gas Use Sepolia faucet: https://faucet.starknet.io "Profile not found" Ensure dojo_ .toml exists Check spelling matches the --profile flag Network Information Katana (Local) RPC: http://localhost:5050 Pre-funded accounts printed on startup Sepolia (Testnet) RPC: https://api.cartridge.gg/x/starknet/sepolia Faucet: https://faucet.starknet.io Explorer: https://sepolia.voyager.online Mainnet RPC: https://api.cartridge.gg/x/starknet/mainnet Explorer: https://voyager.online Next Steps After deployment: Use dojo-indexer skill to set up Torii Use dojo-client skill to connect frontend Use dojo-world skill to configure permissions Use dojo-migrate skill for updates