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
Quick Start (Development)
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-reviewskill) - [ ] Configuration set (
dojo-configskill) - [ ] 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_<profile>.json) - [ ] World address recorded
Post-Deployment
- [ ] Deployment verified (execute systems, query models)
- [ ] Torii indexer configured (
dojo-indexerskill) - [ ] Client connected (
dojo-clientskill) - [ ] World permissions verified (
dojo-worldskill)
Development Workflow
Terminal 1: Start Katana
katana --dev --dev.no-fee
Terminal 2: Build and deploy
sozo build && sozo migrate
Terminal 3: Start Torii
torii --world <WORLD_ADDRESS> --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 profileRPC_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_<profile>.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 buildbefore 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_<profile>.tomlexists - Check spelling matches the
--profileflag
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-indexerskill to set up Torii - Use
dojo-clientskill to connect frontend - Use
dojo-worldskill to configure permissions - Use
dojo-migrateskill for updates
Related Skills
- dojo-config: Configure deployment profiles
- dojo-migrate: Update deployments
- dojo-indexer: Index deployed world
- dojo-client: Connect clients to deployment
- dojo-world: Manage world permissions