GekkoNet
P2P Rollback Game Networking SDK
Install / Use
/learn @HeatXD/GekkoNetREADME
GekkoNet
C/C++ Peer To Peer Game Networking SDK
Traditional online networking techniques account for transmission delays by adding input lag, often resulting in a slow feeling, unresponsive feel. GekkoNet leverages rollback networking with input prediction and speculative execution, allowing player inputs to be processed immediately, creating a seamless, low-latency experience. This means that players enjoy consistent timing, reaction speeds, and muscle memory both online and offline, without the impact of added network lag. Inspired by GGPO and GGRS
Why?
I built this because I wanted a SDK to plug into my C++ projects, in the past I have created a wrapper around GGRS for C++ but after having to deal with Rust FFI I decided to build a native alternative instead to more easily fit my projects. GekkoNet is heavily inspired by the GGPO Rust reimplementation GGRS.
Why not use GGPO?
I am personally not a big fan of the callback based approach of GGPO hence why I am more of fond of how GGRS handles its control flow. And I might be addicted to reinventing the wheel, this has mostly been a learning experience of mine to learn more about async systems and networking in general :)
Project Goals
Done
- Local/Couch Sessions
- Per Player Input Delay Settings
- Online Sessions
- Local Player Input Delay Settings
- Remote Player Input Prediction Settings
- Spectator Sessions
- Spectator Delay Settings.
- Stress Sessions
- To help find desyncs it your local state, This is a local session which constantly rolls the simulation back over a user-specified check distance.
- Limited Saving
- Save the gamestate less often which might help games where saving the game is expensive. This is at the cost of more iterations advancing the gamestate during rollback.
- Abstracted socket manager.
- Event System for notifications for eg. specific players being done with syncing.
- Desync Detection (Only when limited saving is disabled for now)
- Automated builds
- Network Statistics
Work in progress
- Joining a session that's already in progress as a spectator (and maybe as a player later)
Maybe Later
- Replays
- Game engine plugins
Getting Started
Docs
- Automatically generated Docs: https://heatxd.github.io/GekkoNet/
- Also look at the examples to see how GekkoNet functions!
Building Examples
- The examples are built and ran using Visual Studio 2022
- The examples require SDL3 to function
Building GekkoLib
Prerequisites
To build GekkoNet, make sure you have the following installed:
- CMake (version 3.15 or higher)
- C++ Compiler:
- GCC or Clang (Linux/macOS)
- MSVC (Visual Studio) for Windows
- Doxygen (optional, for documentation generation if
BUILD_DOCSis enabled)
Step-by-Step Instructions
1. Clone the Repository
First, clone the GekkoNet repository:
git clone https://github.com/HeatXD/GekkoNet.git
cd GekkoNet/GekkoLib
2. Configure Build Options
GekkoNet includes several options to customize the build:
BUILD_SHARED_LIBS: Set toONto build shared libraries, orOFFfor static libraries (default).NO_ASIO_BUILD: Set toONif you do not need ASIO.BUILD_DOCS: Set toONif you want to generate documentation using Doxygen (requires Doxygen installed).
To configure these options, use cmake with -D flags. For example:
cmake -S . -B build -DBUILD_SHARED_LIBS=ON -DNO_ASIO_BUILD=OFF -DBUILD_DOCS=OFF
3. Generate Build Files
Run CMake to configure the build and generate files:
cmake -S . -B build
4. Build the Project
Once configured, build the project using the following command:
cmake --build build
On successful completion, binaries and libraries will be located in the out directory within the project.
5. (Optional) Build Documentation
If you set BUILD_DOCS=ON, generate the documentation as follows:
cmake --build build --target docs
Documentation will be available in the build/docs directory as HTML files.
Build Output
- Library: Located in
out/, with shared/static suffixes depending on build options. - Documentation (if built): Available in
build/docs/.
Projects using GekkoNet
- 3sx - Street Fighter 3rd Strike PC port
- https://github.com/crowded-street/3sx
- Klawiatura - Mario Forever with rollback netcode.
- https://github.com/toggins/Klawiatura
- bsnes netplay
- https://github.com/HeatXD/bsnes-netplay
If you have a project using GekkoNet please let me know!
License
GekkoNet is licensed under the BSD-2-Clause license Read about it here.
The GekkoNet logo is made by the amazing NoisyChain
