Core Concepts
Updates and Versions
How Engine stays up to date. Automatic updates load the newest published engine on every server start; manual updates keep a fixed copy you update from the plugin.
Versions
Engine uses version numbers like 1.0.0: major.minor.patch.
| Part | Changes when |
|---|---|
| Major | Something you use may need to change in your code. |
| Minor | New features, services, systems or packages. Existing code keeps working. |
| Patch | Bug fixes. |
What changed in each version is listed in the Engine Changelog, and what changed in the plugin and the shells it installs in the Plugin Changelog.
The plugin shows the installed version: for manual installs the version stored in your place, for automatic installs the newest version on the Creator Store, which is the one new servers run. The engine's own Version module holds it too.
Two update models
You choose the model when you install, and you can switch at any time in the plugin. Switching keeps your Configuration folder.
Automatic updates
The Engine module in ServerScriptService is a small shell that contains no engine code. Every time a server starts, the shell loads the published engine from Roblox and boots it. New servers always run the newest version; servers that are already running keep the version they started with.
The shell tries three ways to load the engine, in this order, and repeats the round up to three times (waiting 1 and then 3 seconds between rounds):
| Method | Needs |
|---|---|
AssetService:LoadAssetAsync | Allow Loading Third Party Assets in Game Settings > Security, unless the game's creator owns the asset. |
InsertService:LoadAsset | An asset owned by the game's creator or by Roblox. |
require(assetId) | A public module asset. |
If loading takes longer than 10 seconds, the shell warns that it is still waiting on Roblox's asset delivery. If every attempt fails, the server prints a report with each method, how often it failed, why, and what it needs, and Engine does not start. See Troubleshooting.
After booting, the shell sets attributes on itself that you can read in the Explorer while a test runs:
| Attribute | Value |
|---|---|
ShellVersion | The shell's version. |
EngineSource | "Live" when the published engine loaded, "Bundled" when a local copy was used. |
EngineLoadMethod | The method that worked. |
EngineLoadError | The failure report, when Engine could not start. |
Manual updates
The shell contains a full copy of the engine (Engine/MainModule) and always boots that copy. Your game stays on the installed version until you click Update to vX.Y.Z in the plugin, which appears when a newer version is published. Updating replaces the copy and keeps your configuration.
Choose manual updates when you want to test every new version before your players get it, or when your game cannot load third-party assets.
Boot information
Engine:GetBootInfo() (server only) tells you how the running engine was started:
local info = Engine:GetBootInfo()
print(info.Source, info.ShellVersion)| Source | Meaning |
|---|---|
"Live" | Loaded from Roblox by an automatic shell. |
"Bundled" | Booted from the copy inside the shell (manual updates). |
"Direct" | The engine module was required without a shell. |
Shell versions
The shell itself rarely changes. The plugin records which shell it put in as the EngineShellVersion attribute on the Engine module, such as 1.0.0.
If a new engine needs a newer shell, it warns on start: Engine: this shell (v1) is outdated - reinstall Engine from the plugin to get shell v2. Reinstall or switch update models in the plugin to get the new shell; updating a manual install puts in the newest shell too. Your configuration is kept. Shell changes are listed in the Plugin Changelog.
Sandboxed shells
Roblox can insert scripts as sandboxed, which stops the shell from loading the engine. The shell detects this and prints the fix: select Engine in the Explorer and run the command from the message in the Command Bar to turn sandboxing off for the shell and its parents. Installing with the plugin avoids this.
Engine sends nothing to Arthonier
Loading the engine is a normal Roblox asset load. Engine has no telemetry and makes no web requests of its own. The only HTTP requests it can make are ones you configure yourself, such as Discord webhooks in StatisticsService.