Scripts

getscriptbytecode

Returns the decompressed bytecode string for a Roblox script object.

Syntax

getscriptbytecode(script: userdata): string | nil

Arguments

NameTypeDescription
scriptuserdataScript object to read. Supported ClassName values are ModuleScript, LocalScript, CoreScript, and Script with RunContext Client.

Returns

NameTypeDescription
bytecodestring | nilDecompressed bytecode bytes as a Luau string, DecompressBytecode error text bytes, or nil when no usable embedded bytecode is available.

Description

Returns the decompressed bytecode string for a Roblox script object. getscriptbytecode is registered to the same behavior as dumpstring, so its behavior is identical. The argument must be object. The bytecode behavior accepts ClassName values ModuleScript, LocalScript, CoreScript, and Script. For Script, RunContext must be Client. If ClassName is missing, the function raises "Invalid Instance". If ClassName is not one of the supported script classes, it raises "Script expected". If the value is a Script with another RunContext, it raises "Expected a Script with RunContext set to Client". If the embedded bytecode reference is invalid or the stored bytecode length is 8 bytes or less, the function returns nil. Otherwise it decompresses the stored bytecode with DecompressBytecode and returns the resulting bytes as a Luau string. Hash mismatch, too-short compressed data, or ZSTD decompression errors are returned as their error text bytes by DecompressBytecode rather than being raised here.

Call it with 1 parameter(s): script. The argument table explains which values are required and which ones only refine the behavior.

It returns bytecode (string | nil). Use the returns table to separate successful values from nil results and recoverable errors.

Example

Read decompressed bytecode from a supported Roblox script Instance.

local targetScript

for _, descendant in ipairs(game:GetDescendants()) do
    if descendant:IsA("LuaSourceContainer") then
        targetScript = descendant
        break
    end
end

if targetScript then
    local bytecode = getscriptbytecode(targetScript)
    print(bytecode)
end