finds.dev← search

// the find

HouraiTeahouse/backroll-rs

★ 368 · Rust · ISC · updated Mar 2023

A (almost) 100% pure safe Rust implementation of GGPO-style rollback netcode.

A pure-safe-Rust reimplementation of GGPO's rollback netcode, split into a core crate plus separate transport crates for UDP and Steam Datagram Relay, with a Bevy plugin for engine integration. Aimed at Rust game developers building fighting games or other latency-sensitive competitive multiplayer titles who want rollback without vendoring the original C++ GGPO or writing FFI bindings.

No unsafe pointer manipulation for state save/load, unlike the original C++ GGPO — it leans on generics and associated types instead. The transport layer is properly abstracted, so you get a working UDP implementation out of the box but can swap in Steam's relay service or your own without touching the core rollback logic. I/O runs in an async task pool instead of GGPO's manual polling loop, which is a real ergonomic win for integrating into an existing game loop. The generic-based state handling also avoids serialization overhead you'd otherwise pay per rollback frame.

No commits since March 2023 — over three years stale, and the README still self-describes the API as 'early beta' with 'limited testing,' so it never graduated past that. The Bevy integration is explicitly labeled 'Complete, untested' in the README, which is a red flag for anyone planning to depend on it directly. There's no example project or integration guide beyond crate-level READMEs, so you're reading source to understand how the pieces fit together. Rollback netcode bugs are notoriously subtle (desync, replay divergence), and a project this quiet with this little test coverage is a risky foundation for a shipping game rather than a prototype.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →