authoritative-server

Build multiplayer Decentraland scenes with a headless server controlling authoritative game state.

1|Updated Apr 4, 2026
One-click install
npx skills add https://github.com/stom66/dcl-bowling --skill authoritative-server-stom66
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: authoritative-server
Source: https://github.com/stom66/dcl-bowling/tree/main/agent/skills/authoritative-server
Command: npx skills add https://github.com/stom66/dcl-bowling --skill authoritative-server-stom66

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires @dcl/sdk, @dcl/js-runtime, @dcl/asset-packs, and includes references (resource) components.

What problem does it solve? Multiplayer Decentraland scenes built on plain CRDT sync let any client write shared state, which enables cheating, desynchronized gameplay, and no safe place for secrets or persistent data. This Skill guides you through building scenes on the Decentraland Multiplayer Server (formerly Authoritative Server), where a headless server validates every change, owns game state, and persists data across sessions. ## Core Features & Use Cases - Server-authoritative state with anti-cheat validation: Define synced components guarded by validateBeforeChange(), verify player proximity server-side via PlayerIdentityData and Transform, and reject client writes to protected entities. - Client-server messaging and persistence: Use registerMessages() for typed bidirectional messages, Storage for scene and per-player persistence at checkpoints, and EnvVar for server-only secrets and live-tunable parameters. - Production-grade lifecycle handling: Implement server liveness heartbeats for cold starts, per-player synced entity patterns that avoid id collisions, and respect runtime resource limits like the 40 in-flight host-call cap. - Use Case: Build a competitive leaderboard scene where clients send claim actions, the headless server validates proximity to a score orb, increments scores itself, and persists per-player totals that survive server restarts. ## Quick Start Ask the AI to set up a Decentraland scene with the authoritative multiplayer server, including isServer() branching, a validated synced game-state component, and a join message flow.

Frequently Asked Questions about authoritative-server

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I build an authoritative multiplayer server for a Decentraland scene?▼

Install @dcl/sdk@auth-server and @dcl/js-runtime@auth-server, then branch your entry point with isServer() from @dcl/sdk/network. The SDK auto-adds authoritativeMultiplayer: true to scene.json on build, enabling the headless server that validates state and syncs it to clients.

How do I prevent cheating in a Decentraland multiplayer scene?▼

Use validateBeforeChange() on synced components so only the server can write them, and validate actions server-side by reading real player positions via PlayerIdentityData and Transform. Never trust client-reported positions or scores.

What is the difference between authoritative server and CRDT multiplayer in Decentraland?▼

CRDT multiplayer (multiplayer-sync) is serverless: every client syncs its own entities with no central authority. The authoritative server runs a headless server that owns state, validates writes, and provides Storage and EnvVar APIs, at the cost of cold-start latency.

Why does my Decentraland server scene not respond when the first player joins?▼

The headless server shuts down when empty and cold-starts in about 15 seconds in production. isStateSyncronized() only confirms the room connection, so implement a server heartbeat in a synced component and track client-observed change time to detect true liveness.

Why does Storage.set silently fail on the Decentraland server?▼

The server isolate caps in-flight host calls at 40, and excess Storage writes resolve to false instead of throwing. Keep working state in memory, persist only at checkpoints like game over or player leave, and always check the boolean return value.

Can I use MessageBus on a Decentraland authoritative server?▼

No. MessageBus subscribes to a comms event the headless server runtime does not implement, failing with RemoteError: not implemented. Construct it only inside the client branch and use registerMessages() with room.send for all client-server communication.