Join us!

Multiplayer Framework Made Fast and Simple

An open-source solution that empowers game devs to Get To Fun Faster™. Built on Node.js

Downloaded by
Developers & Studios
of requests per month
MAU worldwide


Automatic synchronization of server game states to all clients and configurable messaging system to provide enhanced logic, such as object-specific remote function calls & private messages.


Supports any game type and can be configured to fit your needs, from a battle royale shooter to a desktop space MMORPG. Client SDKs support multi-platform development including web, mobile, desktop, and console.


Rapid development with authoritative implementation from the start. Easily build games with server-side game loop/logic to provide fun mechanics & avoid client based hacks.

Supported Platforms

Arena Main Features

Load Balancer
Global Availability
24/7 Monitoring & DevOps
Auto Scaling
DDoS Protection & HTTPS/SSL
Premium Support

Get support, share games, and exchange ideas with our growing dev community.



Get support, share games, and exchange ideas with our growing dev community. Check out our Forums and join us on Discord


Start a discussion or ask questions and learn more about cloud hosting your Colyseus Application


Find the Official Client Intergrations, helpful tools made by us and the community, as well as Usage examples

Games supported by Colyseus!

Colyseus flexible framework and batteries included examples will get you from concept to fun faster than any other multiplayer solution. Colyseus server code is battle-tested and is ready out-of-the-box to host your multiplayer game or social experience.

Getting Started with Colyseus

Write your game server in TypeScript/JavaScript.
Integrate into your game using one of our client SDK's

// index.ts (server-side, entrypoint)
import http from "http";
import { Server, Room } from "colyseus";
import { MyRoom } from "./rooms/MyRoom.ts";

// create your game server
const gameServer = new Server({
    server: http.createServer()

// register your room handlers
gameServer.define('my_room', MyRoom);

// make it available to receive connections
console.log(`Listening on ws://localhost:2567`)

// rooms/MyRoom.ts (server-side, room file)
import { Room } from "colyseus";

class MyRoom extends Room {
    // number of clients per room
    // (colyseus will create the room instances for you)
    maxClients = 4;

    // room has been created: bring your own logic
    async onCreate(options) { }

    // client joined: bring your own logic
    async onJoin(client, options) { }

    // client left: bring your own logic
    async onLeave(client, consented) { }

    // room has been disposed: bring your own logic
    async onDispose() { }

// connection.ts (client-side)
import { Client } from "colyseus.js";
const client = new Client("ws://localhost:2567");

async function connect () {
    try {
        const room = await client.joinOrCreate("my_room");

    room.onStateChange((newState) => {
        console.log("New state:", newState);

    room.onLeave((code) => {
        console.log("You've been disconnected.");

    } catch (e) {
        console.error("Couldn't connect:", e);

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.