Lancez vos jeux
multijoueur
plus vite
Créez et lancez des projets multijoueurs en temps réel avec KidsGames. Un framework open source pour Node.js avec matchmaking intégré, synchronisation d'état et SDK pour Unity, Defold, Construct, Haxe, JavaScript et plus encore.
npm create kidsgames-app@latest ./my-server Поддерживает ваш любимый движок и платформу
Как это работает
Синхронизация состояния за считанные минуты
Décrivez l'état du jeu sur le serveur. KidsGames le synchronise automatiquement avec tous les clients — sans sérialisation manuelle.
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 });Pourquoi KidsGames
Tout ce qu'il faut pour le multijoueur
Synchronisation d'état en temps réel
Synchronisation d'état binaire automatique. Décrivez votre état une fois, il est synchronisé partout.
Matchmaking intégré
Création automatique de Rooms et mise en relation des joueurs. Filtrage et tri personnalisables.
Architecture évolutive
Passez de 10 à plus de 10 000 CCU. Répartissez les Rooms entre processus et machines.
Résistant à la triche par conception
Architecture serveur autoritaire. Les clients envoient leurs actions — le serveur prend les décisions.
SDK multiplateformes
JavaScript, Unity, Defold, Construct 3, Haxe, Cocos Creator et plus encore. Utilisez les outils que vous connaissez déjà.
Gratuit et open source
Licence MIT. Gratuit pour toujours, y compris pour les jeux commerciaux. Contrôle total de votre infrastructure.
Showcase
Jeux créés avec KidsGames
Une sélection de jeux multijoueurs créés par des développeurs satisfaits.
Aucune dépendance fournisseur
Votre serveur, vos règles
KidsGames est une application Node.js classique. Exécutez-la où vous voulez : pas de runtime propriétaire, pas d'écosystème fermé, pas de surprises.
Simplement Node.js
Aucun runtime propriétaire. Votre serveur KidsGames est une application Node.js classique : tous les paquets npm, tous vos outils habituels.
Hébergez où vous voulez
AWS, Google Cloud, DigitalOcean, Fly.io, Railway, bare metal — là où tourne Node.js, KidsGames tourne aussi.
Pas envie de gérer des serveurs ?
KidsGames Cloud gère le déploiement, la mise à l'échelle et la supervision dans 32 régions du monde. À partir de 15 €/mois.
Comparaison
Ce qui distingue KidsGames
vs Photon
- Open source, vos propres serveurs
- Pas de surprise sur le prix par CCU
- Contrôle total côté serveur
vs Mirror
- Compatible avec tous les moteurs de jeu
- Pas limité à Unity
- Fonctionne comme un processus serveur autonome
vs Nakama
- API plus simple, prise en main plus rapide
- Prise en charge native de TypeScript
- Conçu pour le multijoueur basé sur les Rooms
vs partir de zéro
- Éprouvé en production
- En ligne en jours, pas en mois
- Communauté active
Истории успеха
Нам доверяют инди-разработчики и студии по всему миру
"...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."
Сообщество
Присоединяйтесь к нашему сообществу
Общайтесь с тысячами разработчиков мультиплеерных игр
Нам доверяют
Нам доверяют игровые студии
Développeurs indépendants et studios créent des jeux multijoueurs en temps réel avec KidsGames.
Стать партнёром