Advanced Plugin Publishing
This document covers certain advanced topics related to publishing plugins for Dalamud. The information in these sections is generally not considered required reading, but will be useful in certain edge cases.
Globally Disabling a Plugin
On occasion, it may be desirable to globally disable a specific plugin for all users. This may be due to a serious bug, game crashes, server-side issues, or other concerns. Dalamud provides the ability to "ban" a broken plugin version via a built-in kill switch, preventing it from being loaded or installed by any user until an updated version is published. It is important to note that the plugin ban system is built as a safety tool, and can not be used for plugin moderation.
To ban a plugin, the plugin's maintainer must open a pull request against the
bannedPlugin.json
file in the
DalamudAssets
repository and either add or update the entry
for their specific plugin. The Dalamud team will review the request, verify the
maintainer's identity, and merge the request if everything is in order.
The bannedPlugin.json
file is a JSON array of objects, with each object having
the following keys:
Name
: The internal/assembly name of the plugin to ban.AssemblyVersion
: The version of the plugin to ban. All versions up to and including this version will be disabled for all users. If unspecified, all versions of the plugin will be disabled.Reason
: A short (optional) reason to display to users in the Plugin Installer.
While plugins from custom repositories may also be banned through this system,
the defined Name
must be the (uppercase) SHA256 sum of the plugin's internal
name.
The pull request must also be made by someone directly associated with the custom repository plugin in question, such as the repository owner or a frequent contributor.
Internally, after a pull request is merged, any future launches via XIVLauncher
will download the updated assets package (including the bannedPlugin.json
file) and apply it. The Plugin Installer will then show a warning on any banned
plugins and prevent them from being loaded. Banned plugin data will remain
preserved, and Dalamud will not automatically uninstall or delete the plugin.
To unban a plugin, the maintainer of the plugin must publish a new version of
the plugin with an AssemblyVersion
greater than the banned version. Entries
are generally not removed from the bannedPlugin.json
file, as old versions of
the plugin may still be installed by some users.
Plugins that do not specify an AssemblyVersion
are considered to be
permanently disabled. This mechanism is intended to be used for plugins that
will no longer receive updates, or in cases where the plugin's maintainer has
requested that the same internal name not be used again by a future developer.
Requests of this nature generally need to include justification - for example,
plugin configurations may contain sensitive information that should not be
disclosed or sent to a fork or new build.
In certain extenuating circumstances, the Dalamud team reserves the right to ban mainline plugins without the maintainer's consent. This is generally only done in response to game-breaking issues, critical user safety concerns, or other serious matters. In this case, the Dalamud team will make a reasonable attempt to contact the plugin's maintainer and inform them of the situation. The Dalamud team will not issue bans for custom repository plugins under this policy.