CtrlK
BlogDocsLog inGet started
Tessl Logo

dojo-deploy

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.

Install with Tessl CLI

npx tessl i github:dojoengine/book --skill dojo-deploy
What are skills?

93

Does it follow best practices?

Validation for skill structure

SKILL.md
Review
Evals

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_<profile>.json)
  • World address recorded

Post-Deployment

  • Deployment verified (execute systems, query models)
  • Torii indexer configured (dojo-indexer skill)
  • Client connected (dojo-client skill)
  • World permissions verified (dojo-world skill)

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:

  1. Copy the script to your project: cp deploy_local.sh your-project/scripts/
  2. Adjust configuration variables (profile name, URLs) as needed
  3. 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:

  1. Checks for required tools (katana, sozo, torii, jq)
  2. Starts Katana with health checking
  3. Builds and deploys contracts
  4. Extracts addresses from the manifest
  5. Starts Torii indexer
  6. 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_<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 build before migrating
  • Check Scarb.toml for correct Dojo version
  • Clear target/ and rebuild

"Insufficient funds"

"Profile not found"

  • Ensure dojo_<profile>.toml exists
  • Check spelling matches the --profile flag

Network Information

Katana (Local)

  • RPC: http://localhost:5050
  • Pre-funded accounts printed on startup

Sepolia (Testnet)

Mainnet

Next Steps

After deployment:

  1. Use dojo-indexer skill to set up Torii
  2. Use dojo-client skill to connect frontend
  3. Use dojo-world skill to configure permissions
  4. Use dojo-migrate skill 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
Repository
dojoengine/book
Last updated
Created

Is this your skill?

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.