Automate Lua obfuscation in your CI/CD pipelines, Roblox workflows, or custom tools.
/api/v1/obfuscate
Include your API key in the Authorization header:
Authorization: Bearer stx_YOUR_API_KEY
Generate a free key from the dashboard.
{
"code": "print('Hello World')"
}
{
"code": "local secretKey = 0xDEADBEEF\nlocal function verify(input)\n return input == secretKey\nend\nprint(verify(123))",
"options": {
"useLuaVM": true,
"loaderVMDepth": 3,
"encryptStrings": true,
"proxifyLocals": true,
"proxifyFunctions": true,
"antiTamper": true,
"isLuauRuntime": true,
"controlFlowFlattening": true,
"minify": true
}
}
{
"code": "for i = 1, 1000 do print(i) end",
"options": {
"useLuaVM": false,
"encryptStrings": true,
"proxifyLocals": true,
"minify": true
}
}
{
"code": "print('Protect me with luavm preset')",
"preset": "luavm"
}
| Option | Type | Default | Description |
|---|---|---|---|
useLuaVM | boolean | true | Virtualizes AST into custom LuaVM bytecode with dynamic opcode shuffling |
loaderVMDepth | integer | 3 | Nested VM layers (1-5). Higher = stronger protection |
encryptStrings | boolean | true | Encrypts all string literals, decoded at runtime |
proxifyLocals | boolean | true | Wraps locals into metatable proxy containers |
proxifyFunctions | boolean | true | Wraps functions through callable proxies |
antiTamper | boolean | true | Injects environment verification & anti-hooking checks |
isLuauRuntime | boolean | true | Protects against Luau deobfuscators |
controlFlowFlattening | boolean | true | Flattens execution into state-machine driven blocks |
minify | boolean | true | Strips debug symbols, comments, mangles identifiers |
const response = await fetch('https://syntexxx.of.to/api/v1/obfuscate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer stx_YOUR_API_KEY'
},
body: JSON.stringify({
code: 'print("Hello from Syntexxx!")',
options: { useLuaVM: true, loaderVMDepth: 3 }
})
});
const data = await response.json();
if (data.success) {
console.log('Protected code:', data.code);
} else {
console.error('Error:', data.error);
}
import requests
response = requests.post(
"https://syntexxx.of.to/api/v1/obfuscate",
headers={"Authorization": "Bearer stx_YOUR_API_KEY"},
json={
"code": "local a, b = 10, 20\nprint(a + b)",
"options": {
"useLuaVM": True,
"loaderVMDepth": 3,
"encryptStrings": True,
}
}
)
data = response.json()
if data.get("success"):
print(f"Output size: {len(data['code'])} bytes")
with open("protected.lua", "w") as f:
f.write(data["code"])
else:
print(f"Error: {data.get('error')}")
local HttpService = game:GetService("HttpService")
local response = HttpService:RequestAsync({
Url = "https://syntexxx.of.to/api/v1/obfuscate",
Method = "POST",
Headers = {
["Content-Type"] = "application/json",
["Authorization"] = "Bearer stx_YOUR_API_KEY"
},
Body = HttpService:JSONEncode({
code = "local key = 'VIP'\nprint(key)",
options = { useLuaVM = true, loaderVMDepth = 3 }
})
})
if response.Success then
local data = HttpService:JSONDecode(response.Body)
if data.success then
print("Protected! Size:", #data.code)
end
end
{
"success": true,
"code": "--[[ Syntexxx.of.to ]]--\nlocal ...",
"stats": {
"input_bytes": 35,
"output_bytes": 16420,
"elapsed_seconds": 0.38
}
}
{
"success": false,
"error": "Syntax Error on line 2: ...",
"error_details": {
"line": 2,
"column": 9,
"detail": "no viable alternative at input '='",
"suggestion": "Lua uses '==' for equality."
}
}