Luau Decompiler

Luau Decompiler Online

Decompile Luau bytecode — the dialect Roblox runs — back to readable source.

.luau .luac
Drop your Luau bytecode file here
Choose file

⚠ Drag-and-drop upload could not load — an ad blocker is most likely blocking it. Please disable your ad blocker and reload the page to upload a file.

How It Works

1

Upload

Drop your Luau bytecode file, whatever it happens to be named.

2

Detect & Decompile

The dialect is identified from the file header before decompiling.

3

Browse

Read the recovered Luau source in your browser.

What is Luau?

Luau is the programming language Roblox games are written in. It began as a fork of Lua 5.1 and remains broadly source-compatible with it, but Roblox rewrote the compiler and the virtual machine from scratch. The result is a language that looks like Lua and adds gradual type annotations, new syntax such as compound assignment and continue, and a much faster interpreter — running on a bytecode format that shares nothing with either standard Lua or LuaJIT.

That last point is the one that matters here. Luau bytecode has no \x1b escape header at all: the very first byte of a Luau chunk is the bytecode version number. Standard Lua decompilers check for \x1bLua, find something else, and refuse the file immediately.

Three Lua Bytecode Formats, One Extension

Files from all three implementations get saved as .luac, which is the root of most of the confusion:

You do not have to work out which you have. Upload the file and the header is read for you.

What Roblox Strips

Roblox compiles scripts server-side and ships bytecode with debug information removed. This is a deliberate protection measure and it sets a hard ceiling on what any decompiler can recover:

In practice this means output that reads like source written by someone who names every local v1, v2, v3. The logic is intact and the API calls are legible, which is normally what you are after.

Why Luau Decompilation Is Hard

Beyond the stripping, Luau's compiler is an optimising one. It performs constant folding, dead code elimination, inlining of small functions and loop unrolling before it emits bytecode, so the instruction stream frequently has no one-to-one correspondence with anything the author wrote. A decompiler can only recover a program with equivalent behaviour, not the original text.

Luau also evolves quickly. The bytecode version has been revised repeatedly and new opcodes appear with new engine releases, so a file compiled by a recent Roblox client may use instructions that a decompiler has not been taught yet. When that happens you will get a note explaining it rather than silently wrong output.

Legitimate Uses

Decompiling bytecode you own or are authorised to analyse is ordinary engineering work: recovering your own lost source, auditing a third-party module before you take a dependency on it, investigating a malicious script that appeared in your game, or learning how a technique is implemented. Roblox's Terms of Use govern what you may do with other people's content on their platform, and this tool does not change that — it does not bypass any protection, it only reads bytecode you already have.

Frequently Asked Questions

What is Luau?

Roblox's own dialect of Lua. Derived from Lua 5.1, with gradual typing and new syntax, but a completely different bytecode format and virtual machine. Standard Lua decompilers cannot read it.

Why does my Roblox script fail in a Lua decompiler?

Luau bytecode has no \x1bLua header and a different instruction set, so a standard Lua decompiler rejects the file before reading a single instruction.

Will I get variable names back?

Usually not. Roblox strips debug information, so local names, comments and line numbers are gone. Control flow, string constants and code structure do come back.

Can I decompile a Roblox place or model file?

This tool decompiles Luau bytecode. .rbxl and .rbxm files are containers holding scripts among much else — extract the bytecode first, then upload it.

What is the difference between Luau and LuaJIT?

Unrelated projects. LuaJIT is a just-in-time compiler for standard Lua 5.1 used in servers and games; Luau is Roblox's interpreter and language dialect. Their bytecode formats are mutually unreadable.