@evoxapp/plugin-cli package is evox-plugin.
Installation
Node.js 20+ is required. You can use it withnpx without installing:
Language
CLI messages andinit templates (README, comments, action names, key titles) are produced in English or Turkish. The language is chosen in this order: --lang en|tr > EVOX_PLUGIN_LANG > LC_ALL > LC_MESSAGES > LANG > the system locale (tr if it is Turkish) > en. The C and POSIX locales do not count as a language choice. An invalid --lang value returns PLUGIN_CLI_LANG_INVALID; an invalid EVOX_PLUGIN_LANG value is ignored. Error codes and JSON output field names do not change with the language.
Template values follow the selected language: for example the author name is Yerel Geliştirici with --lang tr and Local Developer with --lang en. The examples on this page show the English template.
Commands
--plugin-id <uuid> is optional; if not given, it is generated automatically and shown in the output.
T1 (trusted-node) or T2 (sandbox-js)? The two init targets have different flows:
- T1 ·
--runtime trusted-node→ producesmanifest.json+runtime.mjs. It is loaded directly from the evoX Plugins → Developer window; local development needs no CLI command.build/run/sandbox-testdo not work in this project.validate,publish-checkandpackpackage the project for Market review (the Preparing a T1 project for Market review section below). Steps: Quickstart. - T2 · default (
sandbox-js) → produces theevox-plugin.jsonconfig. Thevalidate→sandbox-test→build→pack→publish-checkpipeline is for these projects (the publication target once public upload opens).
A T1 (trusted-node) project does not use these commands during local development; you develop it by reloading from the Developer window as you change code.
sandbox-test is a static compatibility check: it scans your sandbox-js source for Node/DOM/direct network (fetch/WebSocket/XHR) access and validates the browser bundle. Run it before submitting for publication; any violation produces a fail-closed non-zero exit (suitable for CI/pre-submit). The real T2 security boundary is the host-owned Electron Chromium Worker; sandbox-test complements it and does not replace it.
evox-plugin.json (sandbox-js/T2 config)
The root config file of a sandbox-js project. init produces it; the pipeline commands (validate/build/pack/publish-check) read it. (This file does not exist in a T1 trusted-node project; T1 works directly with manifest.json + runtime.mjs.)
dependencies.json is kept separately and inventoried by validate/pack.
publish-check does not replace moderation, a production scanner, signing or revocation. As long as public executable upload is not ready, PLUGIN_UPLOAD_NOT_READY is kept.
Preparing a T1 project for Market review
A T1 (trusted-node) plugin enters the Market as a single unminified ESM file; the review reads the code in that file. First:- Add the
platformsfield tomanifest.json, plusdeclaredCommandsfor every program the plugin runs anddeclaredPathsfor every system path it touches (see Manifest). - Run
npm installin the project folder.@evoxapp/plugin-sdkmust be installed in the project andpackage-lock.jsonmust exist; the integrity of dependencies is read from it.
publish-checkcompiles the runtime entry inmanifest.jsontogether with its dependencies into a single file, compares that file with the declarations and writes the findings. It produces no package.packturns a project that passes the same checks into an.evoxpack. The package carries three files:plugin/manifest.json,plugin/dependencies.jsonproduced frompackage-lock.json, andplugin/runtime/plugin.mjs.
Warnings do not stop the package but are listed under
warnings in the output: a call whose command name is built at runtime (PLUGIN_CLI_COMMAND_UNRESOLVED), running through a shell (PLUGIN_CLI_SHELL_EXECUTION), a declared command that is not in the bundle (PLUGIN_CLI_COMMAND_UNUSED), a system path outside declaredPaths (PLUGIN_CLI_PATH_UNDECLARED), child_process.fork (PLUGIN_CLI_FORK_USED) and worker_threads (PLUGIN_CLI_WORKER_THREADS_USED).
