Colyseus v1.0 Roadmap
Colyseus is an independent open-source project that has been around since 2015. The project has been used in production by several indies and companies and has been battle-tested in many different scenarios. The project is currently stable, but there are still many features and improvements that we’d like to add.
Issue-level tracking lives in the 1.0 milestone on GitHub.
If you’d like to support the project, please consider sponsoring my work.
- Netcode:
- Stabilize the input and prediction tools that 0.18 introduced. Settle the public API, and replace the runtime warnings that guard today’s contracts with designs that resist misuse.
- Close the SDK gap. The native C core and Flutter are complete. The Godot bindings read fields by struct offset, and GameMaker has no documented input API.
- State Sync:
@colyseus/schema- Bidirectional schema instances:- Allow to send schema instance updates from client to server. 0.18 covers flat primitive fields through
defineInput(). Nested schemas and collections are not supported yet. - Wild idea: support RPC calls via schema instances (?)
- Allow to send schema instance updates from client to server. 0.18 covers flat primitive fields through
- Decouple
@colyseus/schemafrom the core:- Allow to use other serialization methods for the state. The serializer seam exists, but the core still depends on
@colyseus/schemafor message framing, state views, rewind and dev mode.
- Allow to use other serialization methods for the state. The serializer seam exists, but the core still depends on
- WebTransport:
- Improve and stabilize WebTransport support. The transport carries no authentication headers on the socket connection, and latency simulation is not implemented.
- Matchmaking:
- Improve filtering and sorting options. Every driver compares filters by strict equality. There are no range or set operators.
- General improvements:
- Introduce the concept of “low priority” and “high priority” messages. Drop “low priority” messages if clients are under backpressure.
- Introduce “version check” to allow native SDKs to communicate with newer versions of the server
- Graduate the beta and experimental packages to stable:
@colyseus/admin,@colyseus/auth, the Native SDK, the Drizzle driver, the Bun transport, WebTransport, and streaming collections.
Shipped in v0.18 (Aug 2026)
- Database-first features:
Since Colyseus doesn’t currently have an official database recommendation tool, we can’t provide built-in database-first features. Features that depend on a database tool are: player identity, leaderboards, configs, etc.- Added the official
@colyseus/databasepackage: player identity, cloud saves, leaderboards, and live configs. - Added
@colyseus/admin, the operations console built on top of it.
- Added the official
- Native SDK:
Shared native cross-platform SDK aimed to be used on Godot, Game Maker, Unreal, etc.- Released the Native SDK, with dedicated Godot, GameMaker and Flutter integrations.
- State Sync:
Client-side prediction: Allow to specify client-side prediction techniques on the frontend- Added first-class client-side prediction and lag compensation via
defineInput()/setFixedTimestep()/allowRewindState()(server) androom.input()/Predict/room.clock(client). See Netcode.
- Added first-class client-side prediction and lag compensation via
Yjs (CRDT) connection provider via Colyseus Rooms.- Added
@colyseus/yjs: a room plugin, a ready-made room, and a client provider that mirrorsy-websocket.
- Added
- Released
@colyseus/schema5.0, the foundation of this release: a faster encoder, the decorator-freeschema()builder API, delivery modifiers, quantized floats, and streaming collections.
- General improvements:
Add request/response model to rooms (#331)- Added a request/response model to room messages: the client awaits a reply with
room.request(type, payload)orroom.send(type, payload, callback). The server answers by returning a value from its matchingonMessage(type, ...)handler.
- Added a request/response model to room messages: the client awaits a reply with
- Added a framework-owned fixed timestep:
setFixedTimestep()runs the simulation at a constant step, andsetSimulationInterval()was renamed tosetTimestep().
Shipped in v0.17 (January 2026)
- Matchmaking:
SQL Driver - Provide a SQL driver as alternative to@colyseus/redis-driver(should support SQLite / PostgreSQL, possibly on top of Kysely)- Added PostgreSQL Driver
New “queue” matchmaking type:A queue would keep more clients than needed before starting a matchUser specifies logic that combines clients into a new roomReserve seats for selected clients and redirect them to the newly created room- Added Queue matchmaking type
- Full-stack + TypeScript Improvements:
Allow to specifyclient.authandclient.userDatatypes on the backend only onceAllow to infer types for room message and payload definitions from frontend (room.send())Allow to infer http routes and request/response body types from frontend (client.http.*)