deploy-scene
Deploying to Genesis City
Deploy to specific parcels you own or have permission to deploy to.
Use the /deploy command to deploy. It runs npx @dcl/sdk-commands deploy and handles the full process:
- Build the scene
- Upload assets to IPFS
- Deploy to the specified parcels
- Requires a wallet with LAND or deployment permissions
Deploying to a World instead? See the
deploy-worldsskill for Worlds deployment (personal spaces using DCL NAMEs or ENS domains).
Pre-Deployment Checklist
Before deploying, verify:
-
scene.json is valid:
ecs7: trueandruntimeVersion: "7"- Correct
parcelsmatching your LAND (for Genesis City) - Valid
baseparcel main: "bin/index.js"
-
Code compiles:
npx tsc --noEmit -
Scene previews correctly: Use the
previewtool to verify the scene works (ornpx @dcl/sdk-commands start --bevy-webmanually) -
Dependencies installed:
npm install -
Assets are within limits — see the optimize-scene skill for full limit formulas per parcel count (triangles, entities, materials, textures, height)
Deployment Process
Using CLI
# Build first
npx @dcl/sdk-commands build
# Deploy (will open browser for wallet connection)
npx @dcl/sdk-commands deploy
Using Creator Hub
- Open Creator Hub
- Select your scene
- Click "Publish"
- Connect wallet
- Confirm transaction
scene.json for Deployment
{
"ecs7": true,
"runtimeVersion": "7",
"display": {
"title": "My Awesome Scene",
"description": "A description for the marketplace",
"navmapThumbnail": "images/thumbnail.png"
},
"scene": {
"parcels": ["0,0", "0,1"],
"base": "0,0"
},
"main": "bin/index.js"
}
Spawn Points
Configure where players appear when entering the scene:
{
"spawnPoints": [
{
"name": "spawn1",
"default": true,
"position": { "x": [1, 5], "y": [0, 0], "z": [2, 4] },
"cameraTarget": { "x": 8, "y": 1, "z": 8 }
}
]
}
Position ranges (e.g., [1, 5]) spawn players randomly within the range. Use cameraTarget to orient the player's camera on spawn.
Troubleshooting
| Error | Cause | Solution |
|---|---|---|
| "You don't have permission to deploy" | Wallet doesn't own the target LAND/parcels | Verify LAND ownership on the marketplace, or get deployment permissions from the LAND owner |
| "Scene is too large" | Assets exceed parcel size limits | Check triangle count, file sizes, and texture counts against the limits table above. See optimize-scene skill |
| Wallet connection fails | Browser popup blocked or MetaMask locked | Allow popups, unlock MetaMask, refresh and try again |
| "Invalid scene.json" | Missing required fields or malformed JSON | Verify ecs7: true, runtimeVersion: "7", valid parcels array, and main: "bin/index.js" |
| Deploy succeeds but scene is empty | main field doesn't point to compiled output |
Ensure main is "bin/index.js" and run npx @dcl/sdk-commands build first |
| Catalyst rejection | Content violates Decentraland content policies | Review content guidelines at docs.decentraland.org |
Genesis City vs Worlds
| Genesis City | Worlds | |
|---|---|---|
| Requirement | Own LAND parcels | Own DCL NAME or ENS domain |
| Parcel limits | Enforced (entity/triangle budgets per parcel) | Not constrained by LAND |
| Visibility | Shown on the Genesis City map | Listed on Places page (opt-out available) |
| Deploy target | Default Catalyst network | --target-content https://worlds-content-server.decentraland.org |
| Best for | Permanent installations, high-traffic scenes | Testing, personal spaces, events |
Deploying to a World instead? See the deploy-worlds skill.
Best Practices
- Always preview locally before deploying
- Use a thumbnail image (
navmapThumbnail) for the Genesis City map - Write a clear description for discovery
- Test with multiple browser tabs to verify multiplayer behavior
- Keep scene load time under 15 seconds (optimize assets)
More from dcl-regenesislabs/opendcl
optimize-scene
Optimize Decentraland scene performance. Scene limit formulas (triangles, entities, materials, textures, height per parcel count), object pooling, LOD patterns, texture optimization, system throttling, and asset preloading. Use when the user wants to optimize, improve performance, fix lag, reduce load time, check limits, or reduce entity/triangle count. Do NOT use for deployment (see deploy-scene).
51game-design
Plan and design Decentraland games and interactive experiences. Scene limit formulas, performance budgets, texture requirements, asset preloading, state management patterns (module-level, component-based, state machines), object pooling, UX/UI guidelines, input design, and MVP planning. Use when the user wants game design advice, scene architecture, performance planning, or help structuring a game. Do NOT use for specific implementation (see add-interactivity, build-ui, multiplayer-sync).
30audio-video
Add sound effects, music, audio streaming, and video players to Decentraland scenes. Covers AudioSource (local files), AudioStream (streaming URLs), VideoPlayer (video surfaces), video events, and media permissions. Use when the user wants sound, music, audio, video screens, radio, or media playback. Do NOT use for 3D model animations (see animations-tweens).
30add-3d-models
Add 3D models (.glb/.gltf) to a Decentraland scene using GltfContainer. Covers loading, positioning, scaling, colliders, parenting, and browsing 5,700+ free assets from the OpenDCL catalog. Use when the user wants to add models, import GLB files, find free 3D assets, or set up model colliders. Do NOT use for materials/textures (see advanced-rendering) or model animations (see animations-tweens).
28nft-blockchain
NFT display and blockchain interaction in Decentraland. NftShape (framed NFT artwork), wallet checks (getPlayer, isGuest), signedFetch (authenticated requests), smart contract interaction (eth-connect, createEthereumProvider), and RPC calls. Use when the user wants NFTs, blockchain, wallet, smart contracts, Web3, crypto, or token gating. Do NOT use for player avatar data or emotes (see player-avatar).
27build-ui
Build 2D screen-space UI for Decentraland scenes using React-ECS (JSX). Create HUDs, menus, health bars, scoreboards, dialogs, buttons, inputs, and dropdowns. Use when the user wants screen overlays, on-screen UI, HUD elements, menus, or form inputs. Do NOT use for 3D in-world text (see advanced-rendering) or clickable 3D objects (see add-interactivity).
26