2021-04-15 00:12:38 +08:00
# New plugin checklist
2024-01-17 23:57:56 +08:00
2021-04-15 00:12:38 +08:00
- [ ] The plugin is a project under `modules\launcher\Plugins`
- [ ] Microsoft plugin project name pattern: `Microsoft.PowerToys.Run.Plugin.{PluginName}`
- [ ] Community plugin project name pattern: `Community.PowerToys.Run.Plugin.{PluginName}`
2024-01-17 23:57:56 +08:00
- [ ] The plugin target framework should be `net8.0-windows`
2021-05-24 18:07:30 +08:00
- [ ] The project file should import `Version.props` and specify `<Version>$(Version).0</Version>`
2023-12-26 17:19:15 +08:00
- [ ] If the plugin uses any 3rd party dependencies the project file should import `DynamicPlugin.props`
2024-01-17 23:57:56 +08:00
- [ ] The plugin has to contain a `plugin.json` file of the following format in its root folder:
```json
2021-04-15 00:12:38 +08:00
{
"ID": string, // GUID string
"ActionKeyword": string, // Direct activation phrase
"IsGlobal": boolean,
"Name": string, // Has to be unique, same as 'PluginName' in the project name pattern
"Author": string,
"Version": "1.0.0", // For future compatibility
"Language": "csharp", // So far we support only csharp
"Website": "https://aka.ms/powertoys",
"ExecuteFileName": string, // Should be {Type}.PowerToys.Run.Plugin.{PluginName}.dll
"IcoPathDark": string, // Path to dark theme icon. The path is relative to the root plugin folder
2023-12-26 17:19:15 +08:00
"IcoPathLight": string // Path to light theme icon. The path is relative to the root plugin folder
"DynamicLoading": bool // Sets whether the plugin should dynamically load any dependencies isolated from the core application.
2021-04-15 00:12:38 +08:00
}
```
2024-01-17 23:57:56 +08:00
2023-10-11 22:37:15 +08:00
- [ ] Make sure your `Main` class contains a public, static string property for the `PluginID` . The plugin id has to be the same as the one in the `plugin.json` file.
2024-01-17 23:57:56 +08:00
2023-10-11 22:37:15 +08:00
```csharp
public static string PluginID => "xxxxxxx"; // The part xxxxxxx stands for the plugin ID.
```
2024-01-17 23:57:56 +08:00
2021-04-15 00:12:38 +08:00
- [ ] Do not use plugin name or PowerToys as prefixes for entities inside of the plugin project
- [ ] The plugin has to have Unit tests. Use MSTest framework
- [ ] Plugin's output code and assets have to be included in the installer [`Product.wxs` ](/installer/PowerToysSetup/Product.wxs )
- [ ] Test the plugin with a local build. Build the installer, install, check that the plugin works as expected
- [ ] All plugin's binaries have to be included in the signed build [`pipeline.user.windows.yml` ](/.pipelines/pipeline.user.windows.yml )
2024-01-17 23:53:02 +08:00
- [ ] The plugin target framework has to be net8.0-windows. All dependencies should be compatible with .NET 8.
2021-05-07 17:26:08 +08:00
Some localization steps can only be done after the first pass by the localization team to provide the localized resources.
In the PR that adds a new plugin, reference a new issue to track the work for fully enabling localization for the new plugin.
2024-01-17 23:57:56 +08:00
- [ ] Add the resource folder to https://github.com/microsoft/PowerToys/blob/21247c0bb09a1bee3d14d6efa53d0c247f7236af/installer/PowerToysSetup/Product.wxs#L825
- [ ] Add the resource files under the section https://github.com/microsoft/PowerToys/blob/21247c0bb09a1bee3d14d6efa53d0c247f7236af/installer/PowerToysSetup/Product.wxs#L882