Register your game with a simple JSON, grab a client library, connect to
server.roomielib.com,
and you have networked multiplayer. No backend to build, no servers to manage. Free.
How It Works
Roomie is a hosted game relay. You describe your game's data, we handle the networking.
Add a JSON with your app key and player limits. PR it to the repo.
Grab the C++, Rust, GML, or C# client.
They default to server.roomielib.com. Connect, create a room, and go.
The server handles rooms, relay, host migration, and reconnects. You write game logic, not networking code.
Features
Everything is handled by server.roomielib.com. You focus on your game.
Register your game with an app key and player limits.
The server relays opaque blobs.
One player is host and owns the game state. Others send inputs, the host merges and broadcasts. Simple, flexible authority model.
When the host disconnects, another player takes over automatically.
Full state resync. Everyone stays in the game.
Room codes, public/hidden listings, passwords, accept/deny, kick/ban, custom settings.
A complete lobby system.
One server hosts many games. Each app_key gets its own room pool. Your game shares the server but is fully isolated.
server.roomielib.com is running 24/7. No infrastructure to provision, no uptime to worry about. Just connect.
Quickstart
Here's how the included Pong example gets networked multiplayer. Your game follows the same pattern.
Clone roomielib to get the client libraries and the Pong example. Pong is already registered on the server.
# Clone and build the C++ Pong example git clone https://github.com/codename-B/roomielib cd roomielib/clients/cpp cmake -B build -DROOMIE_BUILD_EXAMPLE=ON cmake --build build
Every game needs an app key and player limits. Here's Pong's.
Write yours, open a PR. Once merged, your game is live on server.roomielib.com.
{
"app_key": "pong",
"min_players": 2,
"max_players": 2
}
The client libraries connect to server.roomielib.com by default.
Run two instances. One creates a room, the other joins with the code. That's it.
// Connects to server.roomielib.com:8765 by default RoomieClient client; client.connect("server.roomielib.com", "8765"); // Player 1: create a room client.create_room("pong", client_hash, nullptr); // → receives Joined { room_code: "ABC123", side: 0, ... } // Player 2: join with the code client.join_room("pong", "ABC123", client_hash, nullptr); // Host sends state, peers send input - server relays everything client.send_move(state_blob, len); // host client.send_input(input_blob, len); // peer
Client Libraries
All libraries connect to server.roomielib.com out of the box.
Open source and included in the repo.
Full client library with CMake. Includes a networked Pong example built with Raylib.
ReadyClient library with the same protocol types used by the server. First-class support.
ReadyNative TCP with network_connect_raw. Same binary protocol.
No extensions or DLLs required.
Full .NET client. Varint bincode protocol over TCP or WebSocket.
ReadyThe protocol is open and simple enough to implement in any language that speaks TCP.
Coming Soon