docs
This is a decompiler for Luau bytecode. It turns compiled scripts back into readable source, and marks anything it isn't sure about instead of guessing.
quickstart
on the site
Drop a compiled file on the home page. .rbxl/.rbxm files work too (or their XML versions). They open in your browser, only the bytecode is sent, and you get the file back with every script decompiled.
on discord
In our Discord server, run /decompile with your file attached. You get the source back as a .luau file only you can see. It starts on balanced, or pick another preset in the command. You need the Verified role (/verify) and an account at least 7 days old.
in an executor
Run this, then use decompile like you normally would. Your executor needs WebSocket.connect and getscriptbytecode. Options, keys and errors are on the stream page.
shared.UNREADABLE_KEY = "ugk_..." -- optional: decompile as your account
loadstring(game:HttpGet("https://unreadable.gg/decompile.lua"))()over http
Send the compiled file as the body. You get JSON back with the source, a verdict and notes. The API page has Python, JavaScript and options.
curl.exe https://api.unreadable.gg/v1/decompile \` -H "Content-Type: application/octet-stream" \` --data-binary @module.luac"@module.luac"
what's the price?
You get 100 free decompiles a day, no account needed. The site, the executor and the API share them, and they reset at midnight UTC. One connection is one IP address (with IPv6, one /64 range). The Discord bot has the same limit, counted per Discord account.
verdicts
Every result has a verdict. It tells you how much to trust the source.
| decompiled-unverified | Everything decompiled, nothing marked. It isn't recompiled or run to check, so it's our best answer, not a proof. |
| marked | Some spots couldn't be printed exactly. Each one gets a -- unreadable: comment instead of a guess. |
| refused | Some functions couldn't be decompiled. Each one is a stub that errors if called, with its instructions beside it. Everything else is still there. |
The notes say what was marked or refused, and where.
which preset should I use?
Use balanced if you don't want to think about it.
Use faithful if you want source that compiles to the same bytes, or stack traces that point into the right function. Just know it can be quite verbose.
Use readable if you want the cleanest result. It turns every switch on, so names, types and line numbers can differ from the original.
The site, the executor and the Discord bot start on balanced. The API and the MCP server start on faithful. Every preset runs the same as your original. Details are on readability.
the other pages
Requests, responses, options, errors, limits, keys and accounts.
requestresponseoptionsnoteserrorslimitsfree tierkeys and accountsdecompiler versionThe executor client, and many decompiles over one WebSocket.
executor clientconnectingjobserrorsreconnecting