Colyseus WebGL Multiplayer
Technical Evaluation Project • Browser Multiplayer • Real-Time Sync
Unity
Colyseus
Node.js
WebGL
Web Hosted
Technical evaluation project — built to compare Colyseus against
Photon and Socket.IO for real-time multiplayer sync. Includes player movement,
room create/join, multiplayer sync, basic animations, and skin switching.
Not a shipped commercial title.
Project Overview
A server-authoritative browser multiplayer prototype built to directly evaluate
Colyseus as a networking backend, comparing it against Photon and
Socket.IO for real-time state synchronization in a WebGL-hosted Unity build.
My Role & Responsibilities
- Built the Colyseus room lifecycle — create, join, and state sync — on a Node.js backend
- Implemented synchronized player movement and animation state across clients
- Built a skin-switching system replicated in real time to all connected clients
- Deployed the Unity WebGL frontend and Node.js/Colyseus backend as two separate free-tier services
Engineering & System Design
Server-Authoritative State Sync
Colyseus's room-based state synchronization was used to replicate player position,
animation state, and skin selection to every connected client, with the server as
the single source of truth for room state.
Why Evaluate Colyseus Specifically
Having already shipped with Photon PUN2 and built custom Socket.IO backends, this
project was a deliberate side-by-side comparison — testing Colyseus's built-in room
and state-sync abstractions against the more manual control required by Socket.IO
and the room/matchmaking model Photon provides out of the box.
Impact & Results
- Working real-time multiplayer sync (movement, animation, skins) fully in-browser
- Hands-on comparison data across three different multiplayer networking approaches
- A live, clickable WebGL proof-of-concept — no NDA, fully open source
Gameplay & Source
💻 GitHub Repository
🌐 Live Playable Demo
⚠️ Hosted on free-tier infrastructure — if idle, the server may take 30–50 seconds
to wake on first load. Refresh if the initial connection times out.