cad-editor/docs/plugin-template
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Hakan Seven 931eb908a9 feat(plugin): InteractiveCommand hook for click-to-place (API v2)
Plugins could dispatch commands but not register interactive (click-to-
place) tools — the gap mf4633 flagged on #100 for Storm Sewer's SS_INLET
/ SS_PIPE. Add an InteractiveCommand trait + CommandStep to ocs_plugin_api
and HostApi::start_interactive; a host adapter bridges it to the internal
CadCommand, so a plugin tool drives the host's point-collection flow.

Hybrid by construction: the same command works by clicking in the viewport
AND by feeding coordinates over --serve (run "CMD x,y x,y"). Adding a
HostApi method changes the contract vtable, so API_VERSION bumps to 2 —
v1 plugin binaries are now refused at load.

Part of the #100 extensibility epic.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 21:43:35 +03:00
..
.github/workflows docs(plugin): rewrite architecture + template for the external-only model 2026-06-17 16:02:16 +03:00
src docs(plugin): rewrite architecture + template for the external-only model 2026-06-17 16:02:16 +03:00
Cargo.toml docs(plugin): rewrite architecture + template for the external-only model 2026-06-17 16:02:16 +03:00
PLUGIN.md Add plugin host architecture and Storm Sewer add-on package 2026-06-09 13:41:21 -04:00
plugin.toml feat(plugin): InteractiveCommand hook for click-to-place (API v2) 2026-06-17 21:43:35 +03:00
README.md docs(plugin): rewrite architecture + template for the external-only model 2026-06-17 16:02:16 +03:00

Open CAD Studio plugin template

A complete scaffold for an external Open CAD Studio add-on. A plugin is its own repository that builds a cdylib; the host loads it at runtime. Copy this folder into a new repo and rename the placeholders.

Files

File Purpose
Cargo.toml cdylib crate depending on ocs_plugin_api (host feature)
src/lib.rs manifest + CadModule ribbon + BuiltinPlugin + export_plugin!
plugin.toml metadata read by the host (mirrors the manifest)
.github/workflows/release.yml cross-builds the cdylib and publishes a release
PLUGIN.md your command reference + XDATA schemas

Quick start

  1. Copy this folder into a new repository.
  2. Rename my-plugin / My Plugin / opencad.my_plugin / my_plugin / MP_ throughout (Cargo.toml, src/lib.rs, plugin.toml, the workflow asset: names), keeping plugin.toml and the MANIFEST in sync.
  3. cargo build to check it compiles.

Test locally

cargo build --release
mkdir -p "<config>/OpenCADStudio/plugins/opencad.my_plugin"
cp target/release/*my_plugin*.so "<config>/OpenCADStudio/plugins/opencad.my_plugin/"
cp plugin.toml                    "<config>/OpenCADStudio/plugins/opencad.my_plugin/"

Restart Open CAD Studio: the ribbon tab appears and MP_ commands route to your plugin. (<config> = %APPDATA% / ~/Library/Application Support / $XDG_CONFIG_HOME.)

Publish

Push a v* tag — the workflow builds the cdylib on Linux/Windows/macOS and uploads each binary plus plugin.toml to a GitHub Release. Users install it from the Plugin Manager by linking your owner/repo, or — once your repo is added to plugins/registry.json via PR — straight from Available plugins.

The binary must be built with the same toolchain and ocs_plugin_api version as the host (approach B). See docs/plugin-architecture.md.