Cut bytes.
Keep meaning.
Minify++ is a compact C++17 minifier for JavaScript, JSX, HTML, CSS, JSON, XML and SVG. Conservative mode stays a small final-output pass; opt-in structured and aggressive JavaScript modes add proven binding renames and bounded compression without turning Minify++ into your compiler or bundler.
curl -fsSL https://minify.cx/install.sh | shapp.js → app.min.js
$ minify --structured app.js
app.js → app.min.js
$ minify --aggressive bundle.js
bundle.js → bundle.min.js
A deliberately bounded tool
Fast conservative output by default. Deeper JavaScript optimisation only when you ask for it.
Compile TypeScript, bundle modules, render templates or build your application first. Then hand the resulting web artifacts to Minify++. The default path remains conservative; structured and aggressive modes are explicit contracts with stronger analysis, their own semantic gates and real-bundle validation.
Conservative by default
Each format has its own lexical contract. When adjacency or syntax is ambiguous, correctness outranks another deleted byte.
Explore format behavior →Structured JavaScript
Opt in to scope-aware binding renaming backed by a scope graph, reference resolution and fail-closed safety barriers.
See optimization modes →Profiled performance
Real-bundle regressions are rejected during development, and current JavaScript comparisons refresh OXC, SWC, esbuild and Terser in the same benchmark run.
Read the benchmark methodology →Why trust a minifier?
Because the evidence attacks meaning, not just output size.
Executable JavaScript differentials, Test262, TypeScript JSX parsing, structural JSON checks, independent CSS browser oracles, real-bundle post-validation, sanitizers and deterministic mutation testing all protect the supported contract.
See the evidence wallThe complete WPT-derived corpus passes the strengthened Chromium CSSOM oracle with zero differences, errors, rejections or unverified cases.
Read the conformance results →The boundary is a feature
What Minify++ still does not try to own
TypeScript, Sass and framework transforms remain upstream.
Dependency graphs, tree shaking and chunking belong to dedicated tools.
Performance claims use pinned fixtures and same-run controls; historical runner milliseconds are not treated as universal truth.