Files
Documentation/content/reference/manifest-schema.en.md
2026-01-20 20:33:59 +01:00

3.6 KiB

title, type, weight
title type weight
Manifest Schema docs 1

The manifest.json file defines your plugin's metadata and configuration.

Basic Structure

{
  "name": "MyPlugin",
  "version": "1.0.0",
  "main": "com.example.MyPlugin",
  "dependencies": []
}

Required Fields

name

Type: string

The unique identifier for your plugin. Used for logging and dependency resolution.

{
  "name": "MyAwesomePlugin"
}

version

Type: string

The plugin version following semantic versioning (recommended).

{
  "version": "1.0.0"
}

main

Type: string

The fully qualified class name of your main plugin class. This class must extend JavaPlugin.

{
  "main": "com.example.myplugin.MyPlugin"
}

Optional Fields

dependencies

Type: string[]

List of plugin names this plugin depends on. Dependent plugins will be loaded first.

{
  "dependencies": ["CoreLib", "DatabasePlugin"]
}

description

Type: string

A brief description of your plugin.

{
  "description": "Adds awesome features to the server"
}

author

Type: string

The plugin author or team name.

{
  "author": "YourName"
}

authors

Type: string[]

List of plugin authors for team projects.

{
  "authors": ["Developer1", "Developer2"]
}

website

Type: string

Plugin homepage or documentation URL.

{
  "website": "https://example.com/myplugin"
}

Complete Example

{
  "name": "EconomyPlugin",
  "version": "2.1.0",
  "main": "com.example.economy.EconomyPlugin",
  "description": "A comprehensive economy system for Hytale servers",
  "author": "GameDev",
  "authors": ["GameDev", "Contributor1"],
  "website": "https://github.com/example/economy",
  "dependencies": ["DatabaseLib"]
}

File Location

The manifest.json must be placed in the root of your plugin JAR file:

MyPlugin.jar
├── manifest.json
├── com/
│   └── example/
│       └── myplugin/
│           └── MyPlugin.class
└── resources/
    └── config.yml

Validation

{{< callout type="warning" >}} The server validates manifest.json on startup. Invalid manifests will prevent your plugin from loading.

Common issues:

  • Missing required fields (name, version, main)
  • Invalid JSON syntax
  • Main class not found in JAR
  • Circular dependencies {{< /callout >}}

Main Class Requirements

Your main class specified in main must:

  1. Extend JavaPlugin
  2. Have a public no-argument constructor
  3. Be accessible in the JAR classpath
package com.example.myplugin;

import com.hypixel.hytale.server.core.plugin.JavaPlugin;

public class MyPlugin extends JavaPlugin {
    @Override
    public void start() {
        // Plugin enabled - register events, commands, etc.
        getLogger().at(Level.INFO).log("Plugin started!");
    }

    @Override
    public void shutdown() {
        // Plugin disabled - cleanup resources
    }
}

Dependency Resolution

Dependencies are loaded in order:

  1. All dependencies must be present and valid
  2. Circular dependencies cause load failure
  3. Missing dependencies cause load failure
LoadOrder:
1. DatabaseLib (no dependencies)
2. CoreLib (depends on DatabaseLib)
3. MyPlugin (depends on CoreLib)

Version Compatibility

{{< callout type="info" >}} Consider versioning your plugin API if other plugins depend on you:

  • Major: Breaking changes
  • Minor: New features, backward compatible
  • Patch: Bug fixes {{< /callout >}}
{
  "name": "MyAPI",
  "version": "2.0.0"
}

Dependent plugins can then specify minimum versions in their documentation.