Skip to main content

Benchmarks

These numbers are here to give you a feel for Rivet's overhead. This page is just the current results, not a guide for running every benchmark. If you want your own numbers, test it yourself with the benchmark scripts in the repo and compare against the same machine and Roblox environment.

Rivet is doing real work: loading managed Units, sorting dependencies, creating remotes, validating contracts, encoding custom values, firing plugin hooks, and cleaning up after itself. The useful question is whether that work stays small enough that your actual game systems remain the thing that matters.

Headless Engine Results

These results measure Rivet's framework path inside a Roblox DataModel without a live client. Values are microseconds per operation, so lower is better.

ScenarioMean
Query dispatch, no contracts8.23 us
Action dispatch with string contract8.17 us
Signal fire with number payload contract8.47 us
Query dispatch with string arg and return contracts10.23 us
Query return with small Item codec11.59 us
Action arg with small Item codec12.52 us
Query return with larger nested codec payload167.09 us
Action arg with larger nested codec payload165.24 us
Boot and destroy a small surfaced Unit51.63 us

The short version: primitive Query, Action, and Signal surfaces are single-digit to low-double-digit microsecond operations in this benchmark. Small codecs add a little overhead. Large nested payloads cost more because the codec has to walk and rebuild more data.