Dan's Plugin Manager Guide
0
Dans Plugin Manager User Guide
What is Dans Plugin Manager?
Dans Plugin Manager (DPM) is a Spigot plugin that lets server operators browse and download DPC plugins in-game or from the server console.
Installation
- Download the latest
DansPluginManager-<version>.jarfrom the Releases page. - Place the JAR in your server's
plugins/folder. - Restart the server.
Getting Started
- Run
/dpm listto see all DPC plugins. Green entries are installed (with version tag when known); grey entries are not yet installed. Passinstalledoravailableto filter the list, oroutdatedto see which installed plugins have a newer build on their channel — a read-only check that installs nothing, so what/dpm updatewould change can be reviewed first. - Run
/dpm info <plugin-name>to see a plugin's description, GitHub owner, repository, release channel, latest build on that channel, publish date, install status, and any required or optional dependencies. - Run
/dpm get <plugin-name>to download a plugin to your server'splugins/folder. The name must match the one shown by/dpm list(e.g.medievalfactions). Multiple names are accepted:/dpm get plugin1 plugin2. If a plugin is already on the latest version, the download is skipped. Missing hard dependencies that are registered DPC plugins are automatically included in the download; dependencies that are not registered DPC plugins produce a warning. Add--experimentalto install main-branch builds instead of published releases — see Release channels. - Run
/dpm updateto check every installed managed plugin against the latest build on the channel it is set to, and download any that are out of date. Pass one or more plugin names to update only those:/dpm update medievalfactions. - Restart the server to activate downloaded or updated plugins.
- Run
/dpm search <keyword>to find plugins by name or description (e.g./dpm search faction). Green results are installed; grey are not. - Run
/dpm cleanto preview duplicate plugin JARs (e.g. versioned copies left over from manual installs). Add--confirmto delete them. - Run
/dpm remove <plugin-name>to preview which JAR would be deleted. Add--confirmto remove it and clear its stored version tag and release channel.
/dpm get, /dpm update, /dpm info, and /dpm clean do their work in the background and report the result when it finishes. When the command came from anyone other than the server console — a player, or RCON — the result is also written to the server log, prefixed with [to <sender>]. An RCON client only receives output produced while its command is running, so for RCON-driven servers the log is where these results appear.
Release channels
Every managed plugin tracks one of two channels.
| Channel | What you get | How it is published |
|---|---|---|
| stable (default) | The plugin's latest published GitHub release — the versions the maintainers have tagged and announced. | Manually, when maintainers cut a release. |
| experimental | A build of the plugin's main branch, refreshed every time a change is merged. | Automatically by the plugin repository's CI, as a rolling dev prerelease. |
Experimental builds are unreleased, unreviewed code. They have not been through a release check, they can contain half-finished work, and a broken build can stop your server from starting. Do not run them on a server you care about without a backup and a way to roll back.
Switching a plugin to experimental builds:
/dpm get medievalfactions --experimentalThe choice is remembered per plugin. From then on, plain /dpm get medievalfactions and /dpm update both keep that plugin on experimental builds — you do not need to repeat the flag. Switch it back with:
/dpm get medievalfactions --stableNotes:
- Dependencies keep their own channel. If an experimental plugin pulls in a dependency automatically, that dependency is installed from whatever channel it is set to. Putting a dependency on experimental builds takes its own
/dpm get <dependency> --experimental. - Version identity. Experimental builds all carry the same
devtag, so DPM records them asdev-<commit>(e.g.dev-abc1234) to tell one build from the next. That is what/dpm listand/dpm infoshow. /dpm list installedmarks them. Plugins on experimental builds are shown with a trailing[experimental].- Switching channels always re-downloads, because the two channels never share a version identity.
- Not every plugin publishes experimental builds. If a repository has no rolling build,
/dpm get <plugin> --experimentalreports that no experimental build is published and leaves the plugin on its current channel. - If a repository stops publishing them, the plugin stops updating. A plugin already pinned to experimental stays pinned even when its rolling build disappears, so
/dpm updateskips it on every run rather than quietly moving it back to releases. Both the chat message and the console say so and name the plugin;/dpm get <plugin> --stablereturns it to published releases. - Removing a plugin resets it to stable, so a later reinstall does not silently return to experimental builds.
Permissions
| Permission | Default | Description |
|---|---|---|
dpm.help | true | View the help menu. |
dpm.list | true | Browse DPC plugins: list all/installed/available/outdated and search by keyword. |
dpm.stats | true | View plugin statistics. |
dpm.get | op | Download one or more plugins to the server, and switch them between the stable and experimental channels. |
dpm.clean | op | Preview or remove duplicate plugin JARs. |
dpm.update | op | Update all installed managed plugins, or specific ones by name. |
dpm.info | true | View description, release info, install status, and dependencies for a plugin. |
dpm.reload | op | Reload the DPM config. |
dpm.remove | op | Preview or remove an installed managed plugin. |
Configuration
DPM generates a config.yml in plugins/DansPluginManager/ on first run. See CONFIG.md for all options.
The most useful option for operators running frequent updates is githubToken. GitHub limits unauthenticated API requests to 60 per hour, and DPM logs a console warning on every startup and /dpm reload while the token is empty. Setting a personal access token raises the limit to 5 000 per hour:
- Go to GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
- Generate a new token with no scopes selected (public repo read access is granted by default)
- Add it to
config.yml:githubToken: "ghp_your_token_here" - Run
/dpm reloadto apply the change without restarting the server.
experimentalReleaseTag controls which GitHub release tag experimental builds are read from. It defaults to dev and only needs changing if the plugin repositories publish their rolling build under a different tag. Run /dpm reload to apply a change.
To receive Discord notifications when /dpm update completes or when a download fails, set discordWebhook in config.yml to a Discord webhook URL and run /dpm reload. Create a webhook in your Discord server under channel settings → Integrations → Webhooks. Leave the value empty to disable notifications.
DPM reports usage events — startup when it is enabled and command each time /dpm is used — to the author's trace server so it is known which plugins are actually in use. Each event also carries a random server ID (the server-id line in plugins/trace/config.yml) so servers can be counted; it identifies no person, account or IP address, and deleting the line gets a new one. Nothing about players is sent, and DPM says on every startup whether reporting is on. To turn it off, set usage-reporting.enabled to false in config.yml and restart the server; enabled: false in plugins/trace/config.yml turns it off for every plugin that reports this way, and the environment variable TRACE_USAGE_REPORTING=off or DO_NOT_TRACK=1 for the whole process. See CONFIG.md and https://danielstephenson.dev/usage-reporting for details.
Support
Ask questions in the Discord server or open a GitHub issue.