High-level overview
The Noxus Backend manages plugin records (install, uninstall, status) and provisions each plugin’s sandbox. The Backend and every Worker call plugin nodes during execution. The Sandbox Manager bridges them to the plugin’s worker process — and multiplexes their requests, so all platform processes share one warm worker per plugin.Sandboxed workers
Each installed plugin gets its own sandbox. The platform provisions it once:- Download the plugin source (Git repo, upload, or marketplace)
- Upload the source tree into the sandbox
- Install its dependencies there, in a
uvvirtual environment - Start
noxus plugin worker— a long-lived process speaking JSON-RPC over stdio
Editing a plugin without reinstalling
Because the venv lives in the sandbox and survives a worker restart, updating a plugin’s code is cheap: sync the changed files into the sandbox and restart the worker. Dependencies are only reinstalled when the plugin’s dependency list actually changes. This is what makes an edit-and-run loop practical.Plugin lifecycle
Status flow
Plugins go through these statuses:Plugin sources
Plugins can be installed from multiple sources:How nodes execute through plugins
When a workflow runs a node that belongs to a plugin, here’s what happens: When a plugin is loaded, its manifest registers dynamic remote node classes in the platform’s node registry. These remote nodes look like normal nodes to the workflow engine, but theircall() is forwarded to the plugin’s worker instead of executing locally.
Each plugin runs as a long-lived worker process inside its own sandbox. The plugin’s module graph is imported once and stays warm, so a node execution costs one round trip rather than a process start. The backend and every worker replica share that same warm worker through the sandbox manager, which multiplexes their requests over one channel per plugin.
Plugin worker internals
The plugin worker (noxus plugin worker, generated by the SDK) speaks line-delimited JSON-RPC over stdin/stdout. It answers:
The SDK discovers the plugin class and wires these up automatically — you never write transport code.
For local authoring,
noxus plugin serve exposes the same operations over HTTP. Note that platform file access is unavailable when serving locally, since files live on the platform.
File handling
Plugins run inside a sandbox with no direct access to the platform’s storage — and typically no network route back to it either. Instead, file operations travel back along the same channel the platform used to call the plugin: The platform services these callbacks in-process against its own storage. Each call carries a single-use token the platform minted, which is how it knows which workspace the request belongs to — a plugin can only read and write files in the workspace of the run it is executing for. Inside plugin code, you use theFile class and the execution context’s file helper — the SDK handles all the bridging transparently.
Security model
- Each plugin runs inside its own sandbox (gVisor/syd), with its own dependencies and filesystem
- Plugin code has no platform credentials — the sandbox holds no API keys
- File access is scoped to the calling workspace via a single-use token minted per call
- Integration credentials are passed through the execution context per-request, not stored in the plugin
- Plugin source downloads support private Git repositories with token auth
Plugin Overview
What you can build with plugins
Your First Plugin
Build and deploy a plugin step by step