Skip to main content

Overview

The plugin manifest is a JSON file that describes your plugin’s metadata, dependencies, and configuration. It’s used by:
  • The plugin installer to display information
  • Dalamud to determine compatibility and load order
  • The repository system to distribute updates
You create a minimal manifest file (e.g., MyPlugin.json), and DalamudPackager automatically generates the full manifest during build.

Minimal Manifest

For development, create a JSON file with your plugin’s name:
MyPlugin.json
{
  "Author": "Your Name",
  "Name": "My Plugin",
  "Punchline": "Short description of your plugin",
  "Description": "Longer description explaining what your plugin does and its key features.",
  "InternalName": "MyPlugin",
  "RepoUrl": "https://github.com/yourusername/MyPlugin"
}
The InternalName must match your assembly name and should never change once published.

Full Manifest Fields

Here are all available fields from IPluginManifest (Dalamud/Plugin/Internal/Types/Manifest/IPluginManifest.cs:8-127):

Required Fields

InternalName
string
required
The internal identifier for your plugin. Must match the assembly name and remain consistent across versions.
"InternalName": "MyPlugin"
Name
string
required
The display name shown in the plugin installer.
"Name": "My Awesome Plugin"
Author
string
required
The plugin author’s name or list of authors.
"Author": "John Doe"

Description Fields

Punchline
string
A short, one-line description of your plugin’s main purpose. Displayed prominently in the installer.
"Punchline": "Enhances your crafting experience"
Description
string
A longer, detailed description of your plugin’s functionality and features.
"Description": "This plugin provides advanced crafting tools including macro management, material tracking, and quality prediction."
Changelog
string
What’s new in this version. Shown when the plugin is updated.
"Changelog": "- Added new feature X\n- Fixed bug Y\n- Improved performance"

Categorization

Tags
string[]
List of tags for search and filtering in the plugin installer.
"Tags": ["ui", "crafting", "inventory", "utility"]
CategoryTags
string[]
Category tags defined on the plugin (used internally by the plugin repository).
"CategoryTags": ["jobs", "ui"]

Versioning

AssemblyVersion
Version
required
The version of your plugin. Automatically set by DalamudPackager from your assembly version.
"AssemblyVersion": "1.2.3.0"
Set in your .csproj:
<Version>1.2.3</Version>
TestingAssemblyVersion
Version
Version of the testing variant of your plugin. Users can opt into testing versions.
"TestingAssemblyVersion": "1.3.0.0"
DalamudApiLevel
int
default:"10"
The Dalamud API level your plugin targets. This ensures compatibility.Current API level: 10 (see PluginManifest.cs:85)
"DalamudApiLevel": 10
TestingDalamudApiLevel
int
The API level for the testing variant of your plugin.
"TestingDalamudApiLevel": 10
MinimumDalamudVersion
Version
Minimum Dalamud version required by your plugin.
"MinimumDalamudVersion": "9.0.0.0"

URLs and Media

RepoUrl
string
URL to your plugin’s source code repository or website.
"RepoUrl": "https://github.com/username/MyPlugin"
IconUrl
string
URL to an icon image for your plugin (shown in the installer).
"IconUrl": "https://example.com/icon.png"
ImageUrls
string[]
List of screenshot URLs to display in the plugin installer.
"ImageUrls": [
  "https://example.com/screenshot1.png",
  "https://example.com/screenshot2.png"
]

Behavioral Flags

CanUnloadAsync
bool
default:"false"
Whether your plugin can be safely unloaded outside the framework thread.Set to true if your plugin doesn’t interact with the game client directly.
"CanUnloadAsync": true
See PluginManifest.cs:141
SupportsProfiles
bool
default:"true"
Whether your plugin supports Dalamud’s profile system.
"SupportsProfiles": true
See PluginManifest.cs:145
IsTestingExclusive
bool
default:"false"
Whether this plugin is only available for testing (not for general release).
"IsTestingExclusive": false

Load Configuration

LoadRequiredState
int
default:"2"
The required Dalamud load step for this plugin. Controls when your plugin loads.Values (see PluginManifest.cs:118-125):
  • 0: During Framework.Tick when drawing facilities are available
  • 1: During Framework.Tick
  • 2: No requirement (default)
"LoadRequiredState": 0
LoadSync
bool
default:"false"
Whether Dalamud must load this plugin synchronously, not at the same time as other plugins.Set to true if your plugin has strict initialization requirements.
"LoadSync": false
See PluginManifest.cs:130
LoadPriority
int
default:"0"
Load priority for this plugin. Higher values mean higher priority.
"LoadPriority": 0
See PluginManifest.cs:137

Feedback and Distribution

FeedbackMessage
string
Message shown to users when they submit feedback about your plugin.
"FeedbackMessage": "Please report issues on GitHub!"
AcceptsFeedback
bool
default:"true"
Whether your plugin accepts user feedback through Dalamud.
"AcceptsFeedback": true
See PluginManifest.cs:156

Statistics (Read-Only)

These fields are populated by the plugin repository and are read-only:
DownloadCount
long
Total number of downloads for your plugin.See PluginManifest.cs:93
LastUpdate
long
Unix timestamp of the last update.See PluginManifest.cs:97

Advanced Fields

Dip17Channel
string
DIP17 channel name for alternative distribution channels.
"_Dip17Channel": "stable"
See PluginManifest.cs:163
ApplicableVersion
GameVersion
Game version this plugin is compatible with. Managed by the repository.See PluginManifest.cs:77
Download URL for initial installation (managed by repository).See PluginManifest.cs:103
Download URL for updates (managed by repository).See PluginManifest.cs:109
Download URL for testing versions (managed by repository).See PluginManifest.cs:115
IsHide
bool
Whether the plugin is hidden in the installer (managed by repository).See PluginManifest.cs:50

Example: Complete Manifest

Here’s a comprehensive example:
MyPlugin.json
{
  "Author": "Jane Developer",
  "Name": "Advanced Crafting Helper",
  "Punchline": "Your ultimate crafting companion",
  "Description": "This plugin enhances the crafting experience with advanced features including macro management, material tracking, optimal rotation suggestions, and quality prediction. Perfect for crafters of all levels.",
  "InternalName": "AdvancedCraftingHelper",
  "AssemblyVersion": "2.1.5",
  "TestingAssemblyVersion": "2.2.0",
  "RepoUrl": "https://github.com/janedeveloper/AdvancedCraftingHelper",
  "IconUrl": "https://example.com/icon.png",
  "ImageUrls": [
    "https://example.com/screenshot1.png",
    "https://example.com/screenshot2.png",
    "https://example.com/screenshot3.png"
  ],
  "Tags": ["crafting", "ui", "tools", "utility"],
  "CategoryTags": ["jobs", "ui"],
  "DalamudApiLevel": 10,
  "LoadRequiredState": 0,
  "LoadPriority": 0,
  "CanUnloadAsync": false,
  "SupportsProfiles": true,
  "Changelog": "Version 2.1.5:\n- Fixed macro execution bug\n- Added support for new recipes\n- Improved UI responsiveness\n- Updated for latest game patch",
  "FeedbackMessage": "Found a bug? Please report it on GitHub with details about your game version and steps to reproduce.",
  "AcceptsFeedback": true
}

DalamudPackager Integration

DalamudPackager reads your manifest and .csproj to generate the final manifest:
.csproj
<PropertyGroup>
  <Version>2.1.5</Version>
  <PackageProjectUrl>https://github.com/janedeveloper/AdvancedCraftingHelper</PackageProjectUrl>
  <DalamudPlugin>true</DalamudPlugin>
</PropertyGroup>

<ItemGroup>
  <Content Include="MyPlugin.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>

Testing Variants

You can offer a testing version with newer features:
  1. Set TestingAssemblyVersion higher than AssemblyVersion
  2. Set TestingDalamudApiLevel (if needed)
  3. Users can opt into testing in plugin settings
"AssemblyVersion": "2.1.5",
"TestingAssemblyVersion": "2.2.0-beta.1"
Check if running testing version:
if (pluginInterface.IsTesting)
{
    // Running testing version
}

Best Practices

Semantic Versioning

Use semantic versioning: MAJOR.MINOR.PATCH
  • MAJOR: Breaking changes
  • MINOR: New features
  • PATCH: Bug fixes

Detailed Descriptions

Write clear, detailed descriptions and changelogs. Users need to understand what your plugin does.

Consistent InternalName

Never change InternalName after release. It’s used to track updates and user installations.

Tag Appropriately

Use relevant tags to help users find your plugin. Check existing plugins for common tags.

Next Steps

Plugin Interface

Learn about the plugin interface and available services

Build docs developers (and LLMs) love