# What changed in javascript-obfuscator

> 7 changes in javascript-obfuscator 5 from its official release notes, upgrade guides and advisories: 3 new APIs and options. Each one cited. Sources checked 2026-10-21. HTML: https://unstale.sh/npm/javascript-obfuscator/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## javascript-obfuscator 5

### New APIs and options

- ApiError now carries the machine-readable cause sent by the API; quota refusals use dailyLimit or monthlyLimit. (5.9.0) — [release notes](https://github.com/javascript-obfuscator/javascript-obfuscator/releases/tag/5.9.0)
- Added a Pro API method that returns the usage left on the API key's plan. (5.9.0) — [release notes](https://github.com/javascript-obfuscator/javascript-obfuscator/releases/tag/5.9.0)
- Accepts the alias of a custom preset saved in the obfuscator.io dashboard; obfuscatePro() and the CLI fetch it and merge its options. (5.8.0) — [release notes](https://github.com/javascript-obfuscator/javascript-obfuscator/releases/tag/5.8.0)

### Behavior and default changes

- The Node dist bundle is no longer minified, so uncaught errors print a readable stack frame instead of the whole bundle. (5.9.0) — [release notes](https://github.com/javascript-obfuscator/javascript-obfuscator/releases/tag/5.9.0)

### Fixes and other changes

- Short-circuit evaluation of `&&`, `||` and `??` is no longer broken by controlFlowFlattening. (5.8.1) — [release notes](https://github.com/javascript-obfuscator/javascript-obfuscator/releases/tag/5.8.1)
- Default parameter objects are no longer shared across calls when using transformObjectKeys. (5.8.1) — [release notes](https://github.com/javascript-obfuscator/javascript-obfuscator/releases/tag/5.8.1)
- A VM preset name no longer fails locally when --pro-api-token is set; the name is passed to the Pro API. (5.8.0) — [release notes](https://github.com/javascript-obfuscator/javascript-obfuscator/releases/tag/5.8.0)
