GameFrameX is a free, open source gaming project written in JavaScript and released under AGPL-3.0. It has 658 GitHub stars, 87 forks and 5 open issues, and was last pushed 10 hours ago. On this registry it ranks #56 of 56 tracked projects in Gaming, with 5 head-to-head comparisons available.

What is GameFrameX?

GameFrameX is an AGPL-3.0 open-source toolbox that hands indie developers and small teams a complete client-plus-server stack — Unity, Godot, Cocos or Laya clients together with one .NET server — so a game can be taken from idea to built to live and running.

What it is

GameFrameX is an all-in-one game development framework living in the .NET and Unity ecosystem, shipping as a single repository that already contains both the client and the server: git clone it, start a local database with Docker, build the server with dotnet, and open the Unity/ project in the editor. The project targets the full "idea → built → live" pipeline rather than a single layer, and pairs its clients with one .NET server written for many concurrent players.

The concrete problem it solves is the stitching work that sits between making a feature and running an online game: where player save files live and how to read them back, how a multiplayer server forwards messages, who manages items, levels and progression when a designer changes data, and how to read data, manage players and ship new versions after launch. GameFrameX replaces that DIY layer — writing a multiplayer server from scratch, hand-carrying Excel configs into code, and flying blind after launch — with components provided out of the box, leaving the developer to judge whether the game is actually fun.

Key capabilities

  • A ready-made high-performance .NET server for multiplayer games, with health checks on TCP port 29100 and HTTP port 28080.
  • Split storage by role: player data in MongoDB (fast) and backend data in PostgreSQL (rock-solid).
  • LuBan converts Excel configuration into code and data in one click, so designers' changes flow into the build.
  • ProtoBuf unifies the protocol so a change is made once and both client and server sync.
  • A built-in admin web panel for reading data, managing players and pushing configs after launch.
  • One-click server packaging and deployment with Docker.
  • Client support spanning Unity, Godot, Cocos Creator and Laya, with hot-update and HybridCLR coverage in the project's topic list.

Who uses it and how

  • Indie developers who want to ship online or multiplayer games but are stuck on "how do I even do the server?" — the README states a solo developer can build and run an online game like a small team would.
  • Small teams that want to quickly spin up a game prototype to validate an idea.
  • Learners who want to go through the full client + server + backend pipeline end to end.
  • Shipped titles using the stack: 深夜的烧烤店 (Midnight BBQ), live on TapTap since 2024-04-15, and 连续黑白, live since 2024-11 across Douyin, Kuaishou, Alipay, HarmonyOS, TapTap and iOS.

Getting started

Clone the repository (or download the ZIP), then run cd docker/mongo && docker compose up -d for the local database, build and launch the server with dotnet build followed by dotnet GameFrameX.Launcher.dll --DataBaseUrl="mongodb://admin:admin@localhost:27017/?authSource=admin", and open Assets/Scenes/Launcher.unity in Unity 2019.4.40f1 to reach the login screen.

How it compares

The provided facts name no comparable alternative for GameFrameX to be measured against, so no licence, self-hosting or cost contrast can honestly be drawn here. In this registry it stands alone as a repository that bundles both game clients and a game server in one project.

When to use it — and when not

A self-hoster must operate the backing services the stack depends on — MongoDB and PostgreSQL for data, plus Docker packaging for deployment — and must be comfortable running a .NET server and an admin panel alongside the client. It is a poor fit for anyone wanting a proprietary or permissively licensed product, since the project is AGPL-3.0, and the repository's quick start pins the editor to Unity 2019.4.40f1, which may not suit teams standardised on a newer Unity version. Five open issues are currently outstanding.

project readme (upstream, from github) — read inline
GameFrameX Logo

GameFrameX

License Documentation

Trendshift

Discord GitHub Bilibili Gitee

All-in-One Solution for Indie Game Development · Empowering Indie Developers' Dreams


Documentation · Quick Start · QQ Group: 467608841 / 233840761


English | 简体中文 | 繁體中文 | 日本語 | 한국어

Project Overview

An open-source toolbox that helps you take a game all the way "from idea → built → live and running."

When you make a game, the really hard part usually isn't "drawing a character or coding a skill" — it's stitching all those pieces together:

  • Where do player save files live? How do you read them back?
  • In a multiplayer game, how does the server forward messages?
  • Who manages items, levels, and progression data? What happens when a designer changes something?
  • After launch, how do you read the data, manage players, and ship new versions?

All that heavy lifting is already done for you by GameFrameX — you just focus on the fun part: "is my game actually fun?"

Features

What you'd otherwise DIY What GameFrameX hands you out of the box
Writing a multiplayer server from scratch A ready-made high-performance server (written in .NET, built for many concurrent players)
Figuring out how to store data Player data in MongoDB (fast), backend data in PostgreSQL (rock-solid)
Hand-carrying Excel configs into code LuBan turns Excel into code and data in one click
Client and server "speaking the same language" ProtoBuf unifies the protocol — change once, both sides sync
Flying blind after launch A built-in admin web panel for reading data / managing players / pushing configs
Server deployment giving you a headache One-click packaging and deployment with Docker

Plain and simple: even a solo developer can build and run an online game like a small team would.

Who is it for:

  • Indie developers who want to make online / multiplayer games but are stuck on "how do I even do the server?"
  • Small teams that want to quickly spin up a game prototype to validate an idea
  • Learners who want to go through the full "client + server + backend" pipeline end-to-end

Showcase

Game Channels Live since
深夜的烧烤店 (Midnight BBQ) TapTap 2024-04-15
连续黑白 Douyin, Kuaishou, Alipay, HarmonyOS, TapTap, iOS, etc. 2024-11

Shipped a game with GameFrameX? Open a PR or issue to add it to the list.

Quick Start

This repo IS the complete project: git clone, Code → Download ZIP, or any mirror site — whatever way you download it, it runs as-is. No extra pulls needed.

Three steps (details in the tutorial below):

# 1. Start the local database (MongoDB, user admin / admin)
cd docker/mongo && docker compose up -d

# 2. Build & start the server (override only the DB connection; ports use defaults)
cd ../../Server && dotnet build
cd bin/app_debug
dotnet GameFrameX.Launcher.dll --DataBaseUrl="mongodb://admin:admin@localhost:27017/?authSource=admin"

# 3. Open the Unity/ project with Unity 2019.4.40f1, load Assets/Scenes/Launcher.unity, press Play

If you see the login screen and can create a character into the main city, the full client↔server loop works.

Is the server up? Check the listening ports: nc -z localhost 29100 (TCP) and nc -z localhost 28080 (HTTP) — success means it's alive. (Port 29090 is the metrics port and is off by default — see the port table below.)

Installation

Follow along — about 10–15 minutes (Unity first import included).

Step 1: Download the project
git clone https://github.com/GameFrameX/GameFrameX.git
cd GameFrameX

Don't want git? Code → Download ZIP on GitHub, or grab it from a mirror like gitee — same result.

Step 2: Install the prerequisites
Install Version Where
.NET SDK 10.0 or newer https://dotnet.microsoft.com/download
Unity Editor 2019.4.40f1 (Unity Hub → Installs → Install Editor → Archive) https://unity.com/download
Docker Desktop any recent https://www.docker.com/

Note: .NET 10 is a hard requirement for the server and the table-generation tool — get this one right.

Step 3: Start the local database
cd docker/mongo
docker compose up -d

That's MongoDB: mongodb://admin:admin@localhost:27017 (data lands in docker/mongo/database/).

PostgreSQL (docker/postgres/) serves the Admin backend — this tutorial doesn't need it.

Step 4: Build & start the server
cd ../../Server
dotnet build
cd bin/app_debug
dotnet GameFrameX.Launcher.dll --DataBaseUrl="mongodb://admin:admin@localhost:27017/?authSource=admin"

Why only one argument? The defaults (see Server/GameFrameX.Launcher/StartUp/AppStartUpGame.cs) already open the full port set:

Port Purpose Default
29100 TCP: long-lived game client connections on
28080 HTTP: login and other APIs (/game/api/...) on
29110 WebSocket off — start with --IsEnableWebSocket true
29090 metrics / health off — start with --IsOpenTelemetryMetrics true --MetricsPort 29090

The only thing to override is DataBaseUrl — the default points at a public demo database; point it at the MongoDB you just started.

Even simpler with an IDE: open Server/Server.slnx with Rider / Visual Studio (Server.sln if .slnx isn't supported), set the startup project to GameFrameX.Launcher, set Working directory to Server/bin/app_debug, leave arguments empty — and change the DataBaseUrl default in AppStartUpGame.cs to your local connection string (that edits a file inside the aggregated repo, fine for local debugging — see the overwrite note below).

Verify: nc -z localhost 29100 && nc -z localhost 28080 in a terminal — success means it's alive (or check the server log for has been started / Now listening on).

Step 5: Connect the Unity client
  1. Open the Unity/ folder with 2019.4.40f1 via Unity Hub (first open pulls Packages — needs internet, be patient)
  2. Load the scene Assets/Scenes/Launcher.unity
  3. Press Play

The client defaults to 127.0.0.1 (TCP 29100 / HTTP 28080), matching the server's default ports — no config changes needed. Seeing the login screen and creating a character into the main city means the tutorial is complete.

Moving to another machine / a remote server? Change two spots: the TCP address in Unity/Assets/Hotfix/UI/Logic/UILogin/UIPlayerList.cs (serverIp / serverPort), and the HTTP address in Unity/Assets/Hotfix/UI/Logic/UILogin/UILogin.cs etc. (search for 127.0.0.1:28080).

Prefer the LayaAir client?

Open LayaBox/ with the LayaAir IDE; entry point src/Main.ts. Two gotchas: WebSocket is off by default — start the server with --IsEnableWebSocket true first (default WsPort 29110; nettest.ts defaults to ws://127.0.0.1:21100, which does NOT match — align them); the connect address lives in LayaBox/src/gameframex/nettest.ts; protocol generation uses Protobuf/Proto2TsExport_LayaBox.sh.

Usage Examples

The downloaded snapshot ships with all generated artifacts (config code/data, protocol code — all in place), so it runs as-is. Only regenerate when you change a source file:

After editing Excel configs (Config/Excels/Tables/)

What you changed Run Output goes to
tables the server reads cd Config && sh gen-server-bin.sh (Windows: double-click gen-server-bin.bat) Server/GameFrameX.Config/
tables the client reads cd Config && sh gen-client-json.sh Unity/Assets/ (code + data)

File naming matters: letter-EnglishName-ChineseName.xlsx (e.g. D-ItemConfig-道具表-道具-1001.xlsx); the first 4 rows in each sheet are the header (##var / ##type / ##group / description), data starts at row 5. Full rules in GameFrameX.Config.

After editing the protocol (Protobuf/*.proto)

The export tool is not shipped in the repo — build it once (the aggregated layout already satisfies its output-path requirements):

cd Tools
dotnet build ProtoExport/ProtoExport.csproj -c Release   # output lands in ../Protobuf/Tools/ automatically
cd ../Protobuf
sh Proto2CsExport_Server.sh    # server protocol → Server/GameFrameX.Proto/
sh Proto2CsExport_Client.sh    # client protocol → Unity/Assets/Hotfix/Proto/

Protocol hard rules: proto3 only; option module = 10; is mandatory; messages must be named Req / Resp / Notify; field numbers must be Most common newbie issue: Unity reports missing classes after publishing → 9 times out of 10 the "generate code" checkbox wasn't ticked.

Common Pitfalls

Symptom Cause & fix
Server fails to start, DB connection error DataBaseUrl not passed — the default points at the public demo DB; pass the local connection string from the installation steps
IDE launch crashes / hotfix not found Working directory not set to Server/bin/app_debug (the server loads hot-update assemblies from /hotfix)
Unity first open stuck fetching packages Needs internet access to the UPM registry (gameframex.upm.alianblank.uk) and gitee (HybridCLR); restricted networks will stall
Client can't reach the server Make sure the port set matches: TCP 29100 / HTTP 28080; WebSocket 29110 needs --IsEnableWebSocket true (off by default); the server log lists what it's listening on
Your code edits vanished the next day The daily sync overwrites the aggregated repo — commit changes to the corresponding source repo
LayaBox can't connect WebSocket is off by default — start the server with --IsEnableWebSocket true; also align nettest.ts (defaults to 21100) with the server's WsPort 29110

Architecture

This is an aggregated release repo — the latest code of the 7 source repos below is synced daily into same-named folders. One download gets you every piece, and the folders are already in the right places (config generation and protocol export find each other via relative paths — don't rename or move them):

GameFrameX/                   # project root
├── Server/                   # game server (.NET 10, Actor model + hot-update)
├── Unity/                    # Unity client project (HybridCLR hot-update, YooAsset)
├── LayaBox/                  # LayaAir client project (alternative client)
├── Config/                   # LuBan config tables: edit Excel here, generate code for both ends
├── Protobuf/                 # protocol: edit .proto here, export code for every end
├── FairyGUIProject/          # UI editing project (open Game.fairy in the FairyGUI editor)
├── Tools/                    # helper tools (protocol-export CLI / GUI)
├── docker/                   # one-command local databases (mongo / postgres)
├── scripts/                  # aggregation sync scripts
└── README / LICENSE etc.

Warning: Editing Server/, Unity/, etc. inside THIS repo is pointless — the daily sync will overwrite your changes. To change code or send PRs, go to the corresponding source repo in the table above.

Repos NOT aggregated (take them as needed):

Repo Notes
GameFrameX.Foundation Server foundation libraries, referenced by Server as NuGet packages (restored automatically at build, no clone needed)
GameFrameX.Admin Admin backend (some source code not open), live demo
GameFrameX.CocosCreator / Godot clients for other engines
GameFrameX.Docs docs site source

Platform Support

It supports the major engines — whichever you use, it fits:

Platform Client project Notes
Unity Unity/ in this repo 2019.4.40f1, HybridCLR hot-update, YooAsset — primary client
LayaAir (LayaBox) LayaBox/ in this repo alternative client, entry src/Main.ts
Cocos Creator GameFrameX.CocosCreator separate repo
Godot GameFrameX.Godot separate repo
Server Server/ in this repo .NET 10, Actor model, shared by all clients

Dependencies

Component Version Purpose
.NET SDK 10.0+ Build & run the server (Foundation dependency restored via NuGet, internet needed on first build)
Unity 2019.4.40f1 Open the client in Unity/ (first import fetches Packages, internet needed)
Docker any recent One-command local MongoDB

Documentation & Resources

All sites serve the same content — use whichever opens for you.

Community & Support

GitHub Discord LinkedIn Reddit X YouTube Bluesky Bilibili Gitee QQ

Sponsor

wechat.jpg

AITKPARTY is an AI LLM API relay/aggregation service built on the open-source New API project, giving developers one unified interface to major language models — no need to integrate each provider yourself.

Contributors

Star History

Star History Chart

Changelog

See the GitHub Releases page.

License

See LICENSE.md.

All plugins come from the internet; pay for them yourself when used. If anything infringes your rights, email me and I'll remove it, thanks.

This project must not be used where local law forbids it. Technology is innocent; those who abuse it are not.

Frequently asked questions

Is GameFrameX free to use?

GameFrameX is open source under the AGPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does GameFrameX do?

An open-source toolbox that takes a game all the way "from idea → built → live" — Unity/Godot/Cocos/Laya clients + one .NET server. | 开源游戏全流程工具箱:Unity/Godot/Coc

What is GameFrameX written in?

GameFrameX is primarily written in JavaScript. Its source is publicly available at https://github.com/GameFrameX/GameFrameX, and it has 658 GitHub stars.