Replaces local variable and parameter names with random identifiers built from visually identical characters. Table keys, field accesses and globals are preserved.
Encodes every string literal as a byte array using a per-position key stream. A small decoder stub is injected at the top of the output — its name is randomised on every run.
Replaces integer literals with arithmetic expressions that evaluate to the same value. Numbers inside strings, hex literals and floats are never affected.
Wraps the entire output inside an immediately-called function and forwards its return value. Keeps ModuleScripts returning correctly and hides scope from static analysis.
Removes indentation, blank lines and comments. Keeps each statement on its own line so the result is always valid Lua — never introduces parser warnings.
Cuts string literals at a safe point and replaces them with a concatenation. Each part is then encrypted individually. Adds minor runtime overhead.
Inserts unreachable dead-code blocks at safe statement boundaries. Significantly increases output size — can exceed Roblox script limits.
Rebuilds decoded strings with the .. operator instead of table.concat. Enable only if your sandbox restricts the standard library. Slightly slower.