Plugins
What a Plugin can add to Studio, where Plugins come from, and how trust works before Plugin code runs.
A Plugin is a self-contained package that registers into Studio when a Project opens. Solvers, sensor components, panels, Agent Tools, library items and Project templates all come from Plugins. A Plugin someone else wrote and one the Agent generated for you are the same kind of thing.
A Script, by contrast, is a loose Python file you run once. Promote a Script to a Plugin when you want its function to stay registered.
What a Plugin can contribute#
- components and entity types for Scenes
- panels and viewport visualizations
- Agent Tools
- solvers that run in their own process on the Project's interpreter
- library items, settings, themes, menus and keybindings
- Project templates for the template cards
Where Plugins come from#
Plugins are Python distributions named wt-<domain> (for example wt-radar).
They install from three places, and never from PyPI:
| Source | Example |
|---|---|
| The witwin index | wt-radar>=0.3,<0.4 |
| A git repository | git+https://github.com/witwin-ai/wt_radar with a tag |
| A local folder | ../wt_radar, installed in editable mode |
The Plugins page installs into the Project's environment with witwin add,
which records the dependency in pyproject.toml and syncs the Project's
.venv. A Project without pyproject.toml keeps an older per-Project
install instead.
During development, add a local Plugin folder from the Plugins page. A local Plugin wins over an installed one with the same id.
Trust#
Plugin code runs inside the Project's server process with your user's permissions. There is no sandbox: a Plugin's manifest describes what it uses but does not enforce it.
So Studio does not run Plugin code until you trust it. Installing a Plugin shows its permission disclosure; accepting it enables the Plugin. Plugins that only declare data, such as themes, menus, keybindings and settings, need no trust step.
Plugins that arrive with the Project's environment, for example after a
git pull, wait for trust too. Studio asks once per Project and lists every
Plugin waiting.
Enable and disable#
Enable state is stored per Project in .witwin/plugins/, so one Project can
disable a Plugin that another uses.