Skip to content

Plugins API

The editor UI is composed of optional plugins installed at createEditor() time. Use presets for common bundles or assemble plugins manually.

Presets

PresetFunctionUI
extended (default)allPlugins() or resolvePlugins('extended')Global toolbar, DSL panel, grid view, export, diagnostics, in-canvas editing
litelitePlugins() or resolvePlugins('lite')In-canvas editing only (picker, floating toolbar, context menu) — no global toolbar or side panels
minimalminimalPlugins() or resolvePlugins('minimal')Canvas only: pan/zoom, selection, keyboard
ts
import { createEditor, resolvePlugins, allPlugins, litePlugins, minimalPlugins } from 'velo-circuit'

// Extended (default)
const full = createEditor({ plugins: allPlugins() })

// Lite — embed in apps that provide their own chrome
const lite = createEditor({ plugins: litePlugins() })

// Minimal — read-only or custom tooling
const minimal = createEditor({ plugins: minimalPlugins() })

// By name
const editor = createEditor({ plugins: resolvePlugins('lite') })

Framework adapters accept the same presets via preset: 'lite' | 'extended' | 'minimal'. See Editor Presets and Adapters.

Plugin reference

PluginNameResponsibility
themePlugin()theme.ce-editor shell, light/dark (ce-dark), CSS variables, theme-changed event
panZoomPlugin()pan-zoomWheel zoom, drag pan, fit view
selectionPlugin()selectionNode selection state
keyboardPlugin()keyboardUndo/redo shortcuts, delete
elementPickerPlugin()element-pickerElement kind popup (before/after/parallel/replace)
contextMenuPlugin()context-menuRight-click actions on canvas
floatingToolbarPlugin()floating-toolbarSelection overlay: id, topology ops, inline params
toolbarPlugin()toolbarGlobal .ce-toolbar (elements, grid toggle, theme)
gridViewPlugin()grid-viewCatalog grid inside editor (viewMode: 'grid')
dslCodemirrorPanelPlugin()dsl-codemirror-panelBoukamp DSL CodeMirror side panel
diagnosticsPlugin()diagnosticsValidation issues panel
exportPanelPlugin()export-panelSVG (params), SVG topo, full DSL; light/transparent by default — Export guide

Optional (not in presets)

PluginNameNotes
paramEditPlugin()param-editAlternate param layer under node; superseded by floating toolbar in extended/lite
dslPanelPlugin()dsl-panelLegacy text panel; use dslCodemirrorPanelPlugin instead

Custom composition

ts
import {
  createEditor,
  themePlugin,
  panZoomPlugin,
  selectionPlugin,
  floatingToolbarPlugin,
  dslCodemirrorPanelPlugin,
} from 'velo-circuit'

const editor = createEditor({
  plugins: [
    themePlugin(),
    panZoomPlugin(),
    selectionPlugin(),
    floatingToolbarPlugin(),
    dslCodemirrorPanelPlugin({ container: '#my-sidebar' }),
  ],
})

Types

ts
import type { EditorPlugin, PluginContext, PluginRegistry } from 'velo-circuit'

type EditorPreset = 'minimal' | 'lite' | 'extended'

Each EditorPlugin has name, install(ctx), and destroy().