// luau + lua obfuscation

Ship the script.
Keep the source.

wYnFuscate compiles your Lua into a one-off virtual machine with encrypted constants, layered anti-tamper protection, and forensic watermarking. Built for Roblox developers who sell what they write.

free tier, no card required · discord

$ wynfuscate reward.lua --security-tier max

reward.lua · 5 lines

01local function grantReward(player, amount)
02 local stats = player:FindFirstChild("leaderstats")
03 if not stats then return end
04 stats.Coins.Value += amount
05end
vm generation · constant encryption · anti-tamper

reward.obf.lua · virtualized

waiting for input

3

security tiers

15+

compile-time macros

6

lua runtimes

1

unique VM per build

01

What stands between your source and a decompiler

01

Bytecode virtualization

Your script is compiled to a custom instruction set and executed by a VM generated uniquely for every build.

02

Encrypted constants

Strings and numbers never appear in plaintext. Constants are decrypted at runtime, with macros available when individual values need even stronger protection.

03

Active anti-tampering

Multiple anti-tamper methods, both virtualized and non-virtualized, are layered through every build for defense in depth.

04

Forensic watermarking

Every build can carry a forensic watermark, so if a protected script leaks you can identify which build it came from.

02

Your code, your rules

Obfuscation is a trade-off between protection and speed, and you should be the one making it. Compile-time macros give you line-level control: keep a hot loop native, encrypt one specific string, or lock down a single callback, all without touching your build pipeline.

all macros & options →
JIT / JIT_MAXMark hot functions for JIT-friendly output
NO_VIRTUALIZEExclude performance-critical loops from the VM
ENC_STRING("...")Inline string encryption at the call site
ENC_NUM(...)Encrypt individual numeric constants
ENC_FUNC(...)Encrypt an entire function body
SECURE_CALL(...)Protect function references from hooking
SECURE_CALLBACK(...)Harden callbacks passed across boundaries
IS_CALLER_WYNFUSCATE()Validate the call chain at runtime
03

Pick your poison

--security-tier standard

Standard

Baseline virtualization and constant encryption. Fastest output, available on every plan.

--security-tier enhanced

Enhanced

Deeper control-flow protection and additional runtime checks with moderate overhead.

--security-tier max

Max

Every layer enabled. Built for scripts where protection outweighs all other concerns.

enhanced and max require a pro plan or above

04

Runs where Lua runs

Luau (Roblox)primary target, extensively tested
Lua 5.1full support
LuaJITfull support
Lua 5.2full support
Lua 5.3integer and bitwise ops
Lua 5.4latest stable

Closures, metatables, coroutines, task.spawn, sandboxed environments: the VM handles the awkward corners of the language, not just the happy path. Roblox is the primary target, but output runs anywhere the source did.

Built in the open, argued about on Discord

wYnFuscate ships updates constantly, and most of them start as a bug report or feature request from the community. If something breaks, tell us and we will chase it down. If something is missing, there is a decent chance it lands in the next release.

# automate it later

$ curl -X POST https://wynfuscate.com/api/v1/obfuscate \

-H "Authorization: Bearer $WYN_KEY" \

-F "file=@build/main.lua" \

-F "securityTier=ENHANCED"

# rest api on pro and enterprise plans