Skip to content

Plugin dependencies

Every plugin mounts independently inside <Visualizer />, and none requires another plugin to function. A few, though, rely on optional npm packages, a live machine connection, or coordinate with a sibling plugin at runtime. This page audits those relationships so you know what to install and mount together.

Most plugins need nothing beyond @viamrobotics/motion-tools. Three use optional peer dependencies — install them only when you use the plugin:

PluginInstall
<SelectionTool />earcut
<DrawService />@connectrpc/connect @connectrpc/connect-web
<Debug />@tanstack/svelte-query-devtools

Two more build on packages that ship as required peers of @viamrobotics/motion-tools — already installed with it, and listed here only for completeness:

PluginRequired peers
<ControlWidgets />@viamrobotics/test-widgets, @viamrobotics/svelte-sdk
<XR />@threlte/xr, @viamrobotics/svelte-sdk

No plugin imports another as a hard requirement, but two pairs coordinate at runtime. Each is soft: the dependent plugin still works alone, just with reduced behavior.

PluginCoordinates withWhat happens
<ControlWidgets /><XR />Registry widget panels are hidden while an immersive XR session is active.
<DrawService /><Logs />Connection status and errors are written to the Logs panel. Without Logs, they’re dropped silently.
ControlWidgets ──► XR     panels hide during an immersive session
DrawService ──► Logs     draw-server diagnostics, if Logs is mounted

The <ControlWidgets /> ──► <XR /> link only observes XR’s session state through @threlte/xr, not the other plugin’s internals. Which cameras appear in a headset is chosen independently in the <XR /> plugin’s own AR settings panel.

Some plugins need more than a mounted <Visualizer />:

PluginAlso needs
<ControlWidgets />, <XR />a live machine connection (resources resolved per part)
<XR />a WebXR-capable device to enter a session
<Focus />an active selection — click an entity first
<DrawService />a running draw server (see its page)
<TopDownLock />orbit-style camera controls (the default); no effect under trackball controls