Luau Bytecode Decompiler

Drop your bytecode,
get source back.

upload a compiled luau file and decompile it instantly โ€” no key required

๐Ÿ“‚
Drop compiled file here
or click to browse ยท .luac .luau .lua .lc .bin
๐Ÿ“„
Decompiled Source
https://medaldecompile.pages.dev
POST /decompile HTTP ยท returns decompiled source as plain text
Request
fieldtypedescription
bodybytesluau bytecode encoded as base64
JavaScript Example
const encoded = btoa(String.fromCharCode(...bytecodeBytes)) const res = await fetch("https://medaldecompile.pages.dev/decompile", { method: "POST", body: encoded }) const source = await res.text()
Python Example
import base64, requests encoded = base64.b64encode(open("script.luac", "rb").read()) r = requests.post("https://medaldecompile.pages.dev/decompile", data=encoded) print(r.text)
Responses
200plain text โ€” decompiled luau source
400invalid bytecode โ€” body is not valid base64
WS /decompile_ws WebSocket ยท async batch decompile with message IDs
Send (JSON)
fieldtypedescription
idstringany string, echoed back in response
encoded_bytecodestringbase64 encoded luau bytecode
Receive (JSON)
fieldtypedescription
idstringsame id you sent
decompilationstringdecompiled source code
JavaScript Example
const ws = new WebSocket("wss://medaldecompile.pages.dev/decompile_ws") ws.onopen = () => ws.send(JSON.stringify({ id: "job_1", encoded_bytecode: btoa(String.fromCharCode(...bytecodeBytes)) })) ws.onmessage = e => { const { id, decompilation } = JSON.parse(e.data) console.log(id, decompilation) }
โ„น Base64 required. always encode bytecode to base64 before sending โ€” raw bytes will be rejected.
โ„น Luau only. lua 5.1 .luac bytecode format is different โ€” make sure your file is compiled luau.
โ„น WebSocket for bulk. /decompile_ws lets you send multiple jobs at once, each identified by id.