Skip to content
dojo-setup logo

Dojo.js SDK Setup

dojo-setup

Use when setting up dojo.js SDK in a frontend project. Triggers: setup dojo, initialize dojo, configure dojo, dojoengine setup, sdk init, DojoSdkProvider, world address, torii url, dojo config

SKILL.md

Full skill instructions

Dojo.js SDK Setup

When to Use

Use this skill when:

  • Setting up dojo.js in a new frontend project
  • Configuring the SDK with world address and Torii URL
  • Setting up the React provider hierarchy
  • Generating TypeScript types from ABIs

SDK Initialization

import { init } from "@dojoengine/​sdk";
import { DojoConfig } from "@dojoengine/​core";
import { schema } from "./​models.gen"; // Generated from ABI

const sdk = await init<typeof schema>({
    client: {
        worldAddress: "0x...",
        toriiUrl: "http://localhost:8080",
    },
    domain: {
        name: "MyGame",
        version: "1.0.0",
        chainId: "SN_MAIN", // or "SN_SEPOLIA"
    },
});

React Provider Setup

Note: masterAddress and masterPrivateKey are for local development only. In production, use wallet connections instead.

import { DojoSdkProvider } from "@dojoengine/​sdk/​react";
import { DojoConfig, DojoProvider } from "@dojoengine/​core";

const dojoConfig: DojoConfig = {
    manifest: manifest, // From manifest.json
    rpcUrl: process.env.VITE_RPC_URL || "http://localhost:5050",
    toriiUrl: process.env.VITE_TORII_URL || "http://localhost:8080",
    // For local development only - never hardcode in production
    masterAddress: process.env.VITE_MASTER_ADDRESS || "0x...",
    masterPrivateKey: process.env.VITE_MASTER_PRIVATE_KEY || "",
};

function App() {
    return (
        <DojoSdkProvider
            dojoConfig={dojoConfig}
            sdk={sdk}
            // clientFn is a user-provided factory to create your game client
            clientFn={(provider) => new GameClient(provider)}
        >
            {children}
        </​DojoSdkProvider>
    );
}

Environment Variables

VITE_WORLD_ADDRESS=0x...
VITE_TORII_URL=http://localhost:8080
VITE_RPC_URL=http://localhost:5050
VITE_CHAIN_ID=SN_SEPOLIA

Key Configuration Options

OptionDescription
worldAddressDeployed world contract address
toriiUrlTorii indexer URL (default: http://localhost:8080)
rpcUrlStarknet RPC URL
chainIdSN_MAIN, SN_SEPOLIA, or custom
manifestDojo manifest.json for contract ABIs

Using DojoContext

import { useDojoSDK } from "@dojoengine/​sdk/​react";

function GameComponent() {
    const { sdk, config, provider, useDojoStore } = useDojoSDK();
    // sdk: SDK instance for queries/​subscriptions
    // config: DojoConfig
    // provider: DojoProvider for contract calls
    // useDojoStore: Zustand store hook
}

Common Pitfalls

  1. Missing schema types: Generate types from ABI using @dojoengine/​core CLI
  2. CORS issues: Ensure Torii is configured to allow your frontend origin
  3. Wrong chain ID: Must match the deployed world's chain
  4. Provider hierarchy: DojoSdkProvider must wrap all Dojo-consuming components