Plugin releases
Qwen-MM-Plugins publishes one Python distribution but versions each capability independently. A capability release covers its Skill, manifests, MCP configuration, server code, and the shared code visible at that tag.
Version model
| Version | Scope | Source of truth |
|---|---|---|
| Plugin version | One capability | plugin-versions.json → plugins.<cap> |
| Distribution version | Repository snapshot and shared Python distribution | distribution_version in the same file |
| Marketplace metadata version | Catalog snapshot; not a claim that every plugin changed | Distribution version |
| Plugin tag | Immutable source snapshot for one capability | qwen-mm-plugins-<cap>-v<semver> |
Marketplace entries and MCP uvx --from specs pin the same plugin tag. main is development-only.
Although a tag contains the whole distribution, each plugin launches its own tagged environment;
releasing search does not update an installed core.
Use SemVer per capability: patch for compatible fixes, minor for additive tools or behavior, and major for breaking schemas, removed tools, or incompatible configuration. Shared runtime changes require releases for every affected capability.
Release checklist
-
Prepare every affected capability on the PR branch:
git fetch origin --tags --prune python3 scripts/prepare_plugin_release.py search 1.1.0 --distribution-version 1.0.2 python3 scripts/check_manifests.py python3 -m pytest -m "not reachability" tests/The script updates release metadata and launch refs; it does not commit, tag, or push. When several capabilities share one release commit, prepare them with the same distribution version.
-
Commit the code and generated release metadata together, open the PR, and wait for it to merge.
-
Create the annotated tag on the exact commit now present on
origin/main:python3 scripts/tag_plugin_release.py search git show qwen-mm-plugins-search-v1.1.0 git push origin qwen-mm-plugins-search-v1.1.0The helper fetches
origin/mainand existing tags, verifies the release metadata and target tag are consistent, and builds the annotated message from non-merge commits that touched the capability since the previous capability tag, including cookbook history from before the Hub migration. It does not inspect commits in the separate Hub repository. It shows shared runtime commits separately for review; include a relevant one with--include-shared <commit>. Pass--dry-runto preview or--pushto create and push in one step.Tagging after merge keeps releases on the main history even when GitHub uses squash or rebase merges. The helper refuses to replace a local or remote tag. Never move a published tag; issue a patch release instead.
-
Smoke-test the published tag using the installation guide.
Hub documentation
Cookbooks and cases now live in QwenLM/qwen-mm-plugins-hub. Changes limited to that repository need a Hub deployment, not a plugin version bump. General English guides stay in this repository and are imported when the Hub builds.
After a release or documentation update, the Hub detects changes to the branch selected by
source.config.json, normally plugin main, and its capability tags. Automatic publishing waits
until all tags referenced by the catalog exist. See Publish and refresh
for the scheduled fallback, optional immediate dispatch, and PR build checks.
Publishing the Hub never creates plugin tags or updates installed plugins.
Release cadence
Batch ready changes roughly weekly, skip empty weeks, and release critical fixes when needed.
Multiple capability tags may point to the same merged commit. The example capability is a
development template and is not published.