Skip to content
Back to blog
September 15, 2026·3 min read

Genesis v2.1

Genesis now supports Roblox's current bytecode format, decompiles large scripts up to 6x faster, and ships a large batch of correctness and naming fixes.

Version 2.1 of Genesis, Soteria's Luau decompiler, is out now.

Bytecode compatibility

Roblox recently moved production scripts from Luau bytecode version 9 to version 11, its current format. Anything compiled since would fail outright with a decompilation failure, not decode incorrectly. Genesis now fully supports bytecode v11, in addition to every version it already supported (v6 through v10), so scripts compiled recently should decompile normally again.

Performance

Large scripts decompile up to 6x faster now. A 200KB script that used to take somewhere in the 30-40 second range now finishes in a few seconds, with identical output to before, just faster. Timings are also far more consistent run to run. Small and medium scripts were never slow and are unaffected.

Correctness

This is the biggest part of the update. A large batch of fixes landed for cases where decompiled output looked plausible but didn't actually behave the same as the original script - the kind of bug that's easy to miss unless you're diffing behavior, not just reading code. Highlights:

  • Fixed several patterns where a loop's own variables could come back undeclared, reading nil instead of their real value, or silently reset to their starting value on every pass instead of carrying forward.
  • Fixed decompiles that were non-deterministic - the exact same input could occasionally come out differently between runs. This is now fully deterministic, verified against repeated runs across our full fixture set.
  • Fixed several cases where a value read more than once wasn't given its own variable, resulting in expensive computations (or side effects) being duplicated instead of reused.
  • Fixed short-circuit expressions (a or b(), cond and A or B) that could drop a call or an entire branch outright, leaving a reference to something that no longer exists.
  • Fixed table swaps and certain closure-captured variables producing incorrect results instead of the actual swap/update.
  • Fixed several cases of duplicated output, including one case where a script's decompiled length was reduced by roughly a quarter after the fix.
  • Fixed guard clauses and early-return patterns being dropped or duplicated at deeper nesting levels (e.g. inside :Connect(function() ... end) callbacks).
  • A broad set of smaller parser and edge-case fixes across branches, closures, string constants, and loop conditions.

Naming & readability

This is where Genesis leaves every other decompiler behind. Most tools stop at generic placeholders - v1, v2, arg0 - and leave you to reverse-engineer meaning out of noise. Genesis doesn't, and as of 2.1, it's not close.

We built the new naming engine on real, raw, unmodified source code pulled directly from a large and diverse set of actual Roblox games, spanning wildly different codebases and developer coding styles, not toy examples or synthetic test cases written to make a demo look good. That's a genuinely significant amount of work behind the scenes, and it shows: Genesis now understands naming conventions the way experienced Roblox developers actually think and write, across an enormous range of real-world patterns, not one narrow style.

The difference shows up immediately. A function that used to come back as function f1(p1, p2, p3) - three meaningless letters and numbers - now reads like function TeleportPlayer(placeId, player, teleportOptions), without you touching a thing. Function bodies, guard clauses, and short-circuit expressions are reconstructed more faithfully too, in far more cases than before, instead of falling back to a more verbose, mechanically "correct" but unnatural equivalent.

The result is decompiled output that reads like it was actually written by a person, not reverse-engineered from bytecode, across a wide range of real-world script patterns. This is a genuine step change, not an incremental one, and we're intentionally not detailing the techniques or heuristics behind it.

Like always if you run into any issues or unexpected behavior, let us know on Discord.

SoteriaSoteria

Secure your Luau scripts and accelerate your developer experience.

Products

  • Oracle
  • Genesis

Tools

  • Script Library
  • DevEx Converter
  • FFlags Directory

Docs & Support

  • Documentation
  • Runtimes

Company

  • About
  • Blog
  • Discord
  • Contact

Legal

  • Terms of Service
  • Privacy Policy
  • Cookie Policy
  • Acceptable Use

© 2026 Soteria. All rights reserved.

SoteriaSoteria
Pricing
Get Started