Warp - very fast & powerful networking library

That being said, I am happy to see that work on Warp has resumed and that a rewrite is actively underway. I hope the project goes well, however, I have moved on due to the long period of inactivity and the numerous issues I encountered during that time. Wish you good luck

Sorry for the misinformation, will correct my post immediately.

Hopefully Warp improves

# 1.1.0 | pre-release6


In this version, the bandwidth gets significantly reduced.

# Bandwidth

Entities StructOfNumbers Booleans
Warp (previous) 55.48KB/s 18.50KB/s 3.69KB/s
Warp (w/ schema) 5.50KB/s 3.07KB/s 3.21KB/s
Warp (w/o schema) 5.47KB/s 3.33KB/s 3.29KB/s
Packet 46.60KB/s 24.65KB/s 5.83KB/s
Zap (v0.6.28) 51.12KB/s 30.61KB/s 10.71KB/s
Blink (v0.18.6) 54.60KB/s 37.75KB/s 17.94KB/s

# FPS

Entities StructOfNumbers Booleans
Warp (previous) 18.4 44.4 240
Warp (w/ schema) 18.6 44.5 244
Warp (w/o schema) 11.1 23.3 245
Packet 15.8 42.4 192
Zap (v0.6.28) 34.1 55.2 239
Blink (v0.18.6) 36.4 70.8 242
Images
Warp



Packet



Zap



Blink



2 Likes

rare footage of package benchmarks not being β€œadjusted”

1 Like

They are probably adjusted NGL + apparently there is a hybrid schema/runtime structure? Yeah that’s pretty weird I think but let’s see maybe Warp is finally stable

1 Like

keep working on it i love it so much

here is the newer benchmark test

100 fires/frame, 10s, locked at 60fps max, O2

cc to @Khrrs for the template

download .rbxl

1 Like

So your telling me Warp has gotten better then ByteNetMax? Well as long as this isn’t fake I’m in support!

if you like to repro the benchmark on ur end, here is the file:

download .rbxl

File’s not opening is this a backdoor or smth

what are you talking about, its totally works fine for me, prob just ur studio

no you have to drag the flie to studio right like idk

In what way is this criticism actually helpful? Is your end goal to degrade OP until he doesn’t have the motivation to work on his module anymore? Jolt and ByteNetMax are stable releases, and this was a pre-release, not meant for use in production yet. How is that fair?

Warp seems to have a memory issue. I watched my memory hit 6GB, and the only times it meaningfully increased were when Warp was running

One thing to say, please read the post from top to bottom and you will see how unreliable and confusing this network module was. I am actually happy to see real improvement to the library as are many other people. But if you had read the post, you’d see the OP was very defensive about their work and made tons of false claims which lead to lots of developers being disappointed and often times having to re-implement netcode.

Also,

Bro… Bro… The entire resource ever since jan 2024 was always pre-release quality but advertised like it’s not. That is the entire point. Come on now!

I fixed multiple issues with the benchmark logic, with percentile and other issues, and retested.

What I noticed

  • Warp was sending buffers full of zeros. Due to your use of XOR, you were not sending anything since the data is the same, artificially reducing your bandwidth usage
  • Warp has a huge memory issue. My memory starts at 2GB in Roblox Studio test and reaches a max of 6GB by the end of the benchmark, entirely from warp; the other libraries temporarily increase memory for a second or don’t at all, unlike warp
  • Warp sends a huge packet at the start frame, crashing my packet profiler plugin as shown below.

image

From just watching memory, the main culprits are Roblox, warp dynamic and warp in that order.

  23:20:38.702  ================================================================================================================================  -  Client - Client:250
  23:20:38.702    BENCHMARK RESULTS (Client β†’ Server, 100 fires/frame, 10s)  -  Client - Client:251
  23:20:38.702  ================================================================================================================================  -  Client - Client:252
  23:20:38.702  
  Entities  -  Client - Client:255
  23:20:38.702    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  -  Client - Client:256
  23:20:38.702    β”‚ Tool         β”‚ P50FPSβ”‚  P50 Kbps  β”‚   Loss   β”‚ After Stop β”‚ Tail (srv) β”‚ Span (srv) β”‚  -  Client - Client:257
  23:20:38.702    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  -  Client - Client:258
  23:20:38.702    β”‚ roblox       β”‚    55 β”‚  355917.25 β”‚     0.0% β”‚      0.00% β”‚      0.000 β”‚     17.483 β”‚  -  Client - Client:269
  23:20:38.702    β”‚ blink        β”‚   167 β”‚   10060.28 β”‚     0.0% β”‚      0.06% β”‚      0.003 β”‚     10.000 β”‚  -  Client - Client:269
  23:20:38.702    β”‚ bytenetmax   β”‚   160 β”‚    9748.79 β”‚     0.0% β”‚      0.06% β”‚      0.003 β”‚      9.997 β”‚  -  Client - Client:269
  23:20:38.702    β”‚ zap          β”‚   144 β”‚    8759.16 β”‚     0.0% β”‚      0.07% β”‚      0.003 β”‚      9.995 β”‚  -  Client - Client:269
  23:20:38.702    β”‚ NetRay       β”‚   189 β”‚   11287.18 β”‚     0.0% β”‚      0.05% β”‚      0.003 β”‚     10.005 β”‚  -  Client - Client:269
  23:20:38.702    β”‚ warp_dynamic β”‚    63 β”‚   15485.29 β”‚     0.0% β”‚      0.00% β”‚      0.000 β”‚      9.954 β”‚  -  Client - Client:269
  23:20:38.702    β”‚ warp         β”‚   125 β”‚    4562.28 β”‚     0.0% β”‚      0.00% β”‚      0.000 β”‚      9.998 β”‚  -  Client - Client:269
  23:20:38.702    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  -  Client - Client:281
  23:20:38.702  
  Booleans  -  Client - Client:255
  23:20:38.702    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  -  Client - Client:256
  23:20:38.702    β”‚ Tool         β”‚ P50FPSβ”‚  P50 Kbps  β”‚   Loss   β”‚ After Stop β”‚ Tail (srv) β”‚ Span (srv) β”‚  -  Client - Client:257
  23:20:38.702    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  -  Client - Client:258
  23:20:38.702    β”‚ roblox       β”‚    45 β”‚  136437.78 β”‚     0.0% β”‚      0.00% β”‚      0.000 β”‚     17.511 β”‚  -  Client - Client:269
  23:20:38.702    β”‚ blink        β”‚   227 β”‚      54.14 β”‚     0.0% β”‚      0.04% β”‚      0.001 β”‚     10.000 β”‚  -  Client - Client:269
  23:20:38.702    β”‚ bytenetmax   β”‚   170 β”‚      40.26 β”‚     0.0% β”‚      0.06% β”‚      0.003 β”‚     10.001 β”‚  -  Client - Client:269
  23:20:38.702    β”‚ zap          β”‚   215 β”‚      50.49 β”‚     0.0% β”‚      0.05% β”‚      0.002 β”‚     10.003 β”‚  -  Client - Client:269
  23:20:38.703    β”‚ NetRay       β”‚   228 β”‚      43.35 β”‚     0.0% β”‚      0.05% β”‚      0.001 β”‚     10.000 β”‚  -  Client - Client:269
  23:20:38.703    β”‚ warp_dynamic β”‚   204 β”‚      54.18 β”‚     0.0% β”‚      0.05% β”‚      0.010 β”‚      9.987 β”‚  -  Client - Client:269
  23:20:38.703    β”‚ warp         β”‚   227 β”‚      60.80 β”‚     0.0% β”‚      0.09% β”‚      0.012 β”‚      9.985 β”‚  -  Client - Client:269
  23:20:38.703    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  -  Client - Client:281
  23:20:38.703    -  Client - Client:284
  23:20:38.716  Generated results  -  Server - Server:183

I added NetRay Compile as a comparison
Based on the benchmark, I’d rank it as

  1. NetRay
  2. Zap
  3. Blink
  4. ByteNet Max
  5. Warp / Warp Dynamic
  6. Roblox

I am sceptical about Zap’s and Bytenetmax P50 Kbps, as when I inspected the raw byte size, Zap and Bytenetmax were bigger for both benches but had a lower P50, most likely due to batching logic, as they have a lag after stop (although % small). Due to that, you could place Blink above both of them.

Warp is good at sending identical data repeatedly due to its XOR; otherwise, it’s not bad but has some issues like memory usage/leak, FPS tank. It’s still better than default Roblox in both benches.

yeah, it was because the xor currently stores the prev buffer & players buffer len. also currently the xor buffer size never get shrinks, and keep growing when the data size get bigger than previous.

its still early development for this xor feature.

Also are you willing to share your modified file, so then i could reproduce it? thanks!

1 Like

I see!

Yes, here is the fixed benchmark place
test_benchmark_1.rbxl (132.8 KB)

Let me know if of any issues

not sure why devforum didnt give a notifcation for your reply

unfortunately i could not reproduce the memory issue you had with & without my newest xor patch. my memory start at 2.98GB and at the end of benchmark its about 2.99GB.

here is the result what i got:

  16:38:33.104  ================================================================================================================================  -  Client - Client:250
  16:38:33.104    BENCHMARK RESULTS (Client β†’ Server, 100 fires/frame, 10s)  -  Client - Client:251
  16:38:33.104  ================================================================================================================================  -  Client - Client:252
  16:38:33.105  
  Entities  -  Client - Client:255
  16:38:33.105    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  -  Client - Client:256
  16:38:33.105    β”‚ Tool         β”‚ P50FPSβ”‚  P50 Kbps  β”‚   Loss   β”‚ After Stop β”‚ Tail (srv) β”‚ Span (srv) β”‚  -  Client - Client:257
  16:38:33.105    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  -  Client - Client:258
  16:38:33.105    β”‚ roblox       β”‚    54 β”‚  262311.75 β”‚     0.0% β”‚      0.00% β”‚      0.000 β”‚     12.822 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ blink        β”‚   181 β”‚   11069.28 β”‚     0.0% β”‚      0.05% β”‚      0.003 β”‚      9.997 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ bytenetmax   β”‚   185 β”‚   11227.82 β”‚     0.0% β”‚      0.05% β”‚      0.003 β”‚      9.991 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ zap          β”‚   190 β”‚   11652.29 β”‚     0.0% β”‚      0.05% β”‚      0.003 β”‚      9.999 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ NetRay       β”‚   185 β”‚   11067.10 β”‚     0.0% β”‚      0.05% β”‚      0.003 β”‚      9.992 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ warp_dynamic β”‚    65 β”‚   15402.03 β”‚     0.0% β”‚      0.00% β”‚      0.000 β”‚      9.966 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ warp         β”‚   134 β”‚    4915.07 β”‚     0.0% β”‚      0.15% β”‚      0.017 β”‚     10.007 β”‚  -  Client - Client:269
  16:38:33.105    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  -  Client - Client:281
  16:38:33.105  
  Booleans  -  Client - Client:255
  16:38:33.105    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  -  Client - Client:256
  16:38:33.105    β”‚ Tool         β”‚ P50FPSβ”‚  P50 Kbps  β”‚   Loss   β”‚ After Stop β”‚ Tail (srv) β”‚ Span (srv) β”‚  -  Client - Client:257
  16:38:33.105    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  -  Client - Client:258
  16:38:33.105    β”‚ roblox       β”‚   124 β”‚  189205.61 β”‚     0.0% β”‚      0.00% β”‚      0.000 β”‚     10.006 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ blink        β”‚   232 β”‚      55.02 β”‚     0.0% β”‚      0.05% β”‚      0.001 β”‚     10.001 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ bytenetmax   β”‚   177 β”‚      42.16 β”‚     0.0% β”‚      0.06% β”‚      0.003 β”‚     10.007 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ zap          β”‚   232 β”‚      53.92 β”‚     0.0% β”‚      0.04% β”‚      0.001 β”‚     10.003 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ NetRay       β”‚   236 β”‚      45.72 β”‚     0.0% β”‚      0.04% β”‚      0.001 β”‚      9.994 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ warp_dynamic β”‚   202 β”‚      52.13 β”‚     0.0% β”‚      0.10% β”‚      0.022 β”‚     10.008 β”‚  -  Client - Client:269
  16:38:33.105    β”‚ warp         β”‚   207 β”‚      57.02 β”‚     0.0% β”‚      0.00% β”‚      0.000 β”‚      9.999 β”‚  -  Client - Client:269
  16:38:33.105    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  -  Client - Client:281
  16:38:33.105    -  Client - Client:284
  16:38:33.112  Generated results  -  Server - Server:183

Did you edit the benches? Or just apply the XOR patch?