Skip to content

Luau Run · Guides · Roblox studio

Roblox Studio lane

The Studio lane runs *.spec.luau files with the full Jest surface in a Roblox Studio that Luau Run starts and stops. Studio settings lists its settings.

  • Roblox Studio, installed. Luau Run finds it through Studio’s own settings, or through Fishstrap, Bloxstrap, Froststrap or Voidstrap.
  • Rojo, usually the version the project pins with Rokit or Aftman. See How each tool is chosen.
  • The project’s packages, installed with pesde install or wally install, when its Rojo project mounts a packages folder.
  • The supervisor, from luau-run setup.

luau-run doctor shows which Studio and which Rojo a run would use. A Studio path you name, with LUAU_RUN_STUDIO_EXE or [paths] studio, always wins, even after Studio updates and the file is gone. Remove it to go back to the Studio Luau Run finds.

Set default-runtime = "roblox" to use Roblox Studio by default, add a runtime rule to send the Roblox folders there, or pass --runtime roblox for one run. A spec that requires by Roblox instance path, such as require(ReplicatedStorage.Shared.Thing), needs rojo-project under [test.roblox-studio], naming the Rojo project that builds the place. init writes it. Requires says how those requires are followed. To run specs in your whole place instead, see Which DataModel the specs run in.

A spec that loads Jest from the project’s own packages, such as require(ReplicatedStorage.Packages.JestGlobals), gets Luau Run’s Jest instead. See Your project’s Jest globals.

  1. Luau Run chooses Studio, Rojo and the supervisor.
  2. It reads each spec and the files the test place is built from.
  3. It builds the test place with Rojo, in a temporary folder outside your project.
  4. It starts Studio on that place with a script that runs the specs.
  5. Each file’s result comes back over a local connection as the file finishes.
  6. Once every result is in, Luau Run ends Studio and removes the temporary folder.

Nothing is installed into Studio, and nothing is written into your project or your plugins folder. Studio adds the test place to its recent files, as it does for any place it opens.

By default Studio runs on a private desktop that Luau Run creates for the run, so no window opens on yours. When it is not available, the run is refused rather than showing a window. Set visibility = "visible" to run anyway. The private desktop only hides the window.

By default Luau Run ends Studio once every result and its cleanup have come back, without waiting for Studio’s slow exit. The end of Studio’s log may then be missing. Set shutdown = "normal" to wait for Studio to exit by itself.

luau-run.toml
[test.roblox-studio]
visibility = "visible" # or --studio-visibility visible
shutdown = "normal" # or --studio-shutdown normal

Either way, a failed test stays failed, and a cancelled run or a cleanup that did not finish never becomes a pass.

Luau Run starts Studio without your plugins, so a result does not depend on which ones you have. Roblox’s built-in plugins still load. This uses --disableLoadUserPlugins, a command-line argument Studio reads but does not document. Roblox Corporation could remove it in a future Studio version.

A run uses one Studio at a time: the Studio specs in a run share one place and one session, whatever --workers says. Each file gets a fresh Jest runtime and environment, but the DataModel is shared, so a test must clean up the Instances, tasks and connections it creates. --isolated gives each file its own place and its own Studio.

The Studio lane uses only files inside the folder the run started in, and a link must lead inside it too. pesde links a workspace’s packages to each other, so a package’s links lead out of its own folder. In a pesde workspace, put luau-run.toml in the workspace’s folder, with roots and rojo-project naming the package’s paths. One luau-run.toml names one rojo-project.

  • The lane runs on Windows only, as Luau Run does.
  • Specs run in the server DataModel in Run mode or in the edit DataModel, never in a client.
  • Each run starts its own Studio and ends it. None is kept open between runs.

© 2026 PRMS Developer