What Is a Plugin?

Minecraft server plugins are JAR (Java Archive) files that add new features to your server. They are developed against the Bukkit/Spigot/Paper API and placed in your server's plugins/ folder.

The plugin system takes your Minecraft server beyond vanilla: permission management, economy, region protection, chat formatting, minigames and much more are added through plugins.

  • Bukkit API — the original plugin API, works with CraftBukkit
  • Spigot API — the extended version of Bukkit, offering more events and features
  • Paper API — a modern API built on top of Spigot, with advanced features such as async chunk loading
  • Folia API — the multithreaded version of Paper, for high player counts

Every plugin is loaded when the server starts, its onEnable() method is called, and it is cleaned up with onDisable() when the server shuts down. Plugins can declare depend and softdepend relationships with each other.

How to Install a Plugin

Installing a plugin has three steps: download, drop in, restart. The .jar file downloaded from a trusted source is placed in the plugins/ folder and the server is fully restarted.

Trusted Download Sources

PlatformURLNotes
SpigotMCspigotmc.orgThe largest plugin marketplace, premium and free plugins
Modrinthmodrinth.comA modern platform that prioritises open source
Hangarhangar.papermc.ioPaperMC's official plugin repository
GitHub Releasesgithub.comOfficial distributions of open-source plugins
Bukkit Devdev.bukkit.orgThe old but still-used CurseForge source

Installation Steps

# 1. Download the plugin JAR
cd ~/server/plugins
wget https://download.luckperms.net/1556/bukkit/loader/LuckPerms-Bukkit-5.4.141.jar

# 2. Stop the server completely
screen -r minecraft
stop

# 3. Start the server again
screen -S minecraft
java -Xms4G -Xmx4G -jar paper.jar nogui

Plugin File Structure

On its first run, every plugin creates its configuration files under a plugins/PluginName/ folder. Understanding this file structure is essential for configuring plugins correctly.

text
plugins/
├── LuckPerms/
│   ├── config.yml            # Main configuration
│   ├── luckperms-bukkit.jar  # Loader file
│   └── translations/         # Language files
├── Essentials/
│   ├── config.yml            # Main configuration (600+ lines)
│   ├── kits.yml              # Kit definitions
│   ├── worth.yml             # Item prices
│   └── userdata/             # Player data
├── WorldGuard/
│   ├── config.yml
│   └── worlds/
│       └── world/
│           └── regions.yml   # Region definitions
└── CoreProtect/
    ├── config.yml
    └── database.db           # SQLite database

config.yml Basics

Most plugins use a configuration file in YAML format. In YAML files indentation is critical — always use spaces, never tabs.

yaml
# Example config.yml structure
settings:
  debug: false
  locale: en_US
  auto-save: true
  auto-save-interval: 300

database:
  type: sqlite            # sqlite, mysql, h2
  host: localhost
  port: 3306
  name: plugin_db

Permission Nodes

Every plugin defines permission nodes that control access to its commands. These nodes usually follow the plugin.command format.

yaml
# Example permission definitions from a plugin.yml
permissions:
  essentials.home:
    description: Permission to use the home command
    default: true
  essentials.ban:
    description: Permission to ban players
    default: op
  essentials.*:
    description: All EssentialsX permissions
    children:
      essentials.home: true
      essentials.ban: true

The Must-Have Plugins

The table below summarises the core plugins that belong on almost every Minecraft server. Each has a different job, a different relationship to the others and a different priority.

PluginJobDependencyPriority
<strong>Vault</strong>Economy and permission API bridgeNoneMandatory
<strong>LuckPerms</strong>Permission and group managementNoneMandatory
<strong>EssentialsX</strong>Core commands, economy, teleportVault (recommended)Mandatory
<strong>WorldEdit</strong>World editing toolsNoneMandatory
<strong>WorldGuard</strong>Region protection, flag systemWorldEditMandatory
<strong>CoreProtect</strong>Logging, rollback, inspectNoneMandatory
<strong>TAB</strong>Tab list, nametags, scoreboardPlaceholderAPI (recommended)Highly Recommended
<strong>DiscordSRV</strong>MC-Discord chat synchronisationNoneRecommended
<strong>Spark</strong>Performance profilerNoneHighly Recommended
<strong>ViaVersion</strong>Multi-version supportNoneSituational
<strong>Geyser</strong>Bedrock supportFloodgateSituational

Vault

Vault is a bridge plugin that provides a shared API layer for economy, permission and chat systems on Minecraft servers. It offers no feature of its own; it lets other plugins talk to each other.

EssentialsX, for example, provides an economy system and LuckPerms provides a permission system — Vault connects the two. Chest shop plugins reach the economy through Vault, and chat plugins get prefix/suffix data through Vault.

  • Economy API: connects economy plugins such as EssentialsX and CMI to other plugins
  • Permission API: integrates permission plugins such as LuckPerms with other systems
  • Chat API: shares prefix, suffix and chat format information
# Installing Vault
cd ~/server/plugins
wget https://github.com/MilkBowl/Vault/releases/latest/download/Vault.jar

# Restart the server
# Vault detects LuckPerms and EssentialsX automatically

LuckPerms

LuckPerms is the industry-standard permission management plugin for modern Minecraft servers. It offers a group system, inheritance, prefixes/suffixes, a web editor and multi-platform support. It has replaced the older PermissionsEx and GroupManager.

For more detail on LuckPerms, take a look at our comprehensive guide:

bash
# Quick start commands
/lp editor                          # Open the web editor
/lp creategroup admin               # Create a group
/lp group admin parent add default  # Set up inheritance
/lp user Player parent set admin    # Assign a player to the group

EssentialsX

EssentialsX is a comprehensive plugin with more than 100 commands: home/spawn/warp teleport system, economy, chat formatting, kits, private messaging and much more. It is the foundation stone of almost every server.

Take a look at our detailed EssentialsX configuration guide:

yaml
# Key settings in plugins/Essentials/config.yml
teleport-cooldown: 3
teleport-delay: 3
starting-balance: 1000
currency-symbol: '$'
max-homes: 3
spawn-on-join: true

WorldEdit

WorldEdit is a powerful tool that lets you make large-scale edits to a Minecraft world. Selecting regions, replacing blocks, copy-paste, generating shapes and saving schematics can all be done from the command line.

CommandDescriptionExample
<code>//wand</code>Gives you the selection tool (a wooden axe)Left click = pos1, right click = pos2
<code>//set &lt;block&gt;</code>Fills the selection with the given block<code>//set stone</code>
<code>//copy</code>Copies the selection to the clipboardRelative to the player's position
<code>//paste</code>Pastes from the clipboard<code>//paste -a</code> (ignore air)
<code>//undo</code>Undoes the last operation<code>//undo 5</code> (last 5 operations)
<code>//replace &lt;old&gt; &lt;new&gt;</code>Replaces the given blocks<code>//replace dirt grass_block</code>
<code>//sphere &lt;block&gt; &lt;radius&gt;</code>Generates a sphere<code>//sphere glass 10</code>
<code>//cyl &lt;block&gt; &lt;radius&gt; &lt;height&gt;</code>Generates a cylinder<code>//cyl stone 5 10</code>
bash
# A common WorldEdit workflow
//wand                          # Grab the selection tool
# Left click for point 1, right click for point 2
//set air                       # Clear the selection
//copy                          # Copy the build
//paste                         # Paste it somewhere else
//undo                          # Undo if you made a mistake

WorldGuard

WorldGuard works together with WorldEdit to provide a region-based protection system. It supports spawn protection, PvP zones, mob spawn control, enter/exit messages and much more.

CommandDescription
<code>//wand</code> + selectionMark the region boundaries with WorldEdit
<code>/rg define &lt;name&gt;</code>Define a new region
<code>/rg flag &lt;region&gt; &lt;flag&gt; &lt;value&gt;</code>Set a flag on the region
<code>/rg addowner &lt;region&gt; &lt;player&gt;</code>Add an owner to the region
<code>/rg addmember &lt;region&gt; &lt;player&gt;</code>Add a member to the region
<code>/rg info &lt;region&gt;</code>Show region details
<code>/rg list</code>List every region
<code>/rg remove &lt;region&gt;</code>Delete the region
bash
# Example: creating a spawn region
//wand
# Select point 1 and point 2
//expand vert                   # Expand from sky to bedrock
/rg define spawn
/rg flag spawn pvp deny
/rg flag spawn build deny
/rg flag spawn mob-spawning deny
/rg flag spawn greeting &aWelcome to the spawn area!

Take a look at our detailed WorldGuard guide:

CoreProtect

CoreProtect is a logging/rollback plugin that records every block change, chest access, chat message and command on your server. It is indispensable for detecting and undoing griefing.

Inspect Mode

In inspect mode you can click any block to see who changed it and when:

/co inspect
# Now click any block
# It shows who placed/broke it, when, and what it was changed to
# Run /co inspect again to leave the mode

Rollback

Undo the changes made by a specific player or within a time range:

# Roll back one player's last hour
/co rollback user:Griefer time:1h

# Roll back one player's last 24 hours within a 20-block radius
/co rollback user:Griefer time:24h radius:20

# Roll back block breaks only
/co rollback user:Griefer time:6h action:break

# Roll back TNT explosions
/co rollback time:1h action:tnt

Lookup

You can view the log records without rolling anything back:

# Search all block breaks by a player
/co lookup user:Player action:break time:7d

# Show every change made in a given area
/co lookup radius:10 time:24h

# Check chest access logs
/co lookup user:Player action:container time:3d

TAB Plugin

TAB is a comprehensive plugin for customising the player list (the Tab key), nametags and the scoreboard. It integrates with PlaceholderAPI to show dynamic information.

Tab List Configuration

yaml
# plugins/TAB/config.yml
header-footer:
  enabled: true
  header:
    - '&b&lKEYDAL &fNetwork'
    - '&7Online: &a%online%/%maxplayers%'
  footer:
    - '&7keydal.com | &bDiscord: discord.gg/keydal'

Nametag Configuration

yaml
# Nametag (the text above a player's head)
nametags:
  enabled: true
  groups:
    admin:
      tagprefix: '&c[Admin] '
      tagsuffix: '
    moderator:
      tagprefix: '&6[Mod] '
      tagsuffix: '
    default:
      tagprefix: '&7'
      tagsuffix: '

Scoreboard Configuration

yaml
# Scoreboard (the info panel on the right of the screen)
scoreboard:
  enabled: true
  title: '&b&lKEYDAL'
  lines:
    - '&7&m                    '
    - '&fPlayer: &a%player%'
    - '&fPing: &a%ping%ms'
    - '&fTPS: &a%tps%'
    - '
    - '&fBalance: &a%essentials_balance%'
    - '&fRank: &a%luckperms_prefix%'
    - '&7&m                    '
    - '&bkeydal.com'

DiscordSRV

DiscordSRV provides two-way chat synchronisation between your Minecraft server and your Discord server. You can send messages from in-game to Discord and from Discord into the game.

Installation Steps

  • Create a new bot in the Discord Developer Portal
  • Copy the bot token
  • Enable the MESSAGE CONTENT INTENT and SERVER MEMBERS INTENT permissions
  • Invite the bot to your server
  • Drop the DiscordSRV JAR into the plugins/ folder
  • Restart the server
yaml
# plugins/DiscordSRV/config.yml
BotToken: 'PASTE_YOUR_BOT_TOKEN_HERE'
Channels:
  global: '123456789012345678'    # Discord channel ID

# Message format (MC -> Discord)
MinecraftChatToDiscordMessageFormat: '**%displayname%** > %message%'

# Message format (Discord -> MC)
DiscordToMinecraftChatMessageFormat: '&9[Discord] &f%name% &7> &f%message%'

ViaVersion and Geyser

ViaVersion and Geyser let players connect to your server from different platforms and versions. ViaVersion supports different Java Edition versions, and Geyser supports Bedrock Edition players.

ViaVersion

Even if your server runs 1.21.4, it allows players on older versions such as 1.20.x and 1.19.x to connect:

# Installing ViaVersion
cd ~/server/plugins
wget https://hangar.papermc.io/ViaVersion/ViaVersion/releases/latest/download/ViaVersion.jar

# Companion add-ons
# ViaBackwards — connecting from older versions
# ViaRewind — 1.7/1.8 support

Geyser (Bedrock Support)

Geyser lets Bedrock Edition players (mobile, console, Windows 10) connect to your Java Edition server:

# Installing Geyser + Floodgate
cd ~/server/plugins
wget https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot -O Geyser-Spigot.jar
wget https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot -O Floodgate-Spigot.jar

Performance Plugins

These are the plugins used to monitor and optimise server performance. They either improve TPS directly or help you identify bottlenecks.

Spark

Spark is a lightweight performance tool that lets you profile your server's CPU and memory usage. It is indispensable for finding the cause of TPS drops:

# Start CPU profiling (30 seconds)
/spark profiler start
/spark profiler stop

# TPS and tick duration info
/spark tps

# Show memory usage
/spark health

Chunky

Chunky pre-generates world chunks, removing the chunk-generation lag that would otherwise happen during play:

# Pre-generation within a 5000-block radius
/chunky radius 5000
/chunky start

# Watch the progress
/chunky progress

# Stop
/chunky pause

ViewDistanceTweaks

ViewDistanceTweaks adjusts view distance dynamically based on server performance. When TPS drops, view distance falls; when TPS is high, it rises.

yaml
# ViewDistanceTweaks config.yml
enabled: true
target-tps: 19.5
min-view-distance: 4
max-view-distance: 10
adjustment-mode: proactive

Plugin Compatibility

Plugin compatibility problems are among the most common issues in server administration. A wrong version, an API conflict or a missing dependency can leave your server unable to start.

Version Checking

Every plugin is compatible with specific Minecraft and API versions. Before installing, check the Supported Versions section on the plugin page.

  • Check the supported MC versions on the plugin page
  • Verify Paper/Spigot/Bukkit compatibility
  • Check the api-version value in plugins/PluginName/plugin.yml
  • Old plugins may not work on newer MC versions

API Conflicts

Several plugins doing the same job can conflict:

  • Do not run two economy plugins at once (EssentialsX Eco + CMI Eco)
  • Do not run two permission plugins at once (LuckPerms + PermissionsEx)
  • Two chat formatting plugins can conflict
  • Plugins listening to the same event can produce unexpected behaviour

Dependency Problems

Some plugins depend on others. A missing dependency stops the plugin from loading:

PluginRequired DependencyRecommended Dependency
WorldGuardWorldEdit
EssentialsX ChatEssentialsXVault, LuckPerms
TABPlaceholderAPI
GeyserFloodgate
DeluxeChatVault, PlaceholderAPI

Plugin Security

Plugin security is critical to the integrity of your server. Malicious plugins can open a backdoor, steal player data or run a cryptominer.

Trusted Sources

  • Always download from official sources: SpigotMC, Modrinth, Hangar, GitHub Releases
  • Buy premium plugins: cracked/nulled plugins almost always carry malware
  • Check the download count and reviews: popular plugins are generally safer
  • Prefer open-source plugins: you can read the source code

Malware Risks

Common behaviours of malicious plugins:

  • Backdoor: grants OP to specific player names
  • Cryptominer: uses your server's CPU for crypto mining
  • Data stealer: sends player IP addresses and data to a third party
  • RAT (Remote Access Trojan): takes full control of your server
  • Botnet: uses your server in DDoS attacks

Permission Auditing

Audit the permissions your plugins ask for on a regular basis:

# List every permission granted through LuckPerms
/lp group default permission info
/lp group admin permission info

# Use verbose mode to watch which permissions are being checked
/lp verbose on

# Remove permissions you do not need
/lp group default permission unset unnecessary.permission

Next Steps

Once you have finished installing your plugins, take a look at the guides below to develop your server further: