Skip to content

FAQ

Is there a CLI?

Yes.

Install it with Rokit:

sh
rokit add AstaWasTaken/NetRay-Compile@<version> netray

Run it with:

sh
netray compile path/to/schema.idl --out-dir generated --scope NetRay

Where are generated modules written?

Studio plugin output path:

  • ReplicatedStorage/NetRay/Server
  • ReplicatedStorage/NetRay/Client
  • ReplicatedStorage/NetRay/Types
  • ReplicatedStorage/NetRay/Schema

Does option remote_scope control remote names?

Yes. The plugin compiler and src/Compiler.luau both honor option remote_scope.

Remote names follow: <Scope>_RELIABLE, <Scope>_UNRELIABLE, <Scope>_FUNCTION.

Can server send an event to one player directly?

Yes, generated server APIs include Fire(player, ...) when server send direction is allowed.

Can I register multiple callbacks for one message?

It depends on Call mode:

  • SingleSync / SingleAsync: single active handler.
  • ManySync / ManyAsync: multiple handlers.
  • Polling: no callbacks; consume via Iter().

Are enums supported?

Yes.

  • Unit enums are emitted as Luau string-literal unions.
  • Tagged enums are emitted as tagged table unions and serialized on the wire.

What do Call and Yield modes do?

  • Event Call controls receive API shape (On single/multi vs Iter polling).
  • Function Yield currently supports only SingleSync.

Why are callbacks receiving expanded struct fields?

You are using option DecodeStruct = Locals (default). Use option DecodeStruct = Table to receive struct tables.

Why are dropped stats often zero?

The runtime exposes drop counters, but many schemas and workloads will not trigger queue drops under normal conditions.

NetRay Compiler docs. Supported frontends: Roblox Studio plugin and standalone CLI.