This fork of webcrack is intended as a stopgap measure until upstream is ready for my changes (see the Upstreaming plan section).
Note
@itsharper/webcrack has not yet been published to NPM
- Compatible with node.js 22 and 24 (but not older)
- Uses babel 8 beta (TODO)
- Can be used from bundler-free Typescript projects without enabling
skipLibCheck(and type-safety is improved withskipLibCheckenabled) (TODO)- Babel 8 being ESM-only is a core enabler of this
All of my changes can be upstreamed once upstream is ready to do the following:
- Update
isolated-vmto version 6 or later- Requires node.js 18 usage to drop (see j4k0xb#184 (comment))
- Update to babel 8
- In beta as of August 2025
webcrack is a tool for reverse engineering javascript. It can deobfuscate obfuscator.io, unminify, transpile, and unpack webpack/browserify, to resemble the original source code as much as possible.
Try it in the online playground or view the documentation.
- 🚀 Performance - Various optimizations to make it fast
- 🛡️ Safety - Considers variable references and scope
- 🔬 Auto-detection - Finds code patterns without needing a config
- ✍🏻 Readability - Removes obfuscator/bundler artifacts
- ⌨️ TypeScript - All code is written in TypeScript
- 🧪 Tests - To make sure nothing breaks
npm install -g @itsharper/webcrackExamples:
webcrack input.js
webcrack input.js > output.js
webcrack bundle.js -o output-dirnpm install @itsharper/webcrackExamples:
import fs from 'fs';
import { webcrack } from '@itsharper/webcrack';
const input = fs.readFileSync('bundle.js', 'utf8');
const result = await webcrack(input);
console.log(result.code);
console.log(result.bundle);
await result.save('output-dir');