Skip to main content
The CLI does one job end to end: turn a plugin project into a deployed version.

First run

publish is build followed by deploy. Split them when you want to inspect the archive before it leaves your machine:

The iteration loop

Each successful deploy registers a new version of the same capability, with an incrementing version number. The upload response reports the number.
A newly uploaded version is registered dormant first, then activated in a separate transaction. If that second step fails, the previously active version keeps serving — a failed deploy does not take your plugin down. Version rollback is done in the Portal; the CLI has no activate or versions command.

What the CLI expects in your project

noorle plugin init creates all of this. If you are converting an existing project, these are the contracts: build.sh is why the CLI is language-agnostic — it runs your script through sh and only checks the output path. Anything that emits a WASI Preview 2 component at dist/plugin.wasm works.
Tools are discovered from the component’s exported functions, not from world.wit. The WIT file, when present, only enriches tool descriptions. A correct WIT file will not rescue a component that exports nothing.

Validating before you deploy

This is a local YAML syntax and structure check. It does not contact the platform, and it does not run the WASM admission checks. Those run server-side at upload: the binary must be a Component Model binary, every import must sit under one of the nine allowed WASI prefixes, and it must export at least one callable function. See Upload Plugin.

CI

The CLI has no non-interactive login — noorle login requires a human to approve in a browser, and the token it issues lasts one hour. A CI job cannot run noorle plugin deploy unattended. Use the CLI for the build and post the archive with an API key:
The form field must be named archive and the filename must end in .npack. The body limit is 50 MiB. See Upload Plugin.

Troubleshooting

Run noorle plugin build from the plugin directory, not its parent.
chmod +x build.sh. Git preserves the bit, so commit it after fixing.
Your build.sh finished but did not write to that exact path. The CLI reads only dist/plugin.wasm — copy or rename your compiler output to it.
The device-flow token lasts one hour and there is no refresh grant. Run noorle login again.
The CLI polls for 10 minutes. Re-run noorle login and approve promptly.