Overview
The plugin system works (drop folder + restart) but there's no discovery or installation UI. Users have to manually find repos, git clone, and restart. That's not "Open" or "plug and play."
What We Need
The admin panel should have a Plugin Marketplace tab where users can:
- Browse available plugins — catalog of approved/community plugins with descriptions, screenshots, install counts
- One-click install — click "Install" → app pulls from the plugin's GitHub repo → done
- One-click uninstall — remove without touching the terminal
- Update notifications — show when a newer version is available
- Status indicators — installed, active, needs config (missing API key), update available
Implementation
Plugin Registry (source of truth)
A plugins-registry.json hosted in the openvoiceui-plugins repo:
{
"plugins": [
{
"id": "example-gateway",
"name": "Example Gateway",
"description": "Reference implementation for custom LLM backends",
"repo": "MCERQUA/openvoiceui-plugins",
"path": "plugins/example-gateway",
"category": "gateway",
"version": "1.0.0"
}
]
}
Admin Panel
- New sidebar section or tab: "Plugin Marketplace"
- Cards showing each plugin: name, description, category (gateway/tts/stt/face/tool), install button
- Installed plugins show status, config requirements, uninstall button
Backend
GET /api/plugins/catalog — fetch registry, merge with installed state
POST /api/plugins/install — git clone from repo URL into plugins/
POST /api/plugins/uninstall — remove plugin folder
POST /api/plugins/update — git pull latest
No restart required (stretch goal)
Hot-reload plugins without container restart — Flask blueprint dynamic registration.
Related
Overview
The plugin system works (drop folder + restart) but there's no discovery or installation UI. Users have to manually find repos, git clone, and restart. That's not "Open" or "plug and play."
What We Need
The admin panel should have a Plugin Marketplace tab where users can:
Implementation
Plugin Registry (source of truth)
A
plugins-registry.jsonhosted in the openvoiceui-plugins repo:{ "plugins": [ { "id": "example-gateway", "name": "Example Gateway", "description": "Reference implementation for custom LLM backends", "repo": "MCERQUA/openvoiceui-plugins", "path": "plugins/example-gateway", "category": "gateway", "version": "1.0.0" } ] }Admin Panel
Backend
GET /api/plugins/catalog— fetch registry, merge with installed statePOST /api/plugins/install— git clone from repo URL intoplugins/POST /api/plugins/uninstall— remove plugin folderPOST /api/plugins/update— git pull latestNo restart required (stretch goal)
Hot-reload plugins without container restart — Flask blueprint dynamic registration.
Related