AST-based JavaScript obfuscator

Turn readable code into a black box.

Nebula parses your script into a real syntax tree — not regex tricks — then renames, encrypts, and restructures it. The logic runs exactly the same. Reading it by eye does not.

Real parser, no regex Built entirely in-house 14 protection layers

Fourteen layers of protection

Rename identifiers

Variables, functions, and parameters are replaced with short, meaningless names throughout the tree.

Encrypt strings

String literals are encoded and decoded at runtime, so plain text never sits in the source.

Disguise numbers

Numeric literals are rewritten as hex values or small expressions that evaluate to the same result.

Flatten control flow

Linear logic is reshaped into a state-driven switch loop, hiding the original execution order.

Inject dead code

Unreachable branches and decoy logic are scattered through the output to confuse static analysis.

Bytecode VM pass

Selected logic is compiled into a small custom instruction set, run by an interpreter bundled into the output.

Minify

Whitespace, comments, and line breaks are stripped once every other pass is done, shrinking the final file.

Split strings

Each encrypted string is broken into chunks and reassembled at runtime, so no single value holds the full payload.

Shuffle string pool

The physical order of encrypted strings is randomized, breaking any assumption that index order matches usage order.

Shift string index

String accessor indices are offset by a random amount before lookup, decoupling the visible index from the real one.

Hex string index

String indices are passed as hexadecimal strings rather than plain numbers, adding another layer of noise to trace.

Wrap string calls

Random wrapper functions are scattered through the output, each forwarding to the real string decoder unpredictably.

Self-defense

A canary function detects if the output has been reformatted or beautified, and disrupts execution if tampering is found.

Disable console

Overrides console.log and friends at runtime, so debugging output stays silent in production.

Unicode-escape strings

Remaining string literals are written as \u escape sequences in the final output, hiding readable text at a glance.

How it works

  1. 01

    Paste or upload your script

    Drop your source straight into the input editor, or upload a .js file from your machine.

  2. 02

    Choose your techniques

    Toggle any combination of the protection layers to match how aggressive you want the output to be.

  3. 03

    Copy or download the result

    Grab the obfuscated file straight from the output panel once the pipeline finishes.

Good to know

Does obfuscation change behavior?

No. Every pass preserves the exact runtime behavior of your script — only its readability changes.

Is there a daily limit?

Yes, each account has a daily run limit shown in the workspace. It resets at midnight UTC.

Do I need approval to use it?

New accounts start unauthorized. Sign up, then use the chat button (bottom-right, once signed in) to send your account ID and request access — it's the fastest way to reach support.

Is my code stored anywhere?

Your source is sent only to process the obfuscation request — the interface itself keeps nothing beyond your daily usage count.

Support