Plugin Manifest (manifest.json)
Plugin Manifest (manifest.json)
Section titled “Plugin Manifest (manifest.json)”Every Hytale plugin requires a manifest.json manifest file in its root directory. This file defines essential metadata about your plugin, including its identity, version, dependencies, and entry point.
Package Location
Section titled “Package Location”com.hypixel.hytale.common.plugin.PluginManifest
Location
Section titled “Location”The manifest file must be placed at the root of your plugin JAR:
Directorymy-plugin.jar
- manifest.json # Required manifest file
Directorycom/
Directoryexample/
Directorymyplugin/
- MyPlugin.class
Directoryassets/ # Optional asset pack
- …
Full Schema Reference
Section titled “Full Schema Reference”{ "Group": "com.example", "Name": "MyPlugin", "Version": "1.0.0", "Description": "A description of what this plugin does", "Authors": [ { "Name": "Your Name", "Email": "you@example.com", "Url": "https://yourwebsite.com" } ], "Website": "https://github.com/example/my-plugin", "Main": "com.example.myplugin.MyPlugin", "ServerVersion": "1.0.0", "Dependencies": { "Hytale:OtherPlugin": ">=1.0.0" }, "OptionalDependencies": { "Hytale:SomeOptional": "*" }, "LoadBefore": { "Hytale:LoadAfterMe": "*" }, "DisabledByDefault": false, "IncludesAssetPack": false, "SubPlugins": []}Field Reference
Section titled “Field Reference”Required Fields
Section titled “Required Fields”Type: string (required)
The unique name of your plugin. This is used as the plugin’s identifier in combination with the Group.
{ "Name": "MyAwesomePlugin"}Optional Fields
Section titled “Optional Fields”Type: string
The organization or group namespace for your plugin. Similar to Maven group IDs. If not specified, defaults may be inherited from a parent plugin.
{ "Group": "com.mycompany"}The full plugin identifier becomes Group:Name (e.g., com.mycompany:MyAwesomePlugin).
Version
Section titled “Version”Type: string (Semantic Versioning)
The version of your plugin following Semantic Versioning 2.0.0 format. This string is parsed into a Semver object internally.
{ "Version": "1.2.3"}Supported formats:
- Basic:
1.0.0 - With pre-release:
1.0.0-alpha.1 - With build metadata:
1.0.0+build.123 - Combined:
1.0.0-beta.2+build.456
Description
Section titled “Description”Type: string
A human-readable description of what your plugin does.
{ "Description": "Adds custom weather effects and seasonal changes to your server"}Authors
Section titled “Authors”Type: AuthorInfo[]
An array of author information objects.
{ "Authors": [ { "Name": "John Doe", "Email": "john@example.com", "Url": "https://johndoe.dev" }, { "Name": "Jane Smith" } ]}Each AuthorInfo object supports:
Name(string, optional): Author’s display nameEmail(string, optional): Author’s contact emailUrl(string, optional): Author’s website or profile URL
Website
Section titled “Website”Type: string
The official website or repository URL for your plugin.
{ "Website": "https://github.com/mycompany/my-plugin"}Type: string
The fully qualified class name of your plugin’s main class. This class must extend JavaPlugin.
{ "Main": "com.example.myplugin.MyPlugin"}ServerVersion
Section titled “ServerVersion”Type: string
Specifies which server version your plugin is compatible with. Since Update 3, this is validated as a plain string equality check rather than a semver range comparison.
{ "ServerVersion": "1.0.0"}Dependencies
Section titled “Dependencies”Type: Map<PluginIdentifier, SemverRange>
Plugins that must be loaded before this plugin. Keys are plugin identifiers in Group:Name format.
{ "Dependencies": { "Hytale:WeatherPlugin": ">=1.0.0", "com.example:CoreLib": "^2.0.0" }}OptionalDependencies
Section titled “OptionalDependencies”Type: Map<PluginIdentifier, SemverRange>
Plugins that enhance functionality if present but aren’t required.
{ "OptionalDependencies": { "Hytale:CraftingPlugin": "*" }}Your plugin loads regardless of whether optional dependencies are present. Use runtime checks to detect their availability.
LoadBefore
Section titled “LoadBefore”Type: Map<PluginIdentifier, SemverRange>
Specifies plugins that should load after this plugin. Useful for ensuring your plugin initializes first.
{ "LoadBefore": { "Hytale:SomeOtherPlugin": "*" }}DisabledByDefault
Section titled “DisabledByDefault”Type: boolean
If true, the plugin won’t be enabled automatically on server start. Administrators must manually enable it.
{ "DisabledByDefault": true}Default: false
IncludesAssetPack
Section titled “IncludesAssetPack”Type: boolean
Set to true if your plugin JAR includes an embedded asset pack. The asset pack will be automatically registered when the plugin starts.
{ "IncludesAssetPack": true}Default: false
SubPlugins
Section titled “SubPlugins”Type: PluginManifest[]
An array of nested plugin manifests. Sub-plugins inherit values from their parent manifest if not explicitly specified.
{ "SubPlugins": [ { "Name": "MySubFeature", "Main": "com.example.myplugin.subfeature.SubFeaturePlugin", "Description": "Optional sub-feature of MyPlugin" } ]}Sub-plugins automatically:
- Inherit
Groupif not specified - Inherit
Versionif not specified - Inherit
Descriptionif not specified - Inherit
Authorsif empty - Inherit
Websiteif not specified - Inherit
DisabledByDefaultif not alreadytrue - Add a dependency on the parent plugin
Minimal Example
Section titled “Minimal Example”The only field enforced by the manifest parser is Name, but Main is needed for the plugin to load a Java class:
{ "Name": "MinimalPlugin", "Main": "com.example.MinimalPlugin"}Complete Example
Section titled “Complete Example”A fully-featured manifest for a production plugin:
{ "Group": "com.hytalemodding", "Name": "EnhancedWeather", "Version": "2.1.0", "Description": "Adds realistic weather systems including storms, fog, and seasonal effects", "Authors": [ { "Name": "WeatherDev", "Email": "weather@hytalemodding.com", "Url": "https://hytalemodding.com/team/weatherdev" } ], "Website": "https://github.com/hytalemodding/enhanced-weather", "Main": "com.hytalemodding.weather.EnhancedWeatherPlugin", "ServerVersion": "1.0.0", "Dependencies": { "Hytale:WeatherPlugin": ">=1.0.0" }, "OptionalDependencies": { "Hytale:AmbiencePlugin": "*" }, "DisabledByDefault": false, "IncludesAssetPack": true}Related
Section titled “Related”- Plugin Lifecycle - Understanding plugin states and lifecycle methods
- JavaPlugin Class - The main plugin base class
- First Plugin Tutorial - Create your first plugin step by step