-- Decompiled source will appear here.
Drop a compiled Lua 5.1–5.3 chunk and get readable source back. Everything runs in your browser — your file is never uploaded.
-- Decompiled source will appear here.
The decompiler is compiled to WebAssembly and runs in a background worker. No server ever sees your bytecode.
Constant folding, string and cipher decryption, table and alias inlining, dead-code removal and local renaming.
Linearizes JMP-spaghetti from flattening obfuscators before decompiling, so the output reads top to bottom.
Lua scripts are often shipped precompiled with luac as bytecode (.luac files, or .lua files that start with \x1bLua). A decompiler reads that bytecode and reconstructs equivalent Lua source code you can read and edit. Local variable names are usually not stored in bytecode, so they come back as generated names like _p0 or _v5.
Standard Lua 5.1, 5.2 and 5.3 bytecode, including Lua 5.2 files whose debug information has been corrupted by obfuscators. Lua 5.4 and LuaJIT bytecode are not supported yet.
No. The decompiler is written in Rust and compiled to WebAssembly; it runs inside your browser in a background worker. Your file never leaves your computer.
Choose Deobfuscate. After decompiling, it runs passes that fold constant expressions, decrypt encoded strings, inline table and function aliases, remove dead code and rename locals. If the result is a tangle of jumps, also turn on Unflatten control flow — it undoes control-flow flattening before decompiling.
Compilation throws away comments, formatting and most names, and the compiler rewrites some constructs. The decompiled code is meant to behave the same, not to match the original text. Decompilation is not perfect — if a file produces wrong output, please open an issue.
Yes. The same decompiler is available as an open-source command-line tool — see the GitHub repository.