TypeScript JavaScript
Latest commit 69aa41e Feb 20, 2017 @endel endel committed on GitHub Merge pull request #37 from gamestdio/greenkeeper/uws-0.13.0
Update uws to the latest version πŸš€



Multiplayer Game Server for Node.js. View documentation.

Join the chat at https://gitter.im/gamestdio/colyseus Build Status OpenCollective OpenCollective

Read the blog post to understand the motivation behind this project.

Features / Characteristics

  • WebSocket-based communication
  • Binary delta compressed state (through msgpack / fossil-delta-js)
  • Match-making
  • Custom room handlers
  • Lag compensation (using timeframe, a Timeline implementation) - Not automatic. You should apply the technique as you need, in the client and/or the server.

Client integration

Usage examples

Room handler API

Room properties

  • clock - A ClockTimer instance
  • timeline - A Timeline instance (see useTimeline)
  • clients - Array of connected clients

Abstract methods

Room handlers must implement all these methods.

  • onJoin (client) - When a client joins the room
  • onLeave (client) - When a client leaves the room
  • onMessage (client, data) - When a client send a message
  • onDispose () - Cleanup callback, called after there's no more clients on the room


Room handlers have these methods available.

  • setState( object ) - Set the current state to be broadcasted / patched.
  • setSimulationInterval( callback[, milliseconds=16.6] ) - (Optional) Create the simulation interval that will change the state of the game. Default simulation interval: 16.6ms (60fps)
  • setPatchRate( milliseconds ) - Set frequency the patched state should be sent to all clients. Default is 50ms (20fps).
  • useTimeline([ maxSnapshots=10 ]) - (Optional) Keep state history between broadcatesd patches.
  • send( client, data ) - Send data to a particular client.
  • lock() - Lock the room to new clients.
  • unlock() - Unlock the room to new clients.
  • broadcast( data ) - Send data to all connected clients.
  • disconnect() - Disconnect all clients then dispose.


Support us with a monthly donation and help us continue our activities. [Become a backer]


Become a sponsor and get your logo on our README on Github with a link to your site. [Become a sponsor]