IMPORTANT: BetterReplication is now considered superseded by Chrono, an advanced replication library that builds on the foundation that BetterReplication provided!![]()
Temporary explanation of how to support ragdolls with BetterReplication here!
Roblox’ replication system is too slowww for combat games!
The issues that arise include:
- largely delayed player Character positions on the server and other clients
- any constraints applied to the Character will show delayed to other clients! See an example here!
This majorly affects games that have high-paced manouvers and close-combat at their core.
As someone who has been developing such a game, I HAD to come up with a solution to get this fixed.
BetterReplication is:
- Easy to install (A simple interface with informative method description)
- Lightweight (Optimized for low resource consumption)
- Very efficient in bandwidth consumption (Using a custom buffer writer and reader implementation) (Adds only +/- 0.6 KB/s of RECV overhead per player in proximity)!
The results of BetterReplication (its amazing!!):
- https://gyazo.com/2510aa545d0694c9db27a1ba584e9939 (movement)
- https://gyazo.com/809b13014418ddf29d3b1193da61dbb0 (LinearVelocity)
How BetterReplication works:
BetterReplication uses Roblox buffers under the hood to replicate player cframes using minimal bandwith. This position data is sent to the server and the server forwards it to the other clients. These clients then overwrite the position of the client in question with the up-to-date position that was forwarded by the server.
Known limitations and behaviours 
- BetterReplication does NOT do anti-cheat checks
!! This is behaviour that you will have to implement yourselves. - For optimizations; BetterReplication is limited to 256 players per server! (This is due to the player identifier that is of unsigned 8-bit integer size)
- Though BetterReplication has been tested a lot and performs stable, it is still considered an ‘in-progress’ project. We actively support any contributions!
Downloads:
Download the model (the Interface module contains a readme and all public methods)!
BetterReplication.rbxm (35.4 KB)
Download the test place!
BetterReplicationEnvironment.rbxl (116.5 KB)
Marketplace model:
Github:
Credits:
- @Tazm0ndo for taking hours of your time to help me out prior to BetterReplication!
- @Parihsz for assisting with the snapshots implementation (and memory leak ;D) and the suggestion of proximity based replication!
- @XK4nekiX for the incredible contributions towards the replication buffer implementation!
- @puddest for the initial contributions and advice!
- @ffrostfall for ByteNet (In versions prior to V6)!
- @Ax1sAng1e and their replication system that was used as inspiration!
- @BreezeOnTheDoor for fixing the R6 issue
- And the rest of the OSS community who has made efforts for BetterReplication!
Any contributions, bug fixes and suggestions are very welcome! ![]()
Log:
28/05/2025:
- Reworked player identifier system
- Examples folder contents have been fixed
- Incorrect packetloss configuration fixed
- Sanity check callback expansion
- New method: ‘getLastClientTick’ (used for sanity checks)
18/04/2025: Finally a new update! V7 has now released with a refactor! BetterReplication is no longer a plug-and-play based model but a proper framework instead!
15/02/2025: V6.1: reduced replication packet size by 40%! CFrames now consist of i24 and i16 for position and rotation data (f32 * 6 before)
15/02/2025: V6 BetterReplication has moved away from ByteNet and now has its own buffer reader and writer!
- new config option; makeRagdollFriendly. Replicates the player’s entire CFrame orientation instead of solely its yaw.
Results in higher bandwidth consumption however. It is recommended to not enable this setting when its not directly necessary.
More elaboration on this config option soon.
30/01/2025: V5 contains back-end changes and fixes that should make replication much more reliable and accurate!
- For the advanced users under us; clients now forward their own ticks instead of the server doing this for them. In V4; BetterReplication assumed the same tick for every client (as it forwarded the position cache in bulk at 20hz). This
is not the proper way to do it as receiving the tick information from the original client is the most accurate. This does mean an
increase of 4 bytes (f32) per packet (but also less overhead at the same time as we dont use a ByteNet map anymore).- The position forwarder on the client has been reduced from 30hz to 20hz, reduced send and recv for the same result!
23/01/2025Late happy new year! V4 contains huge improvements and a big refactor!!
BetterReplication now has a replication buffer implemented. This makes BetterReplication much more compatible with production-ready scenarios where inconsistent internet connections are present!
Proximity based replication has also been added! You can easily configure this. Proximity Based replication is an implementation that you can use to have MUCH less network traffic by disabling BetterReplication for clients at larger distances from others.
(Notice that swapping in-and-outside of the replication zone causes jitters as the Roblox replication buffer will take over.)
(Make sure therefore that it is not intrusive to the gameplay when people enter and leave this proximity.)Sending and receiving position data has been optimized by 25%!
- Easier configurations
24/11/2024- version 3 release; added easier PlayerPositionsHandler configurations, finetuned and fixed vertical position updates, improved README documentation!
18/11/2024- version 2 release; fixed buggy player collisions, large networking improvements and R6 incorrect position fix!
15/11/2024- First release of BetterReplication version 1 (V1)
