Official plugins and contributor tooling for Universal Device Toolkit.
This repository now has one standard author workflow:
doctorinitdevtestvalidatepackagepromoteonly when a plugin should enter the official store
The standard entry point is llt-plugin.cmd, which delegates to Tools/PluginTooling.Cli.
- Windows 10/11 x64
- .NET 10 SDK
- A valid host baseline under
Dependencies/Host
Bootstrap host references when needed:
powershell -NoProfile -ExecutionPolicy Bypass -File .\Scripts\ensure-host-dependencies.ps1Dependencies/Host/host-release.json is the pinned host baseline for standalone plugin development.
Check the environment:
.\llt-plugin.cmd doctorCreate machine-readable agent reports:
.\llt-plugin.cmd `
doctor `
--json-report-path artifacts\agent\doctor.json
.\llt-plugin.cmd `
inspect `
--json-report-path artifacts\agent\inspect.jsonCreate a new plugin:
.\llt-plugin.cmd `
init `
--template feature-settings `
--folder MyPlugin `
--id my-plugin `
--name "My Plugin"Build and preview in one loop:
.\llt-plugin.cmd dev --plugin my-plugin --theme system --view featureRun only the build, test, or preview step when needed:
.\llt-plugin.cmd build --plugin my-plugin
.\llt-plugin.cmd test --plugin my-plugin
.\llt-plugin.cmd preview --plugin my-plugin --theme system --view featureValidate author requirements:
.\llt-plugin.cmd validate --plugin my-plugin --profile contributorCreate a local ZIP:
.\llt-plugin.cmd package --plugin my-plugin --build-firstOfficial store metadata lives in Plugins/<Plugin>/plugin.manifest.json under the store object.
store-entry.json is still emitted as a compatibility file for older release scripts.
Create the official metadata scaffold:
.\llt-plugin.cmd promote --plugin my-pluginThen fill in the final store-facing metadata:
descriptioniconiconBackgroundtagsdependenciessupportedLanguages
Validation profiles:
contributor: local author checksofficial-candidate: officialstoremetadata requiredofficial-release: release/store alignment checks
PluginWorkbench is the standard preview UI for authors.
It now:
- loads built plugin outputs or local ZIPs
- uses a host-style preview shell for feature/settings/optimization content
- supports
System / Light / Dark - defaults to safe
Previewmode - requires explicit confirmation before
Real Runtime
Direct launch:
dotnet run --project .\Tools\PluginWorkbench\PluginWorkbench.csproj -- `
--repository-root . `
--plugin-id custom-mouse `
--theme dark `
--view settingsSmoke:
make.bat workbench-smoke --plugin-id custom-mouse --theme Darkplugin.manifest.json is the authoring source of truth. It combines:
- runtime identity and compatibility
- feature/settings/runtime contributions
- package contents and asset name
- official store metadata
plugin.json is generated or synchronized for current host compatibility. Root store.json is generated release output, not a normal authoring file.
The workflow now mirrors VS Code extension development:
plugin.manifest.jsonplays the role of VS Code'spackage.jsoncontributesdeclares plugin entry pointsdevis the build-and-open preview looppackagecreates the installable ZIP, similar tovsce packagegenerate-storederives release metadata instead of hand-editing rootstore.json
The remaining difference is host compatibility: Universal Device Toolkit still ships plugin.json in plugin outputs until the main app loader moves to the unified manifest.
Short wrapper commands are available through make.bat:
make.bat doctormake.bat workbench-smoke --plugin-id custom-mouse --theme Darkmake.bat init --template feature-settings --folder MyPlugin --id my-plugin --name "My Plugin"make.bat dev --plugin my-plugin --theme systemmake.bat validate --plugin my-plugin --profile contributormake.bat preview --plugin my-plugin --theme systemmake.bat package --plugin my-plugin --build-firstmake.bat migratemake.bat promote --plugin my-plugin
new and pack remain compatibility aliases for init and package.
Preferred CI model:
validate.ymlfor PR/push validationrelease.ymlfor manual official publishing
Official release assets must keep the stable naming contract:
<plugin-id>-v<version>.zip