Ship Multiplayer
Games
Faster
Build and ship real-time multiplayer experiences with KidsGames. Open-source framework for Node.js with built-in matchmaking, state sync, and SDKs for Unity, Defold, Construct, Haxe, JavaScript, and more.
npm create kidsgames-app@latest ./my-server Supports your favorite engine & platform
Как это работает
Синхронизация состояния за считанные минуты
Опишите состояние игры на сервере. KidsGames автоматически синхронизирует его со всеми клиентами — без ручной сериализации.
import { Room, Client } from "kidsgames";import { GameState, Player } from "./GameState";
export class GameRoom extends Room { state = new GameState();
messages = { // listen for "move" messages from clients move(client: Client, data: any) { const player = this.state.players.get(client.sessionId); if (player) { player.x = data.x; player.y = data.y; } }, }
onJoin(client: Client) { const player = new Player(); this.state.players.set(client.sessionId, player); }
onLeave(client: Client) { this.state.players.delete(client.sessionId); }}import { Client, Callbacks } from "@kidsgames/sdk";
const client = new Client("https://your-server.com");const room = await client.joinOrCreate("game_room");const callbacks = Callbacks.get(room);
callbacks.onAdd("players", (player, key) => { addSpriteForPlayer(player); callbacks.onChange(player, () => moveSprite(key, player.x, player.y));});
callbacks.onRemove("players", (player, key) => removeSpriteForPlayer(key));
room.send("move", { x: 10, y: 20 });import { Client } from "@kidsgames/sdk";import { useRoom, useRoomState } from "@kidsgames/react";
const client = new Client("https://your-server.com");
function Game() { const { room, isConnecting } = useRoom( () => client.joinOrCreate("game_room"), ); const state = useRoomState(room);
if (isConnecting) return <p>Connecting...</p>;
return ( <ul> {state?.players.map((player, key) => ( <li key={key}>Player at {player.x}, {player.y}</li> ))} </ul> );}using KidsGames;using KidsGames.Schema;
var client = new Client("https://your-server.com");var room = await client.JoinOrCreate<GameState>("game_room");var callbacks = Callbacks.Get(room);
callbacks.OnAdd(state => state.players, (sessionId, player) => { AddSpriteForPlayer(player); callbacks.OnChange(player, () => MoveSprite(sessionId, player.x, player.y));});
callbacks.OnRemove(state => state.players, (sessionId, player) => RemoveSpriteForPlayer(sessionId));
await room.Send("move", new { x = 10, y = 20 });var client: KidsGamesClient = KidsGames.create_client()client.set_endpoint("wss://your-server.com")var room: KidsGamesRoom = client.join_or_create("game_room")
room.joined.connect(func(): var callbacks = KidsGames.callbacks(room)
callbacks.on_add("players", func(player, key): add_sprite_for_player(player) callbacks.on_change(player, func(): move_sprite(key, player.x, player.y) ) )
callbacks.on_remove("players", func(player, key): remove_sprite_for_player(key) )
room.send("move", {"x": 10, "y": 20}))client = new KidsGamesClient("https://your-server.com");room = client.join_or_create("game_room");callbacks = KidsGamesCallbacks(room);
callbacks.on_add("players", function(player, key) { add_sprite_for_player(player); callbacks.on_change(player, function() { move_sprite(key, player.x, player.y); });});
callbacks.on_remove("players", function(player, key) { remove_sprite_for_player(key);});
room.send("move", { x: 10, y: 20 });local KidsGamesSDK = require "kidsgames.sdk"
local client = KidsGamesSDK.Client("https://your-server.com")client:join_or_create("game_room", function(room) local callbacks = KidsGamesSDK.callbacks(room)
callbacks:on_add("players", function(player, key) add_sprite_for_player(player) callbacks:on_change(player, function() move_sprite(key, player.x, player.y) end) end)
callbacks:on_remove("players", function(player, key) remove_sprite_for_player(key) end)
room:send("move", { x = 10, y = 20 })end)import io.kidsgames.Client;import io.kidsgames.schema.Callbacks;
var client = new Client("https://your-server.com");client.joinOrCreate("game_room", [], MyRoomState, function(err, room) { var callbacks = Callbacks.get(room);
callbacks.onAdd("players", (player, key) -> { addSpriteForPlayer(player); callbacks.onChange(player, () -> moveSprite(key, player.x, player.y)); });
callbacks.onRemove("players", (player, key) -> removeSpriteForPlayer(key));
room.send("move", {x: 10, y: 20});});#include "kidsgames.h"
kidsgames_client_t* client = kidsgames_client_new("https://your-server.com");kidsgames_room_t* room = kidsgames_join_or_create(client, "game_room");kidsgames_callbacks_t* callbacks = kidsgames_callbacks_get(room);
void on_player_add(kidsgames_state_t* player, const char* key) { add_sprite_for_player(player); kidsgames_on_change(callbacks, player, on_player_change, (void*)key);}
void on_player_change(kidsgames_state_t* player, void* ctx) { float x = kidsgames_get_float(player, "x"); float y = kidsgames_get_float(player, "y"); move_sprite((const char*)ctx, x, y);}
kidsgames_on_add(callbacks, "players", on_player_add, NULL);kidsgames_on_remove(callbacks, "players", on_player_remove, NULL);kidsgames_room_send(room, "move", data, data_len);const client = new KidsGames.Client("https://your-server.com");const room = await client.joinOrCreate("game_room");const callbacks = KidsGames.Callbacks.get(room);
callbacks.onAdd("players", (player, key) => { const sprite = runtime.objects.Player.createInstance("Game", player.x, player.y); callbacks.onChange(player, () => { sprite.x = player.x; sprite.y = player.y; });});
callbacks.onRemove("players", (player, key) => { // destroy sprite instance});
room.send("move", { x: 10, y: 20 });Why KidsGames
Everything You Need for Multiplayer
Real-Time State Sync
Automatic binary state synchronization. Define your state once, sync everywhere.
Built-in Matchmaking
Automatic room creation and player matching. Customizable filtering and sorting.
Scalable Architecture
Scale from 10 to 10,000+ CCU. Distribute rooms across multiple processes or machines.
Cheat-Proof by Design
Authoritative server architecture. Clients send inputs — the server decides what happens.
Multi-Platform SDKs
JavaScript, Unity, Defold, Construct 3, Haxe, Cocos Creator, and more. Use the tools you already know.
Free & Open Source
MIT licensed. Free forever, even for commercial games. Full control over your infrastructure.
Showcase
Games Using KidsGames
A selection of multiplayer games made by happy developers.
Watch the KidsGames ReelNo Vendor Lock-In
Your Server, Your Rules
KidsGames is a standard Node.js application. Deploy it anywhere — no proprietary runtimes, no walled gardens, no surprises.
Standard Node.js
No proprietary runtime. Your KidsGames server is just a Node.js app — use any npm package, any tooling you already know.
Host Anywhere
AWS, Google Cloud, DigitalOcean, Fly.io, Railway, bare metal — if it runs Node.js, it runs KidsGames.
Don't want to manage servers?
KidsGames Cloud handles deployment, scaling, and monitoring across 32 global locations. Starting at $15/mo.
Compare
How KidsGames Compares
vs Photon
- Open-source, own your servers
- No CCU pricing surprises
- Full server-side control
vs Mirror
- Works with any game engine
- Not tied to Unity
- Runs as a standalone server process
vs Nakama
- Simpler API, faster to learn
- TypeScript-native
- Purpose-built for room-based multiplayer
vs From Scratch
- Battle-tested in production
- Ship in days, not months
- Active community support
Success Stories
Trusted by Indies and Studios Worldwide
"...the operational cost associated with running a KidsGames server is substantially lower than alternatives we tried."
"I had previously never worked with Websockets, authoritative multiplayer servers, or Node.js. But that wasn’t a problem, as KidsGames provided me with an intuitive start. This strong foundation allowed us to grow to where we are today."
"We have been in love with KidsGames since the first moment we discovered it. It is amazing to have such an extraordinary product available for free and as open source."
Community
Join Our Growing Community
Connect with thousands of multiplayer game developers
Trusted by
Trusted by game studios
Indie developers and studios build real-time multiplayer games on KidsGames.
Become a partner