Help
Troubleshooting
Fixes for the messages Engine and the Engine plugin print, and for common problems with loading, configuration, data and the client.
Loading
The published engine could not be loaded
Engine: the published engine (asset ...) could not be loaded - Engine did not start
AssetService:LoadAssetAsync failed 3x in ...: ...
needs Game Settings > Security > Allow Loading Third Party Assets, unless the game's creator owns the asset
...An automatically updating shell could not load the engine from Roblox. The report lists every method it tried and what each needs.
- Open Game Settings > Security and turn on Allow Loading Third Party Assets. Publish, then test again.
- In Studio, make sure you are logged in and online.
- If it still fails, open the Engine plugin and click Disable Auto-update. Manual updates carry the engine inside your place and never download it.
If the message says it is booting the local MainModule copy instead, Engine started from the copy inside the shell; the game works, but it is not on the newest version.
If it keeps failing, report it and paste the whole message.
Still loading the published engine after 10s
Roblox's asset delivery is slow. The shell keeps trying; nothing is wrong unless the failure report above follows.
This shell was inserted sandboxed
The shell is sandboxed and cannot load the engine. Select Engine under ServerScriptService, paste the command from the message into the Command Bar and press Enter. It turns sandboxing off for the shell, its descendants and its parents.
The shell only loads on the server
A LocalScript required ServerScriptService.Engine. On the client, require ReplicatedStorage.Engine.
The shell belongs in ServerScriptService
The Engine module is somewhere else, such as ReplicatedStorage or Workspace. That would replicate the whole engine, including server code, to every client. Move it back to ServerScriptService.
This shell is outdated
The engine needs a newer shell. In the plugin, switch update models or reinstall Engine. Your configuration is kept.
ReplicatedStorage.Engine never appears
The client copy is created when the server boots Engine. Check that:
ServerScriptService.Engine.Loaderexists and is enabled.- The server Output shows no Engine error at start-up (see the messages above).
- Your LocalScript uses
WaitForChild("Engine").
Getting modules
Errors about Api after an update
Attempt to get DataService::Api (not a valid member)
attempt to call missing method 'Api' of tableThe script was written for Engine 1.0.0, where GetService, GetSystem and GetPackage returned a handle and :Api() loaded the module. Since 1.1.0 they return the module itself, so the :Api() step no longer exists. Remove it: Engine:GetService("DataService"):Api() becomes Engine:GetService("DataService"). See Updating from 1.0.0.
Errors about a callback member
ShouldDeliverCallback is a callback member of TextChannel; you can only set the callback value, get is not available
OnServerInvoke is a callback member of RemoteFunction; you can only set the callback value, get is not availableEngine 1.1.0 and older read callbacks that Roblox only lets scripts set. The first message comes from Engine:GetSystem("ModerationSystem") in a game that uses TextChatService, the second from reading NetworkService.OnServerInvoke or NetworkService.OnClientInvoke. Both are fixed in Engine 1.1.1. With automatic updates, every server started since that release runs the fix. With manual updates, click Update to v1.1.1 in the plugin.
No service named "X" exists
The name is misspelled or wrong in case (DataService, not Dataservice). Check the sidebar of these docs for the exact names. Remember to use the right getter: GetService, GetSystem or GetPackage.
"X" is a client service / no client service named "X"
The module does not exist on this side. See Server and Client.
Attempt to get X::Y (not a valid member)
You read or assigned a member that the module does not have, usually a typo. Check the module's page for the right name.
Configuration
My settings have no effect
- The configuration module must be named exactly after the module, and be inside
ServerScriptService.Engine.Configuration(directly, or one folder deep). Generalmust be directly insideConfiguration.- Settings are read once when the module loads. Stop and start the test after changing them.
- A setting that is a table replaces the whole default table. See Configuration.
Configuration/X must return a table
The configuration module must end with return { ... }.
X override is disabled (AllowXOverride = false in Configuration)
Your configuration forbids passing that parameter in calls. Remove the argument from the call, or remove the Allow...Override setting.
Data
Data does not save in Studio
Turn on Game Settings > Security > Enable Studio Access to API Services. Without it, DataService uses a temporary in-memory store that is cleared after each test.
"The profile does not exist"
StartSessionAsync only creates new profiles with Create = true. See DataService.
Does not exist / is not a table
Engine: DataService Profile:Set - Stats does not exist
Engine: DataService Profile:Update - Coins is not a table
Engine: Patch - Stats does not existSince Engine 1.2.0, profile:Set and profile:Update on DataService profiles, and Patch.Set, no longer create missing tables on a path, and no longer replace a value on the path that is not a table. The message names the part of the path that is the problem, and nothing was changed. Create the table first, for example with profile:Set("Stats", {}), or add it to your profile store's template so profile:Reconcile() adds it to existing profiles. The last key of a path may still be new. See Updating from 1.1.1.
When the message names the ProfilePath of EconomySystem or InventorySystem, such as Economy is not a table, your own data holds a value where that system keeps its record. Move your value, or give the system another ProfilePath.
With automatic updates, every server started since the 1.2.0 release has this rule. With manual updates, it applies once you click Update to v1.2.0 in the plugin.
Granting receipts without a profile store
Engine: MonetizationService - granting receipts without a profile store; bind one (:BindProfileStore or ProfileStoreName) so a purchase can never be granted twice across serversMonetizationService granted a developer product without a profile store, so it only remembers that purchase on this server. Since Engine 1.2.0 it no longer picks the first profile store a player session starts in. Call MonetizationService:BindProfileStore(PlayerData) with your player profile store before players join, or set ProfileStoreName in its configuration. Records already saved in that store are used again as soon as it is bound. See Where purchases are stored.
Plugin
| Message | Fix |
|---|---|
| Engine can only be installed or changed while editing, not during a playtest. | Stop the playtest first. |
| Studio is recording another change right now. | Wait a moment and try again. |
| Engine is already installed at ... | Use the existing install, or uninstall it first. |
| Found N Engine installs in ServerScriptService | Remove the extra copies. The plugin manages the first one listed. |
| Could not download Engine (asset ...) | Roblox could not deliver the engine to Studio. Check your connection and try again later. |
Still stuck?
Report the problem. Include the full Output message, whether you use automatic or manual updates, and the result of Engine:GetBootInfo() if Engine starts. For questions that are not about a problem, contact Arthonier through arthonier.com/contact.