Windows desktop · WinUI 3
Protect your project. One step at a time.
Start in the Windows app. Get one file working, save your settings, then reuse the project from the command line. You do not need to learn every advanced option first.
This guide uses the modern WinUI 3 app and its bundled cli\jso-local.exe. Classic v2.47 has a different project format; do not rename a Classic project to .jsoproj.
1. Make one file work first
- Download and extract the Windows app. Keep the extracted files together.
- Open
javascriptobfuscator.exe. Use the project window, then click New Project and Add Files.
- Select a JavaScript file from your application's build output. Keep your original source unchanged.
- In the Output: bar, choose a separate folder, such as
D:\MyApp\protected. Never select your source folder.
- Choose where protection runs. See the three choices below. Start with conservative settings; leave advanced transforms alone for now.
- Click Obfuscate. Run the protected file in your application and check the same behavior as before.
Which processing mode should I choose?
- Local Standard (ES5 .js only, basic): basic protection on your PC, without an account. Use it only for supported ES5 JavaScript.
- Local Advanced (source-local; online plan check): protects source on your PC but checks paid-plan eligibility online. VM protection is not included in this mode.
- Hosted: sends selected source to the service. Review source handling and plan requirements first. Do not assume a Standard preset means Local Standard: preset and processing mode are different choices.
Ready to continue? You have a protected file in the output folder, and your application test still passes.
Next: protect the project
2. Add the project and save its settings
- Run your normal application build first. React, Vue and other module projects should be built with their existing bundler. The obfuscator does not replace that build.
- Click Add Folder and choose the build folder containing the JavaScript you want to protect. Review each file's action before running; not every asset needs obfuscation.
- Check the separate Output: folder again. Keep source maps, credentials and original source out of public deployment.
- Click Save Project and save as
D:\MyApp\release.jsoproj. This file remembers your selected inputs, output folder and protection settings. - Click Obfuscate. Test the complete protected application, including routes, forms and third-party integrations. Keep a known-good build for rollback.
Ready to automate? Close and reopen release.jsoproj, check its paths and settings, and confirm the batch works in the app.
Next: run the saved project from a command
3. Run the whole saved project from the command line
You are not connecting to an already open desktop window. The command-line tool opens the saved project and runs its selected files with the same configuration.
Open Command Prompt and run this
Replace the two example paths with your extracted app folder and saved project. Keep the quotation marks.
"C:\Tools\JavaScriptObfuscator\cli\jso-local.exe" "D:\MyApp\release.jsoproj"
echo %ERRORLEVEL%
0 means success. 1 means at least one file failed. 2 means the command or project could not be loaded. Read the error before continuing. Your output goes to the folder saved in the project.
For a first offline check, save a project containing only ES5 .js files with Local Standard selected. The same project can be run again without changing the command. This basic mode does not apply paid transforms, VM protection or modern-syntax conversion.
I use PowerShell instead of Command Prompt
& "C:\Tools\JavaScriptObfuscator\cli\jso-local.exe" "D:\MyApp\release.jsoproj"
if ($LASTEXITCODE -ne 0) { throw "Protection failed. Review the command output." }
Run it again with a .cmd file
Save this as protect-project.cmd. Change both paths before running it. Run your normal build first; this file only protects the saved project's existing inputs.
@echo off
"C:\Tools\JavaScriptObfuscator\cli\jso-local.exe" "D:\MyApp\release.jsoproj"
if errorlevel 1 exit /b 1
echo Protection finished. Run your application tests next.
exit /b 0
For a build server, store JSO_API_KEY and JSO_API_PASSWORD in its secret manager when the selected mode needs credentials. Do not put real keys in this script, source control or screenshots. Source-local Advanced still needs an online plan check; hosted mode uploads selected source.
Do not deploy on command success alone. Run your application tests against the protected output and stop the release if either protection or application tests fail.
More command-line options
Where should I look when something fails?
The command says it cannot find the program or project
Check both quoted paths. Confirm that cli\jso-local.exe exists inside the extracted app folder and that the project ends in .jsoproj. Do not paste a Command Prompt command unchanged into PowerShell; use the PowerShell example above.
The output exists, but my application breaks
Go back to the one-file test. Keep the processing mode unchanged and disable the last additional transform. Preserve public API names and reflected properties where required. Follow the compatibility checklist; do not turn on every setting at once.
A feature asks for a paid plan
Check the selected mode and the feature's plan label. Turn off the feature or choose an eligible plan after confirming you need it. A free app download does not include every protection option.
Need help? Send support your app version, processing mode, failing step and error message. Never send passwords or API keys.