Building from source
Using a release needs none of this. See Getting started. The source map says where code lives and how a run passes through it.
- Bun 1.4.0, which runs Luau Run and its tests.
- pnpm 11.23.0, through Corepack, for dependencies.
- The Rust toolchain that
rust-toolchain.tomlpins, for the Windows supervisor (the program that starts Luau Run’s test processes).
TypeScript 7.0.2 is the type checker. The architecture check uses the compiler API of a separately pinned TypeScript 6.0.3.
From the repository’s folder:
corepack pnpm install --frozen-lockfilecorepack pnpm run build:windows # dist\luau-run.execargo build --release --offline --locked -p luau-run-supervisor # target\release\luau-run-windows-supervisor.exebuild:windows stamps the exe with the commit it came from, and --version,
doctor and every receipt show that commit. A build from a tree with
uncommitted changes to tracked files is marked -dirty.
From a checkout, bun src/cli.ts runs the same commands as luau-run, such as
bun src/cli.ts test. self-install refuses there, since there is no
luau-run.exe to place.
To use a Lute that setup did not install, or a supervisor you built, name them
in these variables. A supervisor must match
the pin.
$env:LUAU_RUN_SUPERVISOR_EXE = "C:\path\to\luau-run-windows-supervisor.exe"$env:LUAU_RUN_LUTE_EXE = "C:\path\to\lute.exe"Forward slashes are accepted in these variables.
Checks
Section titled “Checks”corepack pnpm run check:fastcorepack pnpm run typecheckcorepack pnpm run check:architecturecorepack pnpm run check:nativecheck:fast runs every check that needs no provider, with provider switches
and tool variables removed from its environment. The full check,
corepack pnpm run check, also runs live checks on Lute and on
Jest-Portable, Luau Run’s fork
of Jest Roblox. It needs eight variables, named in CURRENT_CONFORMANCE_INPUTS
in scripts/check-current-conformance.ts:
- the Lute, Luau, Lune, pesde and supervisor executables
- the Jest-Portable fork
- Jest Roblox’s source, and the outside packages it bundles, which the fork’s build reads
The Jest-Portable repository holds only the packages. The fork’s build tools and tests, which the full check and the Jest builds below need, are not public.
check:studio launches Roblox Studio and is not part of the full check.
What a build carries
Section titled “What a build carries”build:windows makes an exe that carries none of Luau Run’s own files: the
supervisor, the Jest runner for Lute, and Jest for Roblox Studio. A release exe
carries all three. Both Jest parts are built in the Jest-Portable fork, not in
this repository. To make an exe that carries them, build a release folder from
the fork’s output and embed it. --frameworks names the folder the fork’s
bun run build:lute-artifacts writes. --studio names the Studio framework
set, which holds CandidateReceipt.json, Roblox.luau and packages:
bun scripts/release/release.ts local --out D:\release --frameworks <the fork builder's output> --studio <the Studio framework set>bun scripts/build-cli.ts --embed D:\releaseOr install from a copy of that folder, which uses no network. Put the pinned
Lute archive, lute-windows-x86_64.zip from Lute’s v1.0.1-nightly.20260729
release, in the copy, then run luau-run setup --from on the copy. Keep Lute
out of the release folder itself, which holds only what a release ships.
A build that carries none of these files reads Jest for Roblox Studio from
LUAU_RUN_JEST_ROBLOX_ROOT, which names the pinned
jest-portable-studio-<version>.zip or a folder holding the same files.
The supervisor’s pin
Section titled “The supervisor’s pin”src/manifest/manifest.ts pins the size and SHA-256 of Luau Run’s supervisor
build. The build records the paths of the machine that made it, so the
cargo build above gives the pinned bytes only on that machine. To run your own
build, run bun scripts/pin-supervisor.ts, which rebuilds it and rewrites the
pin, then name it with LUAU_RUN_SUPERVISOR_EXE. Commit the pin with the change
to the supervisor’s source.
© 2026 PRMS Developer