Repository navigation
feat: add the plugin marketplace and export API - #126
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
There are a few correctness/UX issues in the new marketplace/packaging paths (notably order-sensitive permission matching and misleading install prompts) that should be fixed before approval.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds a first-party plugin marketplace flow (official signed catalog + direct GitHub installs), deep-link handling via qrate://, and a plugin export API (v2) that lets plugins generate host-written JSON from immutable table snapshots.
Changes:
- Introduce
plugin-packagecrate for signed catalog verification, ZIP inspection/extraction, and managed install receipts. - Extend the plugin host + plugin API to support API v2 exports and static
qrate-plugin.jsoncontract checks for managed packages. - Add app UI/actions for discovery/installation, plus OS protocol registration and a per-user single-instance deep-link handoff; update docs to match.
File summaries
| File | Description |
|---|---|
| scripts/installer.wxs | Registers the qrate URL protocol handler for the MSI installer. |
| scripts/installer.nsi | Registers/removes the qrate URL protocol handler for the NSIS installer. |
| README.md | Updates docs navigation link text for plugin discovery/install docs. |
| docs/plugins/index.md | Expands user docs to cover official/direct/manual plugin install paths and new package manifest. |
| docs/plugins/api-reference.md | Updates plugin API docs to api_version = 2 and documents JSON exports. |
| docs/dev/plugin-marketplace-plan.md | Adds detailed internal design/plan document for the marketplace. |
| crates/plugin-package/src/lib.rs | New crate implementing catalog verification, GitHub release resolution, package inspection, install/update/remove, and tests. |
| crates/plugin-package/Cargo.toml | Adds dependencies for the new plugin-package crate. |
| crates/plugin-host/src/plugin.rs | Bumps plugin host API version to 2 and adds export execution + snapshot validation and packaged-descriptor matching. |
| crates/plugin-host/src/lib.rs | Adds package-on-disk parsing/validation, export spec aggregation, and debug-only repo plugin search path. |
| crates/plugin-api/src/lib.rs | Adds ExportSpec and snapshot types shared between app and host. |
| crates/app/src/title_items/launcher_bar.rs | Adds Extensions menu entries for plugin discovery/management. |
| crates/app/src/plugin_marketplace.rs | New UI window for signed catalog review + direct GitHub install flow. |
| crates/app/src/main.rs | Registers URL scheme, parses initial qrate:// arg, starts handoff watcher, and wires plugin export action. |
| crates/app/src/instance_handoff.rs | New per-user handoff mechanism so deep links reach the already-running instance. |
| crates/app/src/export.rs | Adds PluginExport action and host-mediated JSON export path (save dialog + atomic write). |
| crates/app/src/app_settings/mod.rs | Extends Plugins settings page with discovery/install entry points and managed-package removal. |
| crates/app/src/app_menus.rs | Adds plugin exports to File ▸ Export and adds Extensions menu actions. |
| crates/app/Cargo.toml | Adds plugin-package, single-instance, and tempfile dependencies. |
| CONTRIBUTING.md | Updates contributor guidance to reference the template + registry repos. |
| CLAUDE.md | Updates cross-repo plugin contract guidance to include registry + site responsibilities. |
| Cargo.toml | Adds crates/plugin-package to the workspace. |
| Cargo.lock | Locks new dependencies (plugin-package, single-instance, transitive deps). |
| assets/macos/Info.plist | Registers qrate URL scheme on macOS. |
| .github/workflows/release.yml | Injects the plugin catalog public key into release builds and updates Linux desktop entry for scheme handling. |
Review details
Suppressed comments (1)
crates/app/src/plugin_marketplace.rs:316
- The direct-install confirmation doesn’t mention that first-time installs are disabled by default (but the code does disable them when no prior receipt exists). Adding that note helps users understand why the plugin won’t immediately run after installation.
Some(&format!(
"{} · SHA-256 {} · {permissions}. qrate has not reviewed this source.",
release.repository, inspection.sha256
)),
- Files reviewed: 24/25 changed files
- Comments generated: 4
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
devnull03
force-pushed
the
feat/plugin-marketplace
branch
from
September 10, 2026 03:00
ffa8918 to
b83b4e6
Compare
devnull03
force-pushed
the
feat/plugin-marketplace
branch
from
September 10, 2026 20:54
b83b4e6 to
f3b9f1a
Compare
Keep the inline installer alive across settings renders so its buttons receive clicks, move the install action into a fixed footer, close the review window after installing, enable new installs by default, title settings groups with the plugin name, and rename the Extensions menu to Plugins. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Packaged plugins take their heading from qrate-plugin.json, including switched-off ones.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
qrate://plugin install linksValidation
cargo check -p appcargo test -p plugin-host -p plugin-packagemain: 34 passed, 7 ignored, 0 failed