This is the list Notepad++ Plugin Manager uses for the x64 plugins. x86 (32 bit) plugins are managed via the admin system
We're working on a new admin system (come and help) that supports editing x64 plugins (and a lot of other improvements), but until that is ready, we have this git managed XML list and JSON file for the validations for the x64 plugin list.
Create a PR that adds the plugin description to plugins/plugins64.xml.
The following is a template:
<plugin name="My Plugin">
<x64Version>1.4.4</x64Version>
<description>Description of the plugin that appears in the list</description>
<author>Your name / email / handle / whatever you're willing to provide</author>
<latestUpdate>Details of the latest update, shown when a plugin update is notified</latestUpdate>
<install>
<x64>
<download>https://github.com/me/myplugin/releases/download/v1.4.4/MyPlugin-x64.zip</download>
<copy from="myplugin.dll" to="$PLUGINDIR$" validate="true" />
<copy from="lib\*.*" to="$PLUGINDIR$\myplugin\lib" recursive="true" />
</x64>
</install>
</plugin>
The name
attribute must be exactly the name returned by the plugin's getName()
function and is case sensitive.
The install steps are run in the order they are listed, so this install will:
- download the zip file (it must be a zip file) and extract it to a temporary directory.
- Copy the the
myplugin.dll
extracted from the zip to the Notepad++ plugin directory, and validate it's md5 (see later) - Copy all of the files from the
lib
directory in the zip, recursively, to themyplugin\lib
directory under the Notepad++ plugin directory. Directories that do not already exist will be created.
It can be easier to copy the basic structure from the 32 bit entry and make the necessary modifications. To do that, just download the x86 plugin list: https://nppxml.bruderste.in/pm/xml/plugins.zip and find the entry in the PluginManagerPlugins.xml
file. For existing plugins in the x86 list from 2017/4/17 see as starting point plugins/plugins_template.xml, where 1. and 2. from below is already done.
Things to change:
- Remove the
<unicodeVersion>
and<ansiVersion>
- Add an
<x64Version>
tag with the version of your x64 plugin - Change the download URL to your x64 download path if you don't bundle all variants in one zip file
- Add the
md5sum
s to plugins/validate.json of each file that you're copying (with a<copy>
tag) withvalidate="true"
The version number of the latest x64 version. If this element is not present, then the plugin will not be shown to x64 users
A description of the plugin, which appears in the box below the list
The authors name (and optionally email address etc), which is also displayed below the list
The home page / web site of the plugin, also displayed in the box below the list
The URL of the source of the plugin
The latest updates the plugin has had. Shown on the notification of an update, and on the updates tab.
If included, and not "Good", then the plugin is excluded if the user has "Show Unstable Plugins" disabled. Shown in the plugin list.
Contains a list of unstable version numbers, that will always come below the latest version identified in <x64Version>
. This is rarely used, but if you need to rollback a version, add the newer version here to say that that version is a bad version, and should be treated as a "lesser" version than that in the <x64Version>
tag.
<version number="1.4.5" report="Causes a crash, please rollback to 1.4.4">
Attributenumber
identifies the version number as bad, attributereport
is the status report, which is shown in the updates tab, and the notify window
A list of <alias>
elements with a name
attribute, identifying other names this plugin is known by.
If you change the name reported by your getName()
function, place the old names of the plugin in this list.
This is the set of install steps. Inside the <install>
tag must be an <x64>
tag, which identifies the steps as steps for x64 variant installation.
Steps are run in the order in which they are listed in the XML.
The steps that are available at the moment are:
<download>
This downloads from the URL contained within the element. This must be a zip file, and is automatically unzipped to a temporary location.
e.g. <download>https://github.com/me/myplugin/releases/download/v1.4.4/MyPlugin-x64.zip</download>
-
<copy>
This copies files from the temporary unzipped location to a destination directory. A destination directory must start with a variable, either$PLUGINDIR$ ,$CONFIGDIR$ or$NPPDIR$ which refer to the plugins directory, plugin config directory and the Notepad++ directory respectively. Directories that do not exist will automatically be created. It has the following attributes:-
from
Thefrom
attribute can be wildcarded (e.g.myplugin\*.dll
), and then theto
attribute must be a directory. -
to
Theto
attribute specifies a directory to copy the files to. It must start with a variable, which is one of$PLUGINDIR$
,$CONFIGDIR$
or$NPPDIR$
, which refer to the plugins directory, plugin config directory and the Notepad++ directory respectively. -
validate
Ifvalidate="true"
is included in the copy, then the file's MD5sum is checked against a known list of valid files at the server. That list is maintained in the validate.json file. Add any files to be validated there. If the file MD5sum is not listed in the validate.json file, the user will be warned that the file is unknown and should not be copied. They can however copy the file if they would like. -
backup
Ifbackup="true"
is included in the copy element, then if the destination file exists, it will be backed up to the same filename with.backup
appended. If the backup file exists, it will be backed up to a.backup2
file, and so on. This is normally used for config files, such that user's config is not lost, but a "good" / newer / up to date config can be installed. -
recursive
If therecursive="true"
attribute is specified, then all files in child directories are copied.
-
-
<delete>
This deletes the file or directory. The attributefile
specifies the file or directory to remove. WhenisDirectory="true"
is set, then the directory and all subdirectories are removed. This is most often used in theremove
section rather thaninstall
. -
<run>
This runs an arbitrary path, optionally with the variables ($PLUGINDIR$
,$CONFIGDIR$
and$NPPDIR$
).-
file
attribute specifies the executable to run (it is run withShellExecuteEx
with the verbopen
) -
arguments
specify all arguments, and are passed directly toShellExecuteEx
-
outsideNpp
iftrue
, the file is run after Notepad++ has closed (the user is prompted that a restart is necessary)
-
Contains the same structure as <install>
, but is the steps required when removing the plugin (these are not performed on update, only removal).
Note: You do not need to remove the main plugin DLL, that is done automatically. Only use the <remove>
tag if your plugin installs extra files which can and should be removed if the plugin is uninstalled.
e.g.
<remove>
<x64>
<delete file="$PLUGINDIR$\myplugin" isDirectory="true" />
<delete file="$CONFIGDIR$\myplugin.sampleconfig" />
</x64>
</remove>
A collection of <version>
elements that identify a version if the DLL does not report a version (or reports an incorrect version). Ideally this should not be used, and the DLL should have the FileVersion
set correctly to the version of the plugin, but sometimes this is not possible depending on the language used to compile the plugin.
Each <version>
element contains
* number
attribute, which is the correct version number
* md5
attribute which is the md5sum of the file
* comment
attribute can optionally be included to name the version or the reason why the version is incorrect
Executable code (DLLs, EXEs etc) should be validated, i.e. when the file is copied with the <copy>
tag, the validate="true"
attribute should be set. These files must have their md5sum
listed in the plugins/validate.json file - include the changes to that file in your PR.
The format of the file is straightforward, and is best shown with an example:
{
"Plugin Name": {
"cafefacefeedface1234567812345678": "filename.dll"
},
"Other plugin": {
"0123456789abcdef0123456789abcdef": "otherfile.dll",
"fedcba9876543210fedcba9876543210": "lib\\secondfile.dll"
}
}
md5sum
is a command line utility, and is can be run against a file locally to get the MD5 of the file. A version for windows is available here: http://unxutils.sourceforge.net/ , or if you have Git Bash
installed, it is included. Simply run md5sum myplugin.dll
to get the MD5 of the myplugin.dll
file.