deploy-worlds
Deploying to Decentraland Worlds
Worlds are personal 3D spaces not tied to LAND. They have no parcel limitations and are automatically listed on the Places page.
Requirements
To publish to a World, the user must own either:
- A Decentraland NAME (e.g.,
my-name.dcl.eth) - An ENS domain (e.g.,
my-name.eth)
The wallet signing the deployment must own the NAME, or have been granted permission via Access Control Lists (ACL).
1. Configure scene.json
Add a worldConfiguration section to scene.json:
{
"worldConfiguration": {
"name": "my-name.dcl.eth"
}
}
The name field must match a Decentraland NAME or ENS domain owned by the deploying wallet.
Opt out of Places listing
All Worlds are automatically listed on the Places page. To opt out:
{
"worldConfiguration": {
"name": "my-name.dcl.eth",
"placesConfig": {
"optOut": true
}
}
}
2. Deploy
Use the /deploy command — it auto-detects the worldConfiguration in scene.json and deploys to the Worlds content server automatically.
Alternatively, deploy manually via CLI:
npx @dcl/sdk-commands deploy --target-content https://worlds-content-server.decentraland.org
This will prompt the user to sign the deployment with their wallet. Validations run automatically to allow or reject the scene.
Via Creator Hub
- Open the scene project in Creator Hub
- Click the Publish button (top-right corner)
- Select PUBLISH TO WORLD
- Choose which NAME or ENS domain to publish to
3. Access the World
After a successful deploy, the /deploy command outputs a visit URL automatically. The World is also accessible at:
https://decentraland.zone/bevy-web?realm=NAME.dcl.eth
From inside Decentraland, use the chatbox command:
/goto NAME.dcl.eth
Full scene.json Example
{
"ecs7": true,
"runtimeVersion": "7",
"display": {
"title": "My World",
"description": "A personal 3D space"
},
"scene": {
"parcels": ["0,0"],
"base": "0,0"
},
"main": "bin/index.js",
"worldConfiguration": {
"name": "my-name.dcl.eth"
}
}
Troubleshooting
| Error | Cause | Solution |
|---|---|---|
| "NAME not found" or "NAME not owned" | The wallet signing the deployment doesn't own the NAME/ENS in worldConfiguration.name |
Verify NAME ownership at https://builder.decentraland.org/names. The wallet used for signing must own the exact NAME |
| ENS resolution fails | ENS domain not registered or expired | Check ENS registration at https://app.ens.domains |
| "Scene too large" | World scenes have size limits even though parcels aren't constrained | Reduce asset sizes. Worlds still enforce file size and entity limits |
| Deploy succeeds but world is empty | main field misconfigured |
Ensure main is "bin/index.js" and code compiles |
| World not showing on Places | Propagation delay | Wait a few minutes after deployment. If opted out via placesConfig.optOut, it won't appear |
Deploying to Genesis City instead? See the deploy-scene skill.
Key Differences from Genesis City
- No parcel limitations — Worlds are not constrained by LAND ownership
- NAME/ENS required — must own a Decentraland NAME or ENS domain instead of LAND
- Different deploy target — uses
--target-content https://worlds-content-server.decentraland.org - Auto-listed on Places — unless opted out via
placesConfig.optOut
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