Skip to main content
The paper-plugin.yml file is the plugin descriptor for Paper plugins. It must be located in your plugin’s src/main/resources directory and contains metadata about your plugin.
Paper supports both paper-plugin.yml (modern format) and plugin.yml (legacy Bukkit format). The paper-plugin.yml format is recommended for new plugins.

Required Fields

These fields must be present in every paper-plugin.yml file:

name

The unique identifier for your plugin. Used for dependency resolution and the data folder name.
Constraints:
  • Only alphanumeric characters, underscores, hyphens, and periods: [a-zA-Z0-9_\-\.]
  • Must be unique across all loaded plugins

version

The version of your plugin. No specific format is enforced, but semantic versioning is recommended.

main

The fully qualified class name of your main plugin class. Must extend org.bukkit.plugin.java.JavaPlugin.

Optional Fields

api-version

The Minecraft API version your plugin is built for (e.g., 1.21, 1.20). This helps maintain compatibility.
Always specify the api-version to ensure your plugin works correctly across different Paper versions.

description

A human-friendly description of what your plugin does.

author / authors

The author(s) of the plugin. Use author for a single author or authors for multiple.

contributors

People who contributed to the plugin but are not primary authors.

website

A website URL for the plugin or author.

prefix

Custom prefix for the plugin’s logger. By default, the plugin name is used.

Dependency Management

load

Specifies when the plugin should be loaded during server startup.
Valid values (from org.bukkit.plugin.PluginLoadOrder):
  • STARTUP - Load during server startup (before worlds)
  • POSTWORLD - Load after worlds are loaded (default)

dependencies

Plugins that must be loaded before this plugin. The server will fail to load your plugin if these are missing.
If any listed dependencies are not installed, your plugin will fail to load.

softdepends

Plugins that should load before this plugin if they’re present, but aren’t required.

loadbefore

Plugins that should load after this plugin, without being dependencies.

provides

Other plugin names that this plugin provides/implements.

Advanced Features

bootstrapper

A class implementing io.papermc.paper.plugin.bootstrap.PluginBootstrap for early initialization.
The bootstrapper runs before the main plugin class and allows initialization before the server fully loads.
Bootstrappers are experimental. Only use API methods documented to work during bootstrap.

loader

A class implementing io.papermc.paper.plugin.loader.PluginLoader for configuring the plugin’s classpath.
Useful for loading external libraries at runtime.

Permissions

defaultPerm

The default permission level for all permissions defined in this plugin.
Valid values (from org.bukkit.permissions.PermissionDefault):
  • TRUE - Everyone has permission by default
  • FALSE - No one has permission by default
  • OP - Only operators have permission (default)
  • NOT_OP - Only non-operators have permission

permissions

Define permissions for your plugin.

Complete Example

Here’s a complete example from the Paper test plugin:

Migration from plugin.yml

If you’re migrating from the legacy plugin.yml format:
  1. Rename plugin.yml to paper-plugin.yml
  2. Update dependency format from flat lists to the new structured format:
  3. Commands are no longer supported in YAML - use the JavaPlugin.registerCommand() method instead
Paper plugins do not support YAML-based command declarations. You must register commands programmatically using JavaPlugin.registerCommand().