Skip to main content
A plugin ships as an archive the platform reads at install time. This page covers what goes in the archive, how to install and update it, how versioning works, and how deployments without internet egress resolve dependencies.

What’s in the package

At the archive root the platform needs exactly three things:
The upload installer reads manifest.json from the archive and fails without it, so it must be present and current.
Zip only source. Exclude .venv, __pycache__, .git, .ruff_cache, and node_modules. A stray .venv — easy to create by running uv inside the plugin dir — can balloon the archive from a few hundred KB to tens of MB.

Regenerate the manifest

The manifest is reflected from your code, not written by hand. Regenerate it whenever a node, trigger, integration, or config signature changes:
noxus plugin package and noxus plugin generate-manifest do this for you (see below). The manifest now also carries the plugin’s dependencies — captured from your pyproject.toml [project].dependencies at generation time — so the platform can display what the plugin will install.

Versioning

Noxus uses semantic versioning, defined once in pyproject.toml and mirrored into the manifest at generation time:

SDK version alignment (required)

The sandbox resolves noxus-sdk alongside your other dependencies. If you pin an old SDK, it can win the resolution and the worker fails to start with No module named 'noxus_sdk.plugins.worker'. Always depend on noxus-sdk at or above the platform’s version (the platform installs a floor of at least noxus-sdk>=0.5.1), never an old floor.

Release Strategy

1

Validate

Confirm structure, definitions, and config schemas, and reflect the manifest.
2

Package

Regenerate the manifest and build the archive. noxus plugin package produces a .tar.gz; the platform’s upload flow also accepts .zip.
3

Install

Install into your Noxus deployment via one of the sources below.

Installing and updating

Open Settings → Plugins → Add plugin and choose a source:

Git

Push the tagged release to your repository, then point the platform at it (branch / commit / subpath as needed).

Upload

Drag the .tar.gz (or .zip) built by noxus plugin package into the upload tab.

Marketplace

Open a PR to github.com/Noxus-AI/noxus-plugins so the version is discoverable from the in-app marketplace.
On install the platform reads the manifest from the source, provisions the plugin’s sandbox, installs its dependencies, warms the worker, and reflects the manifest from the live worker. To pick up a new version of an already-installed plugin, use Reload on its row — the platform re-downloads the source and provisions a fresh sandbox.

Air-gapped / offline installs

Because the sandbox installs a plugin’s dependencies at provision time, a deployment with no internet egress needs those wheels available locally. The platform can serve them from a baked wheelhouse built into the sandbox image: With a wheelhouse present but PLUGIN_INSTALL_OFFLINE off, deps resolve from the wheelhouse first and fall back to PyPI for anything not baked. For a fully air-gapped deploy, bake every dependency (including noxus-sdk) into PLUGIN_WHEELHOUSE_DIR and set PLUGIN_INSTALL_OFFLINE=true.

Compatibility Checklist

  • Inputs/Outputs: never remove or rename existing node inputs/outputs in a minor version; only add optional ones.
  • Config migration: give new config fields defaults so existing installs keep working.
  • Dependencies: keep the noxus-sdk floor aligned with the platform; for air-gapped targets, confirm new deps are in the wheelhouse before shipping.
  • Deprecation: mark old nodes as deprecated before removing them in a major version.

Plugins Overview

Return to the full plugin development map.