Quick answer: Rubber-banding is when a player or entity snaps back to a previous position, a jarring teleport-backward. It's a netcode reconciliation issue: the client predicted movement that the server then corrected to a different position, and the correction is applied as a sudden snap. Fix it by making prediction more accurate (so corrections are small), smoothing how corrections are applied (interpolate to the corrected position instead of snapping), and handling packet loss (which causes big corrections).
Rubber-banding, that frustrating snap where your character (or another player) suddenly jerks back to where they were a moment ago, is a hallmark of netcode problems. It happens when the client's predicted state and the server's authoritative state disagree and the disagreement is resolved abruptly. Fixing it is about reducing how often and how much they disagree, and smoothing how disagreements are corrected.
Why Rubber-Banding Happens
In client-side prediction (used to hide latency), the client predicts movement immediately rather than waiting for the server. The server, as the authority, computes the real result and sends corrections. Rubber-banding occurs when the server's correction differs significantly from the client's prediction and is applied abruptly, the entity snaps from the predicted position to the corrected one. The bigger and more sudden the correction, the worse the rubber-band.
What causes large/frequent corrections: inaccurate prediction (the client predicts poorly, so the server frequently disagrees), packet loss (missed updates cause the client to drift far from the server before a correction arrives, producing a big snap), and high latency or jitter (more time for prediction and reality to diverge). And applying corrections as instant snaps (rather than smoothly) makes any correction jarring. So rubber-banding is the combination of large prediction errors and abrupt correction.
How to Diagnose It
Rubber-banding is usually visible and reproducible (especially under latency/packet loss), so you can often observe it directly, and test it by simulating poor network conditions (added latency, packet loss) to see when and how badly it snaps. Determine whether it's driven by prediction error (corrections frequently large even on a good connection, pointing at prediction accuracy), packet loss (big snaps after missed updates), or abrupt correction application (any correction snaps because it's applied instantly).
It correlates with network quality, worse on poor connections, so if rubber-banding reports concentrate on high-latency/lossy connections, that's expected and points at making corrections more tolerant of those conditions. Bugnet captures reports with context, so rubber-banding complaints and their correlation with connection quality surface, confirming the conditions under which it's worst.
How to Fix It
Reduce the size and abruptness of corrections. Improve prediction accuracy, the better the client predicts, the smaller and rarer the server's corrections, so refine your prediction so it usually matches the server (predict using the same logic the server uses). Smooth corrections, instead of snapping the entity instantly to the corrected position, smoothly interpolate/blend to it over a short time, so a correction is a gentle adjustment rather than a jarring teleport, this dramatically reduces the felt rubber-banding even when corrections occur. Handle packet loss, so missed updates don't let the client drift far before correcting (and so a recovered update doesn't cause a huge snap).
Tune the reconciliation so small disagreements are absorbed smoothly and only genuine, large divergences cause visible correction (and even those, smoothed). After changes, test under realistic and poor network conditions, the rubber-banding should be minimal and gentle rather than frequent and jarring. The goal is that the inevitable client-server disagreements (especially under latency and loss) are reconciled smoothly and invisibly rather than as snapping corrections, which is what separates good-feeling netcode from rubber-banding netcode.
Rubber-banding is a big, abrupt server correction of the client's prediction. Predict more accurately so corrections are small, and smooth them in instead of snapping, especially under packet loss.