AST INTERPRETER CUSTOM BYTECODE NO loadstring

INPUT · your Luau source parser

OUTPUT · VM build unparser → vm

How it works. Your code is tokenized → parsed into an AST → serialized into a custom numeric "bytecode" tree (the unparser) → embedded in a tree-walking VM interpreter written in Luau. The VM walks the encrypted instruction tree directly, so the output never calls loadstring/load — there is nothing to hook. Strings are XOR-encrypted into a constant pool, every node type is re-numbered with a random opcode map each build, all VM internals are name-mangled, junk is injected, and an integrity check refuses to run if the bytecode/constant tables are edited. Scope: targets Roblox/Luau executors (uses getfenv for globals). Best-effort type-annotation stripping is included; very exotic typed Luau may need types removed first. Tree-walking is correctness-first, so expect slower hot loops than native.