Lanceer multiplayer
games
sneller
Bouw en lanceer realtime multiplayer-projecten op KidsGames. Een open source framework voor Node.js met ingebouwde matchmaking, state-synchronisatie en SDK's voor Unity, Defold, Construct, Haxe, JavaScript en meer.
npm create kidsgames-app@latest ./my-server Поддерживает ваш любимый движок и платформу
Как это работает
Синхронизация состояния за считанные минуты
Опишите состояние игры на сервере. 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 });Waarom KidsGames
Alles wat je nodig hebt voor multiplayer
Realtime state-synchronisatie
Automatische binaire state-synchronisatie. Beschrijf je state één keer en hij wordt overal gesynchroniseerd.
Ingebouwde matchmaking
Automatisch aanmaken van Rooms en spelers koppelen. Aanpasbare filtering en sortering.
Schaalbare architectuur
Schaal van 10 naar 10.000+ CCU. Verdeel Rooms over processen en machines.
Cheatbestendig van nature
Authoritatieve serverarchitectuur. Clients sturen input — de server neemt de beslissingen.
SDK's voor meerdere platformen
JavaScript, Unity, Defold, Construct 3, Haxe, Cocos Creator en meer. Gebruik de tools die je al kent.
Gratis en open source
MIT-licentie. Voor altijd gratis, ook voor commerciële games. Volledige controle over je infrastructuur.
Showcase
Games gebouwd op KidsGames
Een selectie van multiplayer-games gemaakt door tevreden ontwikkelaars.
Geen vendor lock-in
Jouw server, jouw regels
KidsGames is een gewone Node.js-applicatie. Draai hem waar je maar wilt: geen propriëtaire runtimes, geen gesloten ecosystemen, geen verrassingen.
Gewoon Node.js
Geen propriëtaire runtime. Je KidsGames-server is een gewone Node.js-applicatie: elk npm-pakket, alle tools die je gewend bent.
Host waar je wilt
AWS, Google Cloud, DigitalOcean, Fly.io, Railway, bare metal — als Node.js er draait, draait KidsGames er ook.
Geen zin in serverbeheer?
KidsGames Cloud verzorgt deployment, schaling en monitoring in 32 regio's wereldwijd. Vanaf € 15/maand.
Vergelijking
Wat KidsGames anders maakt
vs Photon
- Open source, je eigen servers
- Geen verrassingen in de prijs per CCU
- Volledige controle aan serverzijde
vs Mirror
- Werkt met elke game-engine
- Niet gebonden aan Unity
- Draait als een losstaand serverproces
vs Nakama
- Eenvoudigere API, sneller onder de knie
- Native TypeScript-ondersteuning
- Gebouwd voor Room-gebaseerde multiplayer
vs vanaf nul
- Beproefd in productie
- Live in dagen, niet maanden
- Actieve community-ondersteuning
Истории успеха
Нам доверяют инди-разработчики и студии по всему миру
"...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."
Сообщество
Присоединяйтесь к нашему сообществу
Общайтесь с тысячами разработчиков мультиплеерных игр
Нам доверяют
Нам доверяют игровые студии
Инди-разработчики и студии создают мультиплеерные игры в реальном времени на KidsGames.
Стать партнёром