Real input on the left, real protected output on the right. Outputs can vary from run to run,
so the shapes below are representative rather than exact copies of what the online tool returns.
Frequently asked questions
Are these examples real output from the engine?
They are representative rather than byte-exact, and the distinction matters. Generated identifiers vary from build to build, string table indices depend on how many literals a file contains, and the runtime helpers a transform emits are sized to the program they are protecting. What the examples show accurately is the shape of each transformation and its direction of travel: what disappears, what is introduced, and roughly what happens to size. Run your own file through the online tool to see the exact output for your code.
Which of these should we turn on first?
Name mangling, on its own, until you have a protected build passing your test suite. It is the transform with the widest compatibility, the smallest output, and the fewest ways to surprise you. Once that is routine, add the string transforms, which are where most of the readability cost comes from for most codebases. Leave the structural transforms and the runtime guards for last, because they are the ones that change how the program executes rather than only how it reads.
Why do some transforms make the file larger?
Because they add machinery that did not exist in your source. A string table adds an array and an accessor function. Control-flow flattening replaces straight-line code with a dispatch structure. Dead code insertion adds statements on purpose. Name mangling usually shrinks output, and compression can recover a good deal of the rest, but a protected bundle is generally bigger than a minified one and it is better to plan for that than to discover it in a performance review.
Do these transforms change what my program does?
They are intended to preserve behaviour, and the ones that most often appear to break something usually turn out to have renamed a name that something outside the file depended on. A template referring to a function, a framework matching on a property, a test asserting on an identifier. That is why member renaming is presented here as a maximum-mode transform with exclusion rules rather than something to enable globally, and why running your real test suite against protected output is the recommendation on every page of this site.
Which of these are available on the free online tool?
The online tool runs a preview with deliberate limits: uploads are capped, the protected sample is capped, the endpoint is rate limited, and options that need extra values or desktop-only processing are skipped rather than silently half applied. It is designed to show you what a transform does to your code, not to produce a release artifact. Use the desktop application or the command line tool for real builds, where nothing is capped and every option is available according to your plan.
Where can I read what each transform is actually doing?
Each one has a reference page with its configuration, its trade-offs and its failure modes, linked from the documentation index. The techniques article covers the same ground as prose if you want the reasoning before the reference. If you are comparing against a configuration you already have from another tool, the migration page maps the upstream option names onto these transforms, including the two cases where one upstream flag corresponds to two settings here.