skillZs
★ LIVE SKILL TAGS ★
>>> LIVE SKILLS INDEX <<<
* OPEN SOURCE *
NO LOGIN, NO TRACKING
※ REAL INSTALL DATA ※
← back to all skills
decentraland/sdk-skills222 installs

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-worlds
view source ↗

Is 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.md it 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 name
  • display.description — one or two sentences on what it is
  • tags — 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 with sips -g pixelWidth -g pixelHeight <path> (macOS) or magick 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

  1. Open the scene project in Creator Hub
  2. Click the Publish button (top-right corner)
  3. Select PUBLISH TO WORLD
  4. 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.

ValueTime of day
0Midnight
216006 AM (sunrise)
43200Noon
648006 PM (sunset)
86400Full 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 metadataWorld metadata
Stored inthe scene project's scene.jsonthe World itself
Edited viascene settings in the Scene Editorthe World's Settings, under the Creator Hub's Manage tab
Uploadedwith the scene, on every publishonly when you edit it there (or as described below)
Shown inthe sceneDecentraland 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

ErrorCauseSolution
"NAME not found" or "NAME not owned"The wallet signing the deployment doesn't own the NAME/ENS in worldConfiguration.nameVerify NAME ownership at https://builder.decentraland.org/names. The wallet used for signing must own the exact NAME
ENS resolution failsENS domain not registered or expiredCheck 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 emptymain field misconfiguredEnsure main is "bin/index.js" and code compiles
World not showing on PlacesPropagation delayWait a few minutes after deployment. If opted out via placesConfig.optOut, it won't appear

Example scenes

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

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>