JavaScript obfuscator
Last release 6 days ago
23 Aug 2026
Ships unpredictably
gaps range from 8 days to 1.5 years
Most releases are documented
notes for 36 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
269 releases · first in 2016
Release timeline
269 releases since 2016One column per quarter.
Releases
- 5.6.023 Aug 2026
Release notes2 sources agree
Open source →- Pro API:
obfuscatePronow fall back to the basic local obfuscation API when no Pro feature (vmObfuscationorparseHtml) is enabled, instead of throwing anApiError - Improved
stringArrayEncodingruntime performance
- Pro API:
- 5.5.121 Aug 2026
Release notes2 sources agree
Open source →- Fixed leading whitespace of the source code being stripped without being reflected in the source map, shifting all
sourcesContentand original position mappings. Fixes #1437
- Fixed leading whitespace of the source code being stripped without being reflected in the source map, shifting all
- 5.5.018 Jul 2026
Release notes2 sources agree
Open source →- Pro API: reworked large file uploads — fixed
413 Content Too Largefor ~4.4–4.6MB request bodies, and Blob uploads now send the raw source (blobFormat: 'raw') instead of the JSON request body, so uploads always fit the plan's file size cap
- Pro API: reworked large file uploads — fixed
- 5.4.710 Jul 2026
Release notes2 sources agree
Open source →- Fixed directory obfuscation with a set
sourceMapFileNamemaking all files share and overwrite one.map. Fixes #817 - Fixed CLI
--configfailures hiding the real cause behind a genericCannot open config filemessage. Fixes #1101 - Fixed
sourceMapFileNameending in.js.map(e.g.foo.min.js.map) being mangled in the emitted//# sourceMappingURL=comment. Fixes #1312 - Fixed
URIError: URI malformedcrash whenstringArraywithbase64/rc4encoding processed a string literal containing lone surrogate code units (e.g."[^\uD800-\uDFFF]"). Fixes #1431 - Bumped the production
brace-expansiontransitive dependency to a patched version, resolvingCVE-2026-25547. Fixes #1405
- Fixed directory obfuscation with a set
- 5.4.69 Jul 2026
Release notes2 sources agree
Open source →- Fixed unicode (
\uXXXX,\u{XXXX}) and hex (\xXX) escape sequences of string literals being un-escaped into their literal characters during obfuscation. Fixes #345
- Fixed unicode (
- 5.4.59 Jul 2026
Release notes2 sources agree
Open source →- Fixed
controlFlowFlatteningintermittently dropping arguments of a spread call (e.g.foo(...args)) when it reused a control flow wrapper of a same-arity plain call. Fixes #1423 - Fixed
selfDefendingmaking obfuscated code run several times slower on Bun/JavaScriptCore. Fixes #1421 - Fixed dropped parentheses around an
inoperator inside an arrow body in afor-init, producing unparsable output. Fixes #1419
- Fixed
- 5.4.49 Jul 2026
Release notes2 sources agree
Open source →- Optimized scope identifiers transformer performance
- Optimized identifier renaming performance by reusing scope analysis between transformers
- Fixed
Invalid regular expressionerror when obfuscating code that uses ES2025 RegExp pattern modifiers (e.g./(?i:abc)/). Fixes #1410 - Fixed
SyntaxErrorwhen obfuscating a class that extends a boolean literal (e.g.class C extends true {}). Fixes #1131
- 5.4.321 May 2026
Release notes
Open source →- Fixed
controlFlowFlatteningoccasionally dropping the?.short-circuit onfoo?.(arg)calls, causingTypeError: <X> is not a function. Fixes #1408
Additional notes
Open source →- Fixed
controlFlowFlatteningoccasionally dropping the?.short-circuit onfoo?.(arg)calls, causingTypeError: <X> is not a function. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1408
- Fixed
- 5.4.224 Apr 2026
Release notes2 sources agree
Open source →- Fixed obfuscated code hanging in Bun when
selfDefendingis enabled. Fixes #1404
- Fixed obfuscated code hanging in Bun when
- 5.4.122 Mar 2026
Release notes2 sources agree
Open source →- Fixed
Utils.nodeRequirecausingReferenceError: require is not definedin browser build by making it lazy-evaluated - Fixed missing space between keywords (
return,throw,typeof) and Unicode surrogate pair identifiers in compact mode. Fixes #1112 - Fixed
domainLockbeing case-sensitive — domain values are now normalized to lowercase. Fixes #1182 - Removed
source-map-supportruntime dependency. Usenode --enable-source-mapsinstead. Fixes #1149
- Fixed
- 5.4.022 Mar 2026
Release notes
Open source →- Add support for
import attributes. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1256 - Add
renamePropertiessupport for private class fields and methods (#foo,#bar()). Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1220 - Fixed
reservedNamesnot preserving class method and property names whenstringArrayordeadCodeInjectionis enabled. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1279 - Fixed infinite loop / stack overflow when
reservedNamespatterns match all generated identifier names. Now throws a descriptive error instead. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1382 - Fixed
transformObjectKeyschanging evaluation order when object expression is inside a sequence expression with preceding side effects (e.g.return aux(ys), { min }). Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1246 - Fixed destructuring patterns inside class static blocks not being renamed when
renameGlobalsis disabled. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1141 - Fixed CLI
--options-presetnot applying preset values for options not explicitly set via command line (e.g.splitStringsfromhigh-obfuscationpreset was ignored). Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1236 - Replaced
mkdirpdependency with nativefs.mkdirSync({ recursive: true }). Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1275. Thank you https://github.com/roli-lpci! - Updated reserved DOM properties list, fixing
renamePropertiesbreaking modern built-in methods likeArray.prototype.at(). Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1066 - Replaced
confdependency with custom implementation usingenv-pathsand nativefs
- Add support for
- 5.3.121 Mar 2026
Release notes
Open source →- Fixed class expression name references inside class body being incorrectly resolved to an import binding with the same name, causing broken code at runtime. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1386
- 5.3.04 Feb 2026
- 5.3.0-beta.03 Feb 2026pre-release
Nothing published for this version
- 5.2.128 Jan 2026
Release notes
Open source →- Fixed
transformObjectKeysincorrectly hoisting object literal outside of loop when loop body is a single statement without braces, causing all iterations to share the same object reference. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1300 - Fixed parsing error when
awaitis used as an identifier in non-async context. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1127 - Fixed
deadCodeInjectioncausing SyntaxError whenargumentsfrom collected block statements was injected into class field initializers or static initialization blocks. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1166 - Fixed
transformObjectKeyswithmangledidentifier generator causing variable shadowing when extracted object variable name matched an existing inner scope variable. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1232
- Fixed
- 5.2.027 Jan 2026
Release notes
Open source →- Skip obfuscation of
process.env.* - Fixed
controlFlowFlatteningbreaking short-circuit evaluation with spread operator and conditional objects. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1372 - Fix Annex B function hoisting: block-scoped function declarations are now correctly linked to references outside the block in non-strict mode
- Fixed
NodeUtils.cloneRecursivecorruptingrangeproperty when cloning AST nodes, causing scope analysis to incorrectly resolve destructuring default parameter references
- Skip obfuscation of
- 5.1.013 Dec 2025
Release notes
Open source →- Add
versionparameter to theapiConfigto use different versions JavaScript Obfuscator Pro via API
- Add
- 5.0.17 Dec 2025
- 5.0.06 Dec 2025
- 4.2.27 Dec 2025
Nothing published for this version
- 4.2.14 Dec 2025
- 4.2.030 Nov 2025
Release notes
Open source →- Dropped support of Node versions 17 and below
- Fix
transformObjectKeysperformance in some edge-cases - Fix
controlFlowFlattening+ optional chaining compatibility. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1325 - Don't obfuscate import.meta.*. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1267
- Revert
Improved stringArray calls wrapper templatescommit. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1330 - Fix error when ClassExpression is the CallExpression callee. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1132
- Don't publish root index.ts files to NPM. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1252
- Update
class-validatorversion. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1324 - Update other dependencies
- CLI: support
.mjsand.cjsextensions. Kudos to https://github.com/javascript-obfuscator/javascript-obfuscator/pull/1301
- 4.1.115 Jun 2024
Release notes
Open source →- Update supported Node.js versions up to
node@22. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/pull/1100 - Update
class-validatorversion. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1247 - Fixed CI
- Update supported Node.js versions up to
- 4.1.05 Sept 2023
- 4.0.213 Feb 2023
- 4.0.111 Feb 2023
Release notes
Open source →- Update
class-validatordependency https://github.com/javascript-obfuscator/javascript-obfuscator/pull/1146
- Update
- 4.0.014 Feb 2022
Release notes
Open source →- Breaking change:
debugProtectionIntervaloption now accepts value in milliseconds instead ofbooleanvalue. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1031
- Breaking change:
- 3.2.714 Feb 2022
Release notes
Open source →- Fixed cases when dead code is added to the inner code of
evalexpressions. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1053
- Fixed cases when dead code is added to the inner code of
- 3.2.612 Feb 2022
Release notes
Open source →- Improved integration between
renamePropertiesandcontrolFlowFlatteningoptions. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1053
- Improved integration between
- 3.2.59 Feb 2022
Release notes
Open source →- Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1056
- 3.2.47 Feb 2022
Release notes
Open source →- Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1052
- 3.2.37 Feb 2022
Release notes
Open source →- Fixed missing transformation of string array calls in some cases
- Fixed generation of reserved identifier names like
MaporSetformangledandmangled-shuffledidentifier names generators
- 3.2.26 Feb 2022
Release notes
Open source →- Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1039
- 3.2.15 Feb 2022
- 3.2.05 Feb 2022
Release notes
Open source →- New options:
stringArrayCallsTransformandstringArrayCallsTransformThreshold - Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/pull/1046
- New options:
- 3.1.029 Jan 2022
- 3.0.129 Jan 2022
- 3.0.017 Oct 2021
Release notes
Open source →- Breaking change:
ignoreRequireImportsoption renamed toignoreImports - Breaking change:
rotateStringArrayoption renamed tostringArrayRotate - Breaking change:
shuffleStringArrayoption renamed tostringArrayShuffle ignoreImportsnow ignoresdynamicimports in addition torequireimports
v2.19.1
- Updated
@javascript-obfuscator/escodegenwith fixed parenthesis ofdefault exportIIFE
v2.19.0
- Fixed very rare cases when
rotateStringArraycouldn't rotate array properly - Improved
selfDefendingoption - Installed
npmpackage now hastypesdirectory and doesn't havesrcdirectory - Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/959
v2.18.1
- Updated
@javascript-obfuscator/escodegenwith fixed generation of private property names
v2.18.0
- Added support of
es2022features: private identifiers and class properties - Dropped support for
node@15 - Increased minimum supported
nodeversions:^12.22.0 || ^14.17.0 || >=16.0.0
v2.17.0
- New option:
sourceMapSourcesModeallows to controlsourcesandsourcesContentfields of the source map inputFileNameoption now required when using NodeJS API andsourceMapSourcesModeoption hassourcesvalue`- Fixed some cases with wrong source map file name generation when
sourceMapFileNameoption is set
v2.16.0
stringArrayWrappersType: 'function'now generates different indexes between each wrapper inside the same lexical scopestringArrayWrappersType: 'function'now generates different parameters order between each wrapper inside the same lexical scopestringArrayWrappersType: 'function'now appendsFunctionDeclarationfunctions instead ofFunctionExpressionfunctions. This allows to append these wrappers at random positions inside each scoperenamePropertiesoption now won't generate duplicated property names in some cases
v2.15.6
- To increase performance and prevent possible runtime errors
transformObjectKeysoption now completely ignores objects withCallExpressionorNewExpressionnodes. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/948
v2.15.5
- Improved
stringArraycalls wrapper decode code
v2.15.4
- Improved
stringArraycalls wrapper code
v2.15.3
- Slightly improved integration between
deadCodeInjectionandstringArrayWrappersChainedCallsoptions
v2.15.2
- Fixed invalid behaviour of
transformObjectKeysoption when object values containsthisreferences. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/937
v2.15.1
- Hotfix:
domainDest=>domainLockRedirectUrloption rename
v2.15.0
- Added
domainDestoption that option allows the browser to be redirected to a passed domain if the source code isn't run on the domains or URL specified bydomainLock. Thank you https://github.com/erikdubbelboer! ObfuscationResultobject now containsgetOptionsmethod to get options that were used during obfuscation
v2.14.0
- Added
identifierNamesCacheoption for reading and writing identifier names cache. SeeREADME.md. - CLI: Added
--identifier-names-cache-pathoption for reading and writing identifier names cache. SeeREADME.md.
v2.13.0
- Fixed invalid code generation for start/middle rest arguments when
controlFlowFlattenigoption is enabled. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/920 - Internal: Added support of
node@16and dropped support ofnode@10. This should not affect obfuscated code
v2.12.0
stringArraycalls wrappers now inserted asFunctionDeclarationnodes at random indexes
v2.11.1
- CLI: now it's possible to specify the path to the input file after specifying the obfuscator options. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/904
v2.11.0
- Added option
renamePropertiesModeto switch between newsafeand oldunsafemodes ofrenamePropertiesoption. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/878 renamePropertiesoption now works insafeway by default
v2.10.7
- Fixed CVE-2019-18413. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/880
v2.10.6
- Added support of
top-level await. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/884
v2.10.5
- Fixed invalid code generation for rest arguments when
controlFlowFlatteningoption is enabled. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/887
v2.10.4
- Fixed invalid behaviour of
numbersToExpressionsoption for float numbers. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/882
v2.10.3
- Fixed
simplifyoption regression after2.10.2. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/864
v2.10.2
- Fixed behavior of
simplifyoptions when a node with a single-statementbodyis inside simplifiedIfStatementnode. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/860
v2.10.1
- Removed padding characters from all base64 encoded strings. Removed RegExp that trims padding characters from
base64encoded strings fromatobcode helper to prevent mutation ofRegExp.$1value during calls to thestringArray. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/829
v2.10.0
- Improved
rotateStringArrayoption
- Breaking change:
- 2.19.117 Oct 2021
Nothing published for this version
- 2.19.09 Aug 2021
Nothing published for this version
- 2.18.123 Jul 2021
Nothing published for this version
- 2.18.023 Jul 2021
Nothing published for this version
- 2.17.019 Jul 2021
Nothing published for this version
- 2.16.016 Jul 2021
Nothing published for this version
- 2.15.615 Jul 2021
Nothing published for this version
- 2.15.522 Jun 2021
Nothing published for this version
- 2.15.417 Jun 2021
Nothing published for this version
- 2.15.316 Jun 2021
Nothing published for this version
- 2.15.213 Jun 2021
Nothing published for this version
- 2.15.111 Jun 2021
Nothing published for this version
- 2.15.010 Jun 2021
Nothing published for this version
- 2.14.031 May 2021
Nothing published for this version
- 2.13.023 May 2021
Nothing published for this version
- 2.12.012 Apr 2021
Nothing published for this version
- 2.11.17 Apr 2021
Nothing published for this version
- 2.11.07 Mar 2021
Nothing published for this version
- 2.10.728 Feb 2021
Nothing published for this version
- 2.10.628 Feb 2021
Nothing published for this version
- 2.10.528 Feb 2021
Nothing published for this version
- 2.10.425 Feb 2021
Nothing published for this version