Protect your server by hiding installed plugins from users (and more)
Stop players from fingerprinting your server's plugin list.
PluginGuard is a lightweight, drop-in protection layer that intercepts the commands and protocol channels players use to discover which plugins you're running — /plugins, /pl, /ver, bukkit: and minecraft: prefixed commands, tab-completion probing, and server-list pings — and replaces the response with whatever you want them to see.
Knowing which plugins a server runs is the first step in attacking it. A player who knows you run a specific economy plugin, an outdated permissions plugin, or a known-vulnerable utility can target known CVEs or exploit-known quirks. Default Bukkit gives that information away to anyone who types /pl.
PluginGuard closes every public surface that leaks plugin presence.
unknown-command — indistinguishable from a typo (most realistic)empty — Plugins (0):fake-list — return a list of plausible-looking decoy pluginspermission-denied — pretend the player lacks permissionbukkit: / minecraft: prefix protection — block or redirect prefixed-command probing./[tab] so they can't be discovered by autocomplete./essentials, /lp, /we, /co, /mv, /dynmap, /gp, and friends all return "Unknown command" instead of "You don't have permission" — denying the existence/permission distinction attackers use to enumerate.vanilla (or anything you configure) in MOTD / server-list ping protocol responses.<command>.use permission can use them./help does nothing but a bukkit:-prefixed probe plus two enumeration attempts will trip the detector.pluginguard.bypass see the real server, untouched, and never trigger detection./pluginguard reload swaps the live config atomically.| Property | Value |
|---|---|
| Minecraft | 1.21.x and 26.x.x |
| Java | 21+ (1.21.x) / 25+ (26.x.x) |
| Server software | Paper, Purpur, Pufferfish, Folia, Leaf, and other Paper forks |
| Spigot / CraftBukkit | Loads cleanly; server-brand spoofing is disabled (Paper-only API) |
| Folia | Supported — declared via folia-supported: true, fully lock-free, no scheduler use |
PluginGuard is built to be invisible to your TPS.
probes.log and admin alerts are dispatched off the calling region thread via Paper / Folia's async and global-region schedulers, so the event handlers themselves stay cheap.@Volatile reference; readers on every Folia region thread access it without contention.The full config.yml ships with inline comments explaining every option. A taste:
# How to respond when a player tries to enumerate plugins.
hide-mode: "unknown-command"
# Shown when hide-mode is "fake-list".
fake-plugins:
- "ServerCore"
- "WorldManager"
- "CoreProtect"
- "EveryoneChat"
bypass-permission: "pluginguard.bypass"
protected-commands: [pl, plugins, ver, version, "?", help, about, icanhasbukkit]
block-bukkit-commands: true
redirect-bukkit-commands: false
hide-tab-completion: true
block-unknown-commands: true
block-common-plugin-commands: true
hide-server-brand: true
fake-server-brand: "vanilla"
aggressive-mode: false
# Probe logging & detection
logging:
log-to-file: false
log-individual-probes: false
detection:
enabled: true
score-threshold: 5
window-seconds: 60
alert-cooldown-seconds: 300
notify-permission: "pluginguard.alerts"
# Honeypot commands — fake commands no legitimate user would type.
# A single hit fires an immediate alert.
honeypot-commands:
- "staffchat"
- "adminchat"
- "modchat"
- "opme"
| Category | Weight | Examples |
|---|---|---|
| Honeypot | 5 | Anything you list under honeypot-commands |
| High | 3 | bukkit: / minecraft: prefixed probes, /icanhasbukkit |
| Medium | 2 | /pl, /plugins, /ver, /version, /about |
| Low | 1 | /lp, /we, /co, /mv, /dynmap, ... |
/help and /? are deliberately never tracked — too commonly legitimate to be useful signal.
| Command | Description | Permission |
|---|---|---|
/pluginguard reload |
Atomically reload the configuration | pluginguard.reload (default: op) |
/pluginguard status |
Show current protection status | pluginguard.reload (default: op) |
Alias: /pg
| Node | Description | Default |
|---|---|---|
pluginguard.bypass |
See the real plugin list and bypass all hiding | op |
pluginguard.reload |
Reload PluginGuard configuration | op |
pluginguard.alerts |
Receive in-game probe-detector alerts | op |
PluginGuard-<version>.jar into your plugins/ folder.plugins/PluginGuard/config.yml./pluginguard reload.That's it. No external dependencies. No database. No web dashboard.