unreadable.gg

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.

copy
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.

copy
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-unverifiedEverything decompiled, nothing marked. It isn't recompiled or run to check, so it's our best answer, not a proof.
markedSome spots couldn't be printed exactly. Each one gets a -- unreadable: comment instead of a guess.
refusedSome 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

api

Requests, responses, options, errors, limits, keys and accounts.

requestresponseoptionsnoteserrorslimitsfree tierkeys and accountsdecompiler version
readability

The presets, and what each switch does.

presetsfaithful layoutswitches
stream

The executor client, and many decompiles over one WebSocket.

executor clientconnectingjobserrorsreconnecting
agents

Markdown pages, the OpenAPI schema and the MCP server.

pages for agentsopenapimcp