https://github.com/heatxd/gekkonet
P2P Rollback Game Networking SDK
https://github.com/heatxd/gekkonet
c cpp game-development library netcode networking rollback-netcode sdk
Last synced: 4 months ago
JSON representation
P2P Rollback Game Networking SDK
- Host: GitHub
- URL: https://github.com/heatxd/gekkonet
- Owner: HeatXD
- License: bsd-2-clause
- Created: 2024-04-22T02:00:56.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-07-02T09:29:59.000Z (12 months ago)
- Last Synced: 2025-07-02T10:34:54.494Z (12 months ago)
- Topics: c, cpp, game-development, library, netcode, networking, rollback-netcode, sdk
- Language: C++
- Homepage: https://heatxd.github.io/GekkoNet/
- Size: 5.54 MB
- Stars: 12
- Watchers: 5
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README

# 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](https://github.com/pond3r/ggpo) and [GGRS](https://github.com/gschup/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](https://github.com/pond3r/ggpo) Rust reimplementation [GGRS](https://github.com/gschup/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
### Work in progress
- Network Statistics
- 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:
1. **CMake** (version 3.15 or higher)
2. **C++ Compiler**:
- **GCC** or **Clang** (Linux/macOS)
- **MSVC** (Visual Studio) for Windows
3. **Doxygen** (optional, for documentation generation if `BUILD_DOCS` is enabled)
### Step-by-Step Instructions
### 1. Clone the Repository
First, clone the GekkoNet repository:
```sh
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 to `ON` to build shared libraries, or `OFF` for static libraries (default).
- `NO_ASIO_BUILD`: Set to `ON` if you do not need ASIO.
- `BUILD_DOCS`: Set to `ON` if you want to generate documentation using Doxygen (requires Doxygen installed).
To configure these options, use `cmake` with `-D` flags. For example:
```sh
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:
```sh
cmake -S . -B build
```
#### 4. Build the Project
Once configured, build the project using the following command:
```sh
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:
```sh
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](https://opensource.org/license/bsd-2-clause).
The GekkoNet logo is made by the amazing [NoisyChain](https://github.com/NoisyChain)