complexity is the single dial that decides how much protection the engine applies. A preset is a named point on it: light is 2, hard is 25. Set complexity directly for a value in between or beyond — it is an unbounded non-negative number.
What rises with the number
Complexity is a budget, not a schedule. There is no fixed list of "this feature at this number". Above 0, the engine spends a larger budget as the value climbs and negotiates which transformations to apply, per build — so two builds at the same complexity are different shapes, and no single transformation is guaranteed at a given level. That per-build variation is the point: see how AfterPack works for why a fixed structure would be a fingerprint.
Three things are fixed:
complexity | What is guaranteed |
|---|---|
0 (minify) | No obfuscation. Minification only; nothing below runs. |
> 0 | Every string literal the engine can rewrite goes through a runtime decoder — the string floor. |
≥ 8 (medium and up) | Encoded strings and integers are keyed to a shared runtime value, and object literals are rebuilt in varied shapes. |
Everything else — control-flow reshaping, opaque predicates, integer-expression interpretation, and the rest — is drawn from the budget as it grows, not switched on at a line. Raising inflation.max gives the engine more room and it applies more of them; lowering it applies fewer at the same complexity.
Turning a transformation off, or on
You can turn any transformation kind off. You cannot force one on.
- Off is reliable.
transforms.<kind>.enabled = falseremoves that kind at any complexity. - On is a permission.
truelets the engine use a kind; it still decides per build whether the complexity and budget call for it. Some kinds appear only atmediumand up, and the two Pro kinds need a Pro build. - At
0, none of it applies.minifyruns no transformations, so everytransformsflag is moot.
To make a transformation more likely, raise complexity (or inflation.max) rather than toggling a flag.
Next
- Presets: the named levels and the size budget each one sets.
- Configuration: every key, including the
transforms.<kind>.enabledflags. - How AfterPack works: why the set of transformations changes every build.
- Directives: a different complexity for one region (Pro).