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"
}
Scene Tipping (creator)
Let visitors send MANA tips to the scene creator. Add a creator field with the recipient's wallet address:
{
"creator": "0x1234567890123456789012345678901234567890"
}
When set, a piggy-bank icon appears in the top-left for visitors. Clicking it opens a MANA tip modal. If the address is linked to a Decentraland NAME, the name is shown in the modal. Creators receive an in-app notification for each tip. Also configurable via Creator Hub → scene Settings → Details → Creator wallet address.
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)
Scan to join WeChat group