-
Notifications
You must be signed in to change notification settings - Fork 0
API Settings
Settings.luau is the framework's static configuration table. It exports a plain mutable table; there are no setter functions or metatable helpers.
Important
Docs audit note (2026-05): This page was re-audited against FSM/Orchestrator/Core/Settings.luau and the code paths that consume it.
Source of truth:
local Settings = require(FSM.Orchestrator.Core.Settings)After bootstrap, the same table is also exposed through the Orchestrator (FSM.Orchestrator.Settings) and shared bootstrap state used elsewhere in the framework.
The current file returns this shape:
return {
Scheduler = { FrameBudget = 0.015 },
Logger = { DebuggingEnabled = true, MinimumLoggingLevel = 3 },
DataStore = {
ResetAccessCountIntervalInSeconds = 60,
DataStoreName = "EntityPersistence",
KeyPrefix = "Entity",
PersistenceEnabled = true,
},
FSMSettings = { Debug = true, LogLevel = 1 },
Orchestrator = { MaxSanitizationDepth = 8 },
StaticStrings = {
Instance = {
OrchestratorEventName = "OrchestratorEvent",
OrchestratorFunctionName = "OrchestratorFunction",
EntityUpdateEventName = "EntityUpdateEvent",
EntityCommandEventName = "EntityCommandEvent",
ResetDataStoreAccessCountTaskName = "ResetDataStoreAccessCount",
},
Error = { ... },
},
ServiceManager = { Enabled = true },
}| Key | Type | Default | Used by |
|---|---|---|---|
FrameBudget |
number |
0.015 |
scheduler frame-budget execution |
| Key | Type | Default | Used by |
|---|---|---|---|
DebuggingEnabled |
boolean |
true |
master console-output switch |
MinimumLoggingLevel |
number |
3 |
Logger console severity gate |
Logger gate mapping in the current source:
-
1=> printERROR -
2=> printWARN+ERROR -
3=> printINFO+WARN+ERROR -
4=> printDEBUG+ everything above
| Key | Type | Default | Notes |
|---|---|---|---|
ResetAccessCountIntervalInSeconds |
number |
60 |
scheduler interval for access-count reset |
DataStoreName |
string |
"EntityPersistence" |
default root store name |
KeyPrefix |
string |
"Entity" |
prefixed onto persistence keys |
PersistenceEnabled |
boolean |
true |
master persistence toggle |
| Key | Type | Default | Notes |
|---|---|---|---|
Debug |
boolean |
true |
FSM debug toggle |
LogLevel |
number |
1 |
source comment: βminimum logging level for FSMβ |
Note
FSMSettings.LogLevel is not the same scale as Logger.MinimumLoggingLevel. The source only documents it as the FSM subsystem's own minimum log level with default 1.
| Key | Type | Default | Used by |
|---|---|---|---|
MaxSanitizationDepth |
number |
8 |
orchestrator-side table sanitization before client replication |
| Key | Default | Meaning |
|---|---|---|
OrchestratorEventName |
"OrchestratorEvent" |
async clientβserver request remote |
OrchestratorFunctionName |
"OrchestratorFunction" |
sync clientβserver request remote |
EntityUpdateEventName |
"EntityUpdateEvent" |
serverβclient entity delta remote |
EntityCommandEventName |
"EntityCommandEvent" |
bidirectional entity-command remote |
ResetDataStoreAccessCountTaskName |
"ResetDataStoreAccessCount" |
scheduled DataStore reset task name |
These are internal message templates used by framework assertions / logs.
| Key | Default string |
|---|---|
RemoteNotFoundErrorMessage |
"CreateRemote called without a %s" |
FSMAlreadyFoundErrorMessage |
"FSM already registered" |
UnresolvableConstructorErrorMessage |
"%s called with nil/unresolvable %s" |
EntityRequiresInstanceErrorMessage |
"Entity '%s' requires an 'Instance' in its context." |
AlreadyExistsErrorMessage |
"%s '%s' already exists. Returning existing instance." |
InstantializationFailureErrorMessage |
"Failed to instantiate %s '%s': %s" |
AttachServiceSingletonErrorMessage |
"AttachServiceManager can only be called on the client" |
ServiceManagerDisabledErrorMessage |
"ServiceManager is disabled in settings" |
ServiceManagerInitializationFailureErrorMessage |
"Failed to initialize ServiceManager: %s" |
MissingServiceManagerChildErrorMessage |
"Missing child 'ServiceManager' under Orchestrator module" |
FailedToCreateErrorMessage |
"Failed to create %s '%s'." |
AsyncRequestFailureErrorMessage |
"Failed to handle async request '%s': %s" |
ServerRequestErrorMessage |
"This API is inaccessible on the client." |
ClientRequestErrorMessage |
"This API is inaccessible on the server." |
| Key | Type | Default | Current effect |
|---|---|---|---|
Enabled |
boolean |
true |
gates code paths that explicitly consult ServiceManager settings |
In current audited code, the most visible direct gate is the extra server-side FSM state-change broadcast hook in Core/Factory/init.luau.
local Settings = require(FSM.Orchestrator.Core.Settings)
Settings.Logger.MinimumLoggingLevel = 4
Settings.ServiceManager.Enabled = false
FSM.Orchestrator:RegisterComponents()local Settings = require(FSM.Orchestrator.Core.Settings)
Settings.StaticStrings.Instance.OrchestratorEventName = "MyGame_OrchestratorEvent"
Settings.StaticStrings.Instance.OrchestratorFunctionName = "MyGame_OrchestratorFunction"
FSM.Orchestrator:RegisterComponents()local Settings = require(FSM.Orchestrator.Core.Settings)
Settings.Scheduler.FrameBudget = 0.008
FSM.Orchestrator:RegisterComponents()-
Remote names must be changed before bootstrap.
NetworkManager.Initialize(...)resolves / creates the remotes once. -
Settings are mutable at runtime, but consumers vary. Logger gates react immediately; bootstrap-created remotes do not.
-
ServiceManager.Enabledis not a universal kill-switch. Only code that explicitly checks it is affected. -
StaticStrings.Erroris internal API. Changing message templates can desynchronize tests or error parsing. -
There is no
table.freeze. Any script holding a reference can mutate the settings table.
Quick Links: Home Β· Quick Start Β· API Reference Β· Architecture Β· Examples Β· Glossary
Copyright: Β© 2026 RBXStateMachine contributors Β· Repository Β· License information