Built for Luau developers

Obfuscate Luau scripts.Like nobody's watching.

Otter turns your Luau source into an unreadable fortress in seconds. Drop in a script, pick your level, get it back protected.

script.lua → protected.lua98% protected
local function greet(name)
  print("Hello, " .. name)
end

greet("world")
-- vrex obfuscation
-- V2.0
-- [v] b:96fc9bff
local function _b64(s)
 local A='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
 local L={} for i=1,#A do L[A:sub(i,i)]=i-1 end
 local sc=string.char
 local o,n,i={},#s,1
 while i<=n do
  local a=L[s:sub(i,i)] or 0
  local b=L[s:sub(i+1,i+1)] or 0
  local c=L[s:sub(i+2,i+2)]
  local d=L[s:sub(i+3,i+3)]
  o[#o+1]=sc(a*4 + math.floor(b/16))
  if c then o[#o+1]=sc((b%16)*16 + math.floor(c/4)) end
  if d then o[#o+1]=sc((c%4)*64 + d) end
  i=i+4
 end
 return table.concat(o)
end
local function _x(a,b) local r,p=0,1 for _=1,8 do local x,y=a%2,b%2 if x~=y then r=r+p end a,b,p=(a-x)/2,(b-y)/2,p*2 end return r end
local _SB_ORIG, _SC_ORIG, _TC_ORIG = string.byte, string.char, table.concat
local function _vrex2_run(_E, _G_)
  local _srcA = _G_
  local sb, sc = string.byte, string.char
  local concat = table.concat
  local unpack = table.unpack or unpack
  local _KK,_kA,_kC,_kR = 23,191,219,233
  local _SK = {} for kk=0,255 do _SK[kk] = _x((44 + kk*37) % 256, (kk*kk) % 256) end
  local function gb(pp)
    local s1 = (_KK + pp*_kA) % 256
    local s2 = ((pp*pp) * _kC) % 256
    local s3 = (math.floor((pp-1)/256) * _kR) % 256
    return _x(sb(_E, pp), (s1 + s2 + s3) % 256)
  end
  local p = 1
  -- ... bytecode dispatcher elided for preview ...
  return exec(readProto(), {}, {}, 0)
end
local _E = _b64("51M1wzRdOswZGM84WDXDB8xKoWV/jMu+ac3fqS1mVvdRYe1FeOkxrL557xt6b+7OzQ66E6Xt65kJKf/Mbjz9u5Tp53v7cR5v+CCBl/gpozzPHjJt5raFEsz5vZPjSfa3kSRnYxUQOZZ3VUrnnqyty4Ql1yprwU6t6hKxJmghEW+/7eI=")
return _vrex2_run(_E, _G)

Built to protect.

Multi-layer obfuscation engineered to keep your work yours.

Control flow flattening

Restructures logic into opaque, jump-table-driven blocks.

String encryption

Every string locked behind layered runtime decryption.

Blazing fast

Process thousands of lines in under a second.

Variable mangling

Every identifier renamed to noise. Nothing recognizable.

Constant unfolding

Inlined and re-encoded — no constants survive.

Tamper detection

Optional integrity checks halt modified scripts.

Pay only for what you obfuscate.

Credit packs. No subscriptions. No expiry.

Starter

$5/ 100 credits
  • 100 obfuscations
  • All protection layers
  • Email support
Most popular

Pro

$20/ 500 credits
  • 500 obfuscations
  • Priority queue
  • Advanced presets
  • Discord support

Studio

$75/ 2500 credits
  • 2,500 obfuscations
  • Bulk uploads
  • API access
  • Priority support

Questions?

What is Luau?+

Luau is Roblox's typed Lua dialect. Otter is built specifically for it.

Do credits expire?+

Never. Buy once, use whenever.

Is my code stored?+

Scripts are processed in memory and discarded after delivery.

Can I get a refund?+

Unused credit packs are refundable within 7 days.

Ready to lock it down?

Sign up and get 10 free credits to try Otter.