Minify shrinks your code with Terser — compress and mangle. Obfuscate turns it into an unreadable, self-protecting build — string arrays, control flow flattening, dead code and debug traps (obfuscator.io engine). Both run entirely in your browser; nothing is uploaded.
⚠ This looks like an ES module (import/export, or a top-level await) — enable Module in the options below, or minification may fail or drop the wrong thing.
⚠ High obfuscation makes the output much larger and slower to run — use it only for code you really need to protect.
Minify runs Terser — it compresses (dead code, folded constants) and optionally mangles identifiers to shrink file size while keeping the code runnable and, if you want, readable variable behavior via safe presets. By default it keeps @license/@preserve comments even when everything else is stripped, matching Terser's own default — turn off Preserve license comments if you track licensing separately and want them gone too.
Obfuscate runs the obfuscator.io engine to make the code hard to read and reverse-engineer: literals move into an encoded string array, control flow can be flattened into a dispatcher loop, and self-defending/debug-protection traps break tampering or opening devtools.
Source maps. Either engine can emit a map back to your original source — as a separate .map file to host alongside the output, or inlined as a base64 data URI in a trailing comment. Module matters here too: top-level await and import.meta need it turned on or Terser's parser rejects them outright, even though ordinary import/export statements parse the same either way.
Cancel. Both engines run in a Web Worker, off the page's main thread, so a heavy preset (control flow flattening plus dead code injection on a large file) doesn't freeze the tab — and Cancel actually stops it, by terminating that worker, rather than just hiding a spinner while the work keeps running underneath.
Both engines are bundled and run fully client-side. Your source code never leaves the browser.