{"id":13998343,"url":"https://github.com/pionxzh/wakaru","last_synced_at":"2026-05-24T20:00:48.882Z","repository":{"id":194083351,"uuid":"594278605","full_name":"pionxzh/wakaru","owner":"pionxzh","description":"🔪📦 Javascript decompiler for modern frontend","archived":false,"fork":false,"pushed_at":"2024-09-08T07:51:37.000Z","size":2886,"stargazers_count":447,"open_issues_count":46,"forks_count":25,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-02T05:07:49.032Z","etag":null,"topics":["ast","babel","browserify","debundle","decompiler","javascript","jscodeshift","reverse-engineering","swc","unminify","unpack","webpack"],"latest_commit_sha":null,"homepage":"https://wakaru.vercel.app/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pionxzh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-28T03:12:28.000Z","updated_at":"2025-04-01T03:09:35.000Z","dependencies_parsed_at":"2024-01-21T05:24:10.106Z","dependency_job_id":"f75c1f46-74af-4177-94a4-712b8367d7f6","html_url":"https://github.com/pionxzh/wakaru","commit_stats":{"total_commits":525,"total_committers":9,"mean_commits":"58.333333333333336","dds":"0.18285714285714283","last_synced_commit":"9d96c8fdf2739387845bb9cf84056ed87aa88b70"},"previous_names":["unminify-kit/core","pionxzh/wakaru"],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pionxzh%2Fwakaru","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pionxzh%2Fwakaru/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pionxzh%2Fwakaru/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pionxzh%2Fwakaru/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pionxzh","download_url":"https://codeload.github.com/pionxzh/wakaru/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247276163,"owners_count":20912288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ast","babel","browserify","debundle","decompiler","javascript","jscodeshift","reverse-engineering","swc","unminify","unpack","webpack"],"created_at":"2024-08-09T19:01:35.641Z","updated_at":"2026-05-24T20:00:48.872Z","avatar_url":"https://github.com/pionxzh.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Rust"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Wakaru\n\n**Unpack. Unminify. Understand.**\n\nFast JavaScript decompiler and bundle splitter for modern frontend.\n\n[![CI](https://img.shields.io/github/actions/workflow/status/pionxzh/wakaru/rust-ci.yml?branch=main\u0026label=CI)](https://github.com/pionxzh/wakaru/actions/workflows/rust-ci.yml)\n[![npm](https://img.shields.io/npm/v/@wakaru/cli?label=npm)](https://www.npmjs.com/package/@wakaru/cli)\n[![Telegram](https://img.shields.io/badge/Telegram-group-blue)](https://t.me/wakarujs)\n\n[Try the online playground](https://wakaru.vercel.app/playground)\n\n\u003c/div\u003e\n\n## Quick Start\n\n```bash\nnpx @wakaru/cli input.js -o output.js               # decompile a file\nnpx @wakaru/cli bundle.js --unpack -o out/          # unpack and decompile a bundle\n```\n\n\n## Features\n\n- ✅ Bundle splitting — webpack 4/5, esbuild, Bun, Browserify\n- ✅ Transpiler \u0026 minifier recovery — Terser, Babel, SWC, TypeScript\n- ✅ Source map support for better names \u0026 import deduplication\n- ✅ Rewrite levels: `minimal` | `standard` | `aggressive`\n\n\n## Why Wakaru?\n\nProduction JavaScript is hard to read because multiple tools have transformed it:\n\n- **Bundlers** collapse many modules into one file and inject runtime wrappers\n- **Transpilers** downgrade modern syntax and insert helper functions\n- **Minifiers** erase names, fold constants, and compress control flow\n\nWakaru handles all three in a single command — feed it a bundle, get back readable modules.\n\n\n## Install\n\n```bash\nnpm install -g @wakaru/cli\n```\n\nOr pre-built binaries from [GitHub Releases](https://github.com/pionxzh/wakaru/releases).\n\n\n## CLI Reference\n\n### Decompile a single file\n\n```bash\nwakaru input.js -o output.js\n```\n\nWithout `-o`, output goes to stdout. Stdin is also supported:\n\n```bash\ncat input.js | wakaru \u003e output.js\n```\n\n### Unpack a bundle\n\n```bash\nwakaru bundle.js --unpack -o out/\nwakaru bundle.js --unpack --raw -o out/    # raw split, no readability transforms\n```\n\n### Source maps\n\n```bash\nwakaru input.js --source-map input.js.map -o output.js\n```\n\nSource maps enable identifier recovery and import deduplication.\n\n### Extract original sources\n\n```bash\nwakaru extract input.js.map -o src/\n```\n\nWrites files embedded in the source map's `sourcesContent` to disk.\n\n### Rewrite level\n\nWakaru offers three rewrite levels so you can choose the right tradeoff for your use case:\n\n| Level | When to use |\n|-------|-------------|\n| `minimal` | You need near-zero semantic changes — only safe, obvious transforms. Good for auditing or diffing where behavioral fidelity matters most. |\n| `standard` | Default. Balanced readability and correctness for most use cases. |\n| `aggressive` | You just want to read the code. Enables stronger intent-recovery heuristics that produce cleaner output but may alter edge-case behavior. |\n\n```bash\nwakaru input.js --level minimal\nwakaru input.js --level standard      # default\nwakaru input.js --level aggressive\n```\n\n### Overwrite protection\n\nWakaru refuses to overwrite existing files unless `--force` is passed.\n\n## Contributing\n\nEvery kind of contribution is welcome.\n\nSome areas where help is especially useful:\n\n- Share real-world bundles that Wakaru doesn't handle well\n- Report missing helper detection or false positives\n- Report semantic or correctness issues\n\nWhen reporting a bug, please include: the input code, the command you ran, the current output, and what you expected instead.\n\n\u003cdetails\u003e\n\u003csummary\u003eDevelopment setup\u003c/summary\u003e\n\n1. Fork the repo and create your branch from `main`\n2. Install a stable Rust toolchain\n3. Run `cargo test` to verify everything passes\n4. Make your changes and add tests\n\nBefore submitting a PR:\n\n```bash\ncargo test\ncargo clippy -- -D warnings\n```\n\nThis project uses [Conventional Commits](https://www.conventionalcommits.org/). Please mention the issue number in the commit message or PR description.\n\nDocs: [`architecture.md`](./docs/architecture.md) | [`testing.md`](./docs/testing.md) | [`helper-detection.md`](./docs/helper-detection.md)\n\n\u003c/details\u003e\n\n## License\n\n[Apache-2.0](./LICENSE)\n\n\u003csub\u003eUsage of wakaru for attacking targets without prior mutual consent is illegal. End users are responsible for complying with all applicable laws.\u003c/sub\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpionxzh%2Fwakaru","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpionxzh%2Fwakaru","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpionxzh%2Fwakaru/lists"}