feat(plugin): marketplace — install plugins from a curated registry
Add a Plugin Manager marketplace that installs external add-ons from a GitHub repo's Releases. A curated registry (plugins/registry.json in this repo, extended by PR) lists discoverable plugins; the host fetches it, shows each entry with a release dropdown, and on install downloads the asset matching the user's platform plus plugin.toml into the plugins folder (API-version checked first). Users can also link arbitrary owner/repo manually. Linked repos persist in settings. Desktop only (ureq + serde_json); the install path reuses the phase-2 loader. Part of the #100 extensibility epic (phase 2). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
29c71be101
commit
020a3a4c84
12 changed files with 599 additions and 5 deletions
35
plugins/README.md
Normal file
35
plugins/README.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# Plugin registry
|
||||
|
||||
`registry.json` is the curated list of third-party plugins Open CAD Studio
|
||||
offers in its **Plugin Manager → marketplace**. The app fetches it from this
|
||||
repo's `main` branch at runtime, so adding an entry makes a plugin discoverable
|
||||
to every user without an app update.
|
||||
|
||||
## Add your plugin
|
||||
|
||||
Open a pull request adding one object to the array in
|
||||
[`registry.json`](registry.json):
|
||||
|
||||
```json
|
||||
{
|
||||
"repo": "your-account/your-plugin-repo",
|
||||
"name": "Human-readable name",
|
||||
"description": "One line describing what it does."
|
||||
}
|
||||
```
|
||||
|
||||
Requirements for the linked repo:
|
||||
|
||||
- Builds a `cdylib` against [`ocs_plugin_api`](../crates/ocs_plugin_api) and
|
||||
exports the host symbols via `ocs_plugin_api::export_plugin!`.
|
||||
- Publishes per-platform binaries plus `plugin.toml` as **GitHub Release**
|
||||
assets (see `crates/ocs_example_plugin` and its release workflow for a
|
||||
template). Asset names carry the platform, e.g.
|
||||
`your.plugin-linux-x86_64.so`, `…-windows-x86_64.dll`, `…-macos-aarch64.dylib`.
|
||||
- `plugin.toml` declares an `api_version` compatible with the host.
|
||||
|
||||
The host reads the release matching the user's platform, checks the API
|
||||
version, and installs it into the user's plugins folder.
|
||||
|
||||
> Listing is curation, not endorsement or a security review. Installing a
|
||||
> plugin runs its native code; users install at their own risk.
|
||||
7
plugins/registry.json
Normal file
7
plugins/registry.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
[
|
||||
{
|
||||
"repo": "HakanSeven12/opencad-example-plugin",
|
||||
"name": "Example Plugin",
|
||||
"description": "Reference dynamically-loaded add-on (ribbon tab + EX_HELLO command)."
|
||||
}
|
||||
]
|
||||
Loading…
Reference in a new issue