Skip to content

Core Concepts

A short mental model makes the rest of the API predictable.

Conduit runs as its own process with its own Luau VM. Your scripts do not run inside Roblox. Instead, Conduit reads and writes the running game through remote memory, and the Lua API is the interface to all of it. This is why the API has a memory namespace and why reading instances goes through Conduit rather than a normal in-game script environment.

Anything that touches the live game (the memory namespace and the game object model) requires Conduit to be attached to a running engine. Check it with memory.IsEnabled before you read, and calls will error clearly if no engine is attached.

The file namespace is confined to a per-user workspace directory. Paths are relative to that directory, and attempts to escape it (absolute paths, .., or symlinks that leave the workspace) raise an error. This keeps script file access contained.

Scripts drive continuous behavior by registering event handlers with cheat.Register:

  • onUpdate runs once per frame. Use it for logic that tracks the game.
  • onPaint runs during the draw pass. Use it with the draw namespace to render overlays, matched to the client frame rate.
  • Lifecycle events like newPlace and characterAdded let a script react to the player moving between places or respawning.

The run command executes a script and prints its output immediately. Loading a script without running it is silent by design. Keep prints intentional and throttled inside frame handlers, since they fire every frame.