Options
Options go at the top of a schema, before any declaration, as option Name = Value. Each may be set
once, or once per profile. The Options
page explains each one in full.
| Option | Value | Default | What it does |
|---|---|---|---|
Casing |
Pascal, Camel or Snake |
Pascal |
Casing of the generated methods: FireAll, fireAll or fire_all. |
ServerOutput |
path string | none; required by the CLI | Where the server module is written, relative to the schema. |
ClientOutput |
path string | none; required by the CLI | Where the client module is written. |
TypesOutput |
path string | none | Where a shared module with the schema’s types and exported Read/Write pairs is written. Not written when unset. |
Typescript |
boolean | false |
Also write a .d.ts beside the server and client modules. CLI only. |
UsePolling |
boolean | false |
Give every event the polling API (Iter), as if each were Call: Polling. |
FutureLibrary |
Luau path string | none | What require loads for Yield: Future. Required by any such function. |
PromiseLibrary |
Luau path string | none | What require loads for Yield: Promise. Required by any such function. |
SyncValidation |
boolean | true |
Warn when a Sync listener yielded, and discard the rest of the packet it held up. |
WriteValidations |
boolean | false |
Check types, ranges and Instance classes on send. Length bounds are checked on send regardless; a fixed-length array or exact-length string that is too long is refused with it and cut short without it. |
ManualReplication |
boolean | false |
Do not flush reliable traffic on Heartbeat; call StepReplication yourself. |
ClientFlushRate |
whole number | 60 |
The most times a second a client’s Heartbeat sends what it has gathered. |
RemoteScope |
string | "" |
Prefix for the remotes’ names: "PKG" gives PKG_BLINK_RELIABLE_REMOTE. |
RemotesFolder |
string | none | A folder in ReplicatedStorage to hold the remotes. |
ExportLimits |
boolean | false |
Add a frozen Limits table of the schema’s ranges and length caps to every module. |
ExportRates |
boolean | false |
Add a frozen Rates table of the rate limits the server enforces to every module. |
MaxPacketSize |
whole number | 8192 |
Largest inbound packet the server reads, in bytes. |
MaxEventsPerPacket |
whole number | 64 |
Events the server decodes from one packet before dropping the rest. |
MaxInstancesPerPacket |
whole number | 256 |
Instance and unknown values one inbound packet may carry. May be 0, which refuses a client-sent Instance at compile time (E3031). |
InboundBytesPerSecond |
whole number | 8 * MaxPacketSize (65536) |
Bytes a second each player’s packets may cost the server; a packet costs at least 128. |
InboundBurst |
whole number, at least MaxPacketSize and 128 |
the larger of InboundBytesPerSecond and MaxPacketSize (65536) |
The most inbound budget a player may bank. |
OutboundBytesPerSecond |
whole number | none | Bytes a second the server sends each player before it leaves out a Priority: Low send. |
OutboundBurst |
whole number | OutboundBytesPerSecond |
The most outbound budget a player may bank. |
MaxUnreliableSize |
whole number | 980 |
Largest unreliable payload, 6 bytes per Instance included, checked at compile time and on send. |
DefaultRate |
whole number | none | Events per second per player for every inbound event and function without its own Rate. |
RequireRates |
boolean | false |
Make an inbound event or function with no effective rate a compile error (E3020). |
Predict |
boolean | false |
Add Predict to every event this side listens to (not polled ones): it delivers to local listeners without a remote. |
InvocationTimeout |
whole number | 10 |
Seconds before an unanswered Invoke fails. |
ClientConnectTimeout |
number above zero | none; wait for ever | Seconds the client waits for the remotes before it returns a module with Connected false and every entry point stubbed. |
AutoStart |
boolean | true |
false: the server module creates and connects nothing until the game calls Start(). |
TrafficStats |
boolean | false |
Count bytes, events and packets sent and received, per event and per channel, behind GetTrafficStats() and ResetTrafficStats(). Emits nothing when off. |
PackedBooleanReader |
"Auto", "Bits" or "Rows" |
"Auto" |
How a received boolean[] is unpacked: testing each bit, copying rows of eight, or whichever the module measured faster as it loaded. |
UseColon |
boolean | none | Deprecated and ignored; warns W3017. Delete it. |
Value syntax
Section titled “Value syntax”| Value | Written as | Example |
|---|---|---|
| boolean | true or false |
option Predict = true |
| path string | a quoted path, relative to the schema’s folder unless absolute | option ServerOutput = "../src/Network/Server.luau" |
| Luau path string | a quoted Luau expression, inserted into require(...) |
option PromiseLibrary = "ReplicatedStorage.Packages.Promise" |
| whole number | a positive integer | option MaxPacketSize = 16384 |
| seconds | a number above zero, fractions allowed (ClientConnectTimeout only) |
option ClientConnectTimeout = 2.5 |
| casing | a bare word | option Casing = Camel |
| reader | a quoted word | option PackedBooleanReader = "Rows" |
A number that is zero, negative or, outside ClientConnectTimeout, fractional is refused (E2003), as is an unknown option name,
casing or reader. An option after the first declaration is E3016; one set twice for the same build is E3024.
What the options do not change
Section titled “What the options do not change”None of these options changes the bytes on the wire, so none of them is part of the
schema signature. A server and a client built from the
same declarations with different options still talk to each other. RemoteScope is the exception in
practice: it changes the remotes’ names, so a client with a different scope never finds the server’s
remotes at all.
