Dan's Plugin Manager
0
First released February 24, 2022 · Last updated October 6, 2026
Downloads from this site
91 total
29 latest (v0.6.0)
Lets operators download the community's plugins in-game or from the server console.
Every new server on Dan's Server Hosting (free Minecraft server hosting) ships with Dan's Plugin Manager preinstalled.
Usage
Last reported in use 9 days ago
8 server starts in the last 30 days
Server starts per day
Versions in use, by share of server starts
0.7.0-SNAPSHOT-8-8-2026
100% · 8 starts
Usage reported by trace — how it works. CI and test servers are excluded.
Versions
All releases on GitHubAutomated build of main at 9e59873bb8007b4740500002dc27af22707a9e0c.
This is not a release. It is unreleased, unreviewed code that has not been through any release check, and a broken build can stop a server from starting. Do not run it on a server you care about without a backup.
This is the plugin manager itself, so it cannot install this build: download the jar
below into your server's plugins/ folder and restart. Return to the published
release by replacing it with the jar from the latest stable release.
Snapshot release marking Dans-Plugin-Manager's move to an AI-first development approach.
Day-to-day feature work, grooming, review and maintenance now run through AI agents working directly against this repository, with the maintainers setting direction and approving what lands. The version bump marks that change in how the project is built — it is not a compatibility break. Behaviour, configuration and stored data are unchanged, and existing installations can upgrade in place.
This is a dated snapshot, not a finished release. It follows the precedent set by Medieval
Factions' 6.0.0-SNAPSHOT-7-25-2026: the AI-first line has not yet been verified in live operation,
and the snapshot designation stays until it has.
Version changes
pom.xml:0.6.0→0.7.0-SNAPSHOT-8-8-2026
Opened as https://github.com/Dans-Plugins/Dans-Plugin-Manager/pull/121.
Drafted by Claude on behalf of Daniel Stephenson.
Added
discordWebhookconfig key — when set, DPM posts a summary notification to the specified Discord channel after each/dpm updaterun (with per-plugin version diffs) and on any download failure from/dpm get(#83)DiscordNotificationService— sends optional Discord webhook notifications; exceptions are silently swallowed so a failed webhook never affects the command result (#83)- Single retry with a 2-second delay on transient network failures:
GitHubReleaseService.doFetch()retries once onIOExceptionor 5xx responses;DownloadService.openNetworkStream()retries once onIOException; 4xx responses are not retried (#85) Logger.warn()— always prints to the console regardless ofdebugMode, used for operator-visible error messages (#80)- Server-console audit trail:
plugin.getLogger().info()is emitted on success and.warning()on failure for/dpm get,/dpm update,/dpm remove, and/dpm clean --confirm(#81, #87)
Fixed
VersionStorenow uses the injecteddansplugins.dpm.utils.Loggerinstead of a static JUL logger; load and save failures emit a clearly prefixed warning that always appears in the server console (#82)- GitHub rate-limit responses (HTTP 429 and HTTP 403 with
X-RateLimit-Remaining: 0) now produce a specific warning advising to configure agithubToken; previously they were logged as generic API errors (#79) - GitHub API authentication failures (HTTP 401) now produce a specific warning identifying the token as the cause; previously folded into the generic non-200 path (#88)
- Network errors, JAR download failures, and missing
.jarreleases now useLogger.warn()so they always appear in the server console, even whendebugModeis off (#80) - JAR download stream now sets a 10 s connect timeout and 30 s read timeout; previously
URL.openStream()had no timeout, so a hung CDN would stall the async task indefinitely - Conflicting JARs (e.g.
Plugin-1.0.0.jar) are now removed only after a successful download; previously they were deleted before the network call, silently uninstalling the plugin on any download failure - JAR write buffer increased from 1 KiB to 8 KiB, reducing I/O cycles for large plugin files
Removed
- Multi-line Javadoc blocks from
HelpCommand,DansPluginManager,Logger, andTabCompleter(CLAUDE.md violation)
Changed
/dpm statsnow shows available plugin count (registered minus installed) as a third stat line/dpm list availablenow appends each plugin's description after its name, separated by an em-dash/dpm remove <plugin-name> --confirmnow prints a reinstall hint (/dpm get <name>) after the removal success message/dpm updatesuccess message now shows the old and new version tag (e.g.v4.5.0 → v4.6.3) when a plugin was previously tagged; shows only the new tag if no prior tag was stored- All "Plugin not found" errors across
/dpm get,/dpm update,/dpm info, and/dpm removenow appendUse /dpm search <keyword> to find the right name. /dpm removepreview and confirm paths now warn when other installed plugins declare a hard dependency on the plugin being removed- Download failures now distinguish between network errors (GitHub unreachable) and file write errors (plugins folder not writable), surfacing a specific hint in each case
What's New in 0.5.0
Added
- Docker-based integration test CI (
integration-test/test_dpm.py+.github/workflows/integration.yml) that spins up an OMCSI Spigot stack, deploys DPM, and assertsdpm list,dpm get, anddpm searchproduce the expected output; runs on workflow dispatch and nightly schedule /dpm getnow auto-downloads missing hard dependencies that are registered DPC plugins before downloading the requested plugin(s); transitive dependencies are resolved recursively and circular chains are handled safely/dpm update [plugin-name ...]— when plugin names are provided, only those plugins are updated; tab-completion offers installed plugin names at every argument position/dpm search <keyword>— searches registered plugin names and descriptions (case-insensitive substring match); results are colour-coded by install status/dpm statsnow shows installed plugin count alongside the total registered count/dpm reload— reloadsconfig.ymland re-applies live settings (e.g.githubToken) without a server restart/dpm remove <plugin-name> [--confirm]— previews the JAR to be deleted; pass--confirmto actually remove it- Tab-completion for
/dpm remove,/dpm clean,/dpm get,/dpm list, and/dpm update - One-line descriptions added to all 28 registered plugins; shown by
/dpm info - Dependency declarations on
ProjectRecord— hard and soft DPC-to-DPC relationships;/dpm infoshows each dependency and install status /dpm getaccepts multiple plugin names/dpm list installedand/dpm list availablesubcommands
Changed
PluginFolderService: O(1) batch directory scan viafindAllConflictingJarsandfilterInstalled; eliminates O(N×M) loops across commandsGitHubReleaseServicecaches release responses for the session;/dpm reloadclears the cache/dpm cleanpreviews deletions by default; pass--confirmto act- Removed Javadoc blocks project-wide; kept non-obvious algorithm notes as single-line comments
What's New
This release completes the core plugin management lifecycle — browse, inspect, download, update, and track versions — all from within the game or server console.
Commands
/dpm get <plugin>— Downloads the latest release JAR from GitHub automatically. Skips re-download if the plugin is already on the latest version./dpm update— Checks every installed managed plugin against its latest GitHub release and downloads any that are out of date. Prints per-plugin results and a summary./dpm info <plugin>— Shows GitHub owner, repository, latest release tag, publish date, and install/update status without downloading anything./dpm list— Now shows installed plugins in green (with version tag when known) and uninstalled plugins in grey./dpm clean— Removes duplicate/conflicting plugin JARs from the plugins folder.
Other Additions
- Tab-completion for all
/dpmsub-commands and plugin names for/dpm getand/dpm info. - Version tracking — the last-downloaded release tag is persisted in
dpm-versions.propertiesso DPM knows what's installed. githubTokenconfig option — set a GitHub personal access token to raise the API rate limit from 60 to 5 000 requests per hour. See USER_GUIDE.md for setup instructions.- 9 additional DPC plugin repos registered (Bluemap_MedievalFactions, Bookshelves-You-Can-Use, Dans-Set-Home, Democracy, FlyCommand, Herald, KDRTracker, Medieval-Cookery, MiniFactions). Total: 28 plugins.
Changes
- Downloads run asynchronously and no longer block the main server thread.
- Conflicting JARs (e.g. manually installed versioned copies) are automatically removed before a new version is downloaded.
Removed
- ChatHub (repo no longer exists).
See COMMANDS.md for the full command reference and USER_GUIDE.md for setup and configuration.
More project records have been added in this version.
Notes
- A stats command has also been added.
This is the initial version of the plugin.
Notes
- Five plugins can be downloaded using this version.
Related plugins
Something wrong, or something missing?
Bugs go to the plugin's issue tracker, where they can actually be fixed and tracked. Ideas for new behaviour go to the Dev Portal, where the community can upvote them.
