World External · Luau VM

External vs Executor

The concrete differences between the two builds, and how a script written for one gets rewritten for the other.

Side by side

ExecutorExternal
RunsInside the Roblox processIn its own process
Instances areInstance userdatanumber addresses
Reaching the treegame:GetService("Players")find_first_child(get_datamodel(), "Players")
Propertiespart.Transparency = 1write_BasePart_Transparency(part, 1)
Script compatibilityHub scripts drop inScripts are written against this API
Survives Roblox updatesNeeds a module updateNeeds an offset update
Stream proof overlayNoYes

Translating a script

The mechanical part is always the same: replace tree traversal with the explorer functions, and replace property access with the matching offset accessor.

What you would write inside Roblox
-- Executor
local part = workspace:FindFirstChild("Baseplate")
part.Transparency = 0.5
print(part.Name)
The same thing from outside
-- External
local dm = get_datamodel()
local workspace_ = find_first_child(dm, "Workspace")
local part = find_first_child(workspace_, "Baseplate")

write_BasePart_Transparency(part, 0.5)
print(read_name(part))

find_instance_by_path collapses the traversal when you already know where something lives, which is usually the readable option.

The short version
local part = find_instance_by_path("Workspace.Baseplate")
write_BasePart_Transparency(part, 0.5)

What does not port

  • Signals and events. There is no :Connect. Polling on a wait() loop is the pattern.
  • Metatables and hooking. There is no Luau VM inside Roblox to hook. getrawmetatable here operates on your own tables.
  • Remotes. No FireServer. Anything that has to talk to the server has to be driven through the game's own code, which the External does not execute.
  • Anything UNC-specific to in-process work. The UNC surface here covers what makes sense outside the process; the rest has no meaning.

Pick the build for the job

The External is for visuals, memory work and anything where not being inside the process matters. If a script needs to talk to the server, it needs the executor.