BUILD IT INTO YOUR WORKFLOW

A simple API.
Serious protection.

Protect your Luau scripts with a single request. Free to use, no API key required.

POSThttps://syntexy.pages.dev/api/v1/obfuscate

Send a JSON object with your source code. Syntexy validates your request, processes the script, and returns protected code with the Syntexy watermark. The alias /api/obfuscate is also supported.

01. Make your first request

JAVASCRIPT / FETCH
const response = await fetch("https://syntexy.pages.dev/api/v1/obfuscate", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    code: 'print("Hello, Syntexy!")',
    preset: "recommended"
  })
});

const result = await response.json();
if (!response.ok || !result.success) {
  throw new Error(result.error);
}
console.log(result.code);

The minimal request is simply { "code": "print('Hello')" }. Recommended protection is applied by default. You can also use preset: "fast" for AST-only protection, "maximum" for five VM layers, or "luavm" as an alias of recommended.

02. Fine-tune every layer

Pass an options object to override your selected preset. All boolean options default to true; VM depth defaults to 3.

OptionTypeWhat it does
useFalconEnginebooleanProprietary multi-layered Luau VM virtualization & anti-analysis.
useLuaVMbooleanVirtualize your code into custom bytecode.
encryptStringsbooleanKeep sensitive string literals unreadable.
proxifyLocalsbooleanWrap local variables in proxy containers.
proxifyFunctionsbooleanProtect function declarations with proxies.
antiTamperbooleanAdd runtime integrity checks.
controlFlowFlatteningbooleanMake execution paths harder to follow.
isLuauRuntimebooleanEnable Luau-specific protection passes.
minifybooleanRemove comments and shorten identifiers.
loaderVMDepthintegerNested VM layers, from 1 to 5. Only used with LuaVM.
{
  "code": "print('Protected')",
  "options": {
    "useLuaVM": true,
    "loaderVMDepth": 3,
    "encryptStrings": true,
    "antiTamper": true,
    "isLuauRuntime": true
  }
}

03. Handle the response

A successful request returns success: true, the protected code, output statistics, and a completion log. Example statistics below are illustrative.

{
  "success": true,
  "code": "--[( Protected by syntexy.pages.dev )]--\n...",
  "stats": {
    "input_bytes": 18,
    "output_bytes": 16420,
    "input_lines": 1,
    "output_lines": 2,
    "elapsed_seconds": 0.38
  },
  "logs": [
    {
      "level": "success",
      "time": "16:20:01",
      "message": "Protection complete. Your script is ready to download."
    }
  ]
}

Syntax errors return HTTP 200 with success: false, an error string and, when available, error_details containing line, column, detail, suggestion, and snippet. Always check both the HTTP status and success.

StatusMeaning
400Invalid JSON, empty/oversized code, unknown preset, or invalid options.
413 / 415Request body too large / unsupported content type.
429Rate limit exceeded. Respect the Retry-After header.
502 / 503 / 504Processing service error, temporary unavailability, or timeout.

04. A few things to know

Try it in the workspace