deploy-worlds
Deploy a Decentraland scene to a World (personal 3D space using a DCL NAME or ENS domain). Use when the user wants to deploy to a World or use a DCL NAME/ENS domain. Do NOT use for Genesis City LAND deployment (see deploy-scene).
How do I install this agent skill?
npx skills add https://github.com/decentraland/sdk-skills --skill deploy-worldsIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill provides instructions and tools for deploying 3D scenes to Decentraland Worlds. It uses official Decentraland infrastructure, trusted repositories, and standard development tools without any detected malicious patterns.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
Deploying to Decentraland Worlds
Not installed inside the Creator Hub agent. The Creator Hub's skill installer denylists this skill, and because the directory holds nothing but
SKILL.mdit is skipped entirely — it never reaches the app's embedded AI assistant. The Creator Hub owns publishing through its own UI. If you are the Creator Hub assistant and a user asks to publish, point them at the app's Publish flow. Outside the Creator Hub (Claude Code, Cursor, an SDK agent) the skill works normally.
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).
Storage Budget
Scenes deployed to Worlds count against a storage budget shared across all Worlds owned by the same wallet. The budget is calculated dynamically from the wallet's holdings:
- Each Decentraland NAME owned grants 100 MB (as well as a World).
- Each LAND parcel owned grants an additional 100 MB.
- Every 2,000 MANA held in the wallet grants another 100 MB.
- ENS-domain Worlds have a fixed limit of 36 MB that cannot be expanded.
The budget can be distributed across multiple Worlds however the user likes. Check usage in the Manage section of the Creator Hub (click View Details for a breakdown), or in the Worlds tab of the Builder.
If the budget is exceeded (e.g. after selling/transferring assets), there is a 48-hour grace period to free space before Worlds become inaccessible. Regain access by acquiring more MANA/NAMEs/LAND or undeploying scenes.
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
}
}
}
Discovery metadata
Worlds are listed on Places unless opted out, so the same metadata that drives discovery in Genesis City applies here. Before publishing, verify all four are set — fill in what you can infer from the scene, ask the user only for the rest:
display.title— the World's namedisplay.description— one or two sentences on what it istags— root-level array, 1-3 Places-dApp categories from the predefined list:"art","game","casino","social","music","fashion","crypto","education","shop","business","sports","parkour"display.navmapThumbnail—.png/.jpg, 16:9, 1920x1080 px recommended; keep essential content inside the central 1080x1080 square, which is what square crops of the thumbnail show. Verify the file exists and check its size withsips -g pixelWidth -g pixelHeight <path>(macOS) ormagick identify -format "%wx%h\n" <path>. Capture it yourself with the unity-explorer MCP rather than asking the user — full spec and procedure in the deploy-scene skill ("Thumbnail image")
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.
Files matched by .dclignore (at the project root) are excluded from the upload — keep working files like Blender sources, concept art, and markdown docs listed there so the World stays light. See the .dclignore section in the deploy-scene skill.
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",
"navmapThumbnail": "images/thumbnail.png"
},
"tags": ["social"],
"scene": {
"parcels": ["0,0"],
"base": "0,0"
},
"main": "bin/index.js",
"worldConfiguration": {
"name": "my-name.dcl.eth"
}
}
World Configuration Options
Beyond name and placesConfig, worldConfiguration supports skybox and minimap customization:
"worldConfiguration": {
"name": "my-name.dcl.eth",
"skyboxConfig": {
"fixedTime": 43200
},
"placesConfig": {
"optOut": false
}
}
skyboxConfig.fixedTime— verified against the engine test scenes and current docs.skyboxConfig.textures,miniMapConfig(visible/dataImage/estateImage) — [UNVERIFIED: not present in the engine test scenes or the current scene-metadata docs; confirm against js-sdk-toolchain scene schema before relying on them].
skyboxConfig.fixedTime values:
Values are seconds since midnight; a full day is 86400.
| Value | Time of day |
|---|---|
0 | Midnight |
21600 | 6 AM (sunrise) |
43200 | Noon |
64800 | 6 PM (sunset) |
86400 | Full day (maximum) |
Any value above 86400 is interpreted as midnight. Omit fixedTime for a dynamic day/night cycle.
worldConfiguration.skyboxConfig.fixedTime is verified working in the engine test scenes, and takes precedence over a top-level skyboxConfig.fixedTime if both are present. See the lighting-environment skill for runtime control (the SkyboxTime component, which overrides either JSON value).
Multi-Scene Worlds
A World can host multiple independent scenes, each at different coordinates. The World grows and shrinks dynamically as scenes are added or removed, and gaps between scenes are filled with environment.
Enable via Creator Hub: When publishing, toggle Multi-Scene World (advanced) on the first publish.
Deploy via CLI:
npm run deploy -- --multi-scene --target-content https://worlds-content-server.decentraland.org
After enabling, the World Owner can:
- Publish additional scenes to different parcels of the same World
- Add Collaborators with deploy rights (all parcels or specific coordinates)
- Manage layout via the Layout tab in World Settings (remove scenes, view the World map)
- Set a World Spawn Position (which parcel players enter on)
Collaborator note: Collaborators with "All Parcels" access can overwrite any scene in the World, including those published by the owner.
To deploy as a collaborator, use the normal deploy process — the publishing flow will let you select only the parcels you have access to.
Post-Publish Conversion
Worlds go through the same asset bundle conversion as Genesis City scenes — 3D models are compressed server-side after each publish. Conversion usually takes seconds (longer for very large scenes or busy servers); the Jump In button appears as soon as the scene is playable. A conversion still running after a couple of minutes is a failure signal, not normal queuing. For conversion status endpoints and the /detectabs chat command, see the deploy-scene skill ("Post-Publish: Asset Bundle Conversion"). Use Compress Assets (Creator Hub Play Options > Desktop Client) or --asset-bundles in preview to catch conversion issues before publishing.
Anyone who already loaded the World this session keeps seeing the cached version until they fully close and re-enter Decentraland — a scene reload is not enough.
World metadata vs scene metadata
A World and each scene published to it carry two separate sets of name, description, and thumbnail. Getting this wrong is the usual cause of "I changed the description and Places still shows the old one".
| Scene metadata | World metadata | |
|---|---|---|
| Stored in | the scene project's scene.json | the World itself |
| Edited via | scene settings in the Scene Editor | the World's Settings, under the Creator Hub's Manage tab |
| Uploaded | with the scene, on every publish | only when you edit it there (or as described below) |
| Shown in | the scene | Decentraland Places and the in-world World information |
How they interact depends on how many scenes the World holds:
- Empty World — publishing the first scene fills the World's metadata from the scene's.
- Single-scene World — every publish overwrites the World's metadata with the scene's. So edits made in the Manage tab are silently reverted on the next publish; edit the scene's settings instead. In practice you can ignore World metadata entirely here.
- Multi-scene World — the two are fully independent. Publishing a scene never changes World metadata, and the Manage tab is the only place to edit it.
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" | Scene exceeds the World storage budget (see Storage Budget above) | First add all working files (Blender/FBX sources, concept art, docs) to .dclignore at the project root so they aren't uploaded — see the .dclignore section in deploy-scene. Then reduce asset sizes. Check remaining budget in the Creator Hub Manage tab or the Builder Worlds tab |
| 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 |
Example scenes
- https://github.com/decentraland/sdk7-test-scenes/tree/main/scenes/3,0-skybox-world-json — a World scene setting a fixed skybox time via
worldConfiguration.skyboxConfig.fixedTime, and reading it back withgetSceneInformation.
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
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/decentraland/sdk-skills/deploy-worlds">View deploy-worlds on skillZs</a>