Skip to content

Luau Run · Guides · Roblox studio

Which DataModel the specs run in

data-model under [test.roblox-studio], or --studio-data-model for one run, is run-server (the default) or edit.

luau-run.toml
[test.roblox-studio]
data-model = "edit"
  • run-server is the server DataModel in Run mode. The physics simulation steps, RunService:IsRunning() is true, and RunService:IsClient() is false. The test place holds the specs and the modules they require.
  • edit is the edit DataModel, at command-bar permission, where run-in-roblox runs specs. RunService:IsClient() is true, the Studio camera exists, nothing in the place starts by itself, physics does not step, and RenderStepped never fires.

The specs in one session share that DataModel, as Files in one session says.

With data-model = "edit" and rojo-project set, the test place is your whole project, as Rojo builds it. A computed require, a module found by walking the tree, and a model file all behave as they do under your own runner. A broken require fails the test that reached it. Luau Run adds one service for Jest and the script that runs the specs, and changes only your project’s Jest globals module.

The whole place is only built for edit. In Run mode your project’s Scripts would start, including any test runner it has.

If a file the project mounts changes, vanishes or appears while Rojo builds, the run is refused. Luau Run also refuses:

  • a spec the project does not mount
  • a project that mounts more than 10,000 files or 256 MiB
  • two Instances of one name where Luau Run has to pick one, for a selected spec or your Jest globals module

Luau Run’s own folder, _LuauRun, goes under the first of TestService, ServerStorage and ReplicatedFirst that your project does not declare. To pick one yourself, set runner-service to one your project leaves free.

luau-run.toml
[test.roblox-studio]
runner-service = "ServerStorage"

In the whole place, .luaurc aliases such as @pkg/JestGlobals are not followed, so a spec that requires through one fails. run-server follows them.

A relative string require in edit follows the place, not your files: require("../../src/Thing") climbs from the spec’s Instance and looks for one named src, so it fails when the Rojo project mounts src under another name.

© 2026 PRMS Developer