What's New in Dalamud v14
Dalamud v14 is the current major version of Dalamud, and will release with Patch 7.4. This is a high-level overview of changes. You can see a code diff of all of these changes here.
Key Information
- Branch:
api14(view on GitHub) - Release Date: August 6, 2025
- API Level: 14
- .NET Version: .NET 10.0.0
.NET SDK 10.0.101 and Visual Studio 2026 or Rider 2025.3 are required to develop against this release. The 10.0.100 SDK is not recommended as it has problems restoring packages.
If you haven't done so yet, we strongly recommend migrating your plugin project to Dalamud.NET.Sdk.
It includes the latest version of DalamudPackager, pinned to the current API level, and will make it easier for us to introduce changes to how we distribute SDK files in the future.
Major Changes
Upgrade to .NET 10 / C# 14
Learn about the new features in .NET 10 and C# 14.
Namespace changes
All service interfaces are now in the Dalamud.Plugin.Services namespace.
| Old | New |
|---|---|
Dalamud.Game.ISigScanner | Dalamud.Plugin.Services.ISigScanner |
Dalamud.Game.ClientState.Objects.ITargetManager | Dalamud.Plugin.Services.ITargetManager |
Dalamud.Plugin.SelfTest.ISelfTestRegistry | Dalamud.Plugin.Services.ISelfTestRegistry |
New Bindings for ImAnim v1.0.0
ImAnim is an animation engine for ImGui that allows writing smooth UI animations with minimal code.
C# bindings are available via the new Dalamud.Bindings.ImAnim package, which
is automatically referenced when using the Dalamud.NET.Sdk.
Due to some planning changes, we had to push this addition back a few days. We'll make another post once it is available.
New Service: IPlayerState
The new
IPlayerState
service provides a partial wrapper around
PlayerState
from ClientStructs and additionally provides the CurrentWorld and HomeWorld
properties of type RowRef<World>.
The exposed data is available from login until logout and is not bound to the lifetime of the local player's GameObject.
New Service: IUnlockState
The new
IUnlockState
service provides functions to check the unlock status of various content and
collectibles.
It also provides an Unlock event, carrying the RowRef of the detected
unlocked entry.
For now, IUnlockState is marked as an experimental service, because it might
change based on feedback we receive. To make use of it, add
#pragma warning disable Dalamud001 to your source file, or add Dalamud001 to
NoWarnings in your .csproj.
Expand for a list of currently supported excel sheets
- ActionSheet
- AetherCurrent
- AetherCurrentCompFlgSet
- AozAction
- BannerBg
- BannerCondition
- BannerDecoration
- BannerFacial
- BannerFrame
- BannerTimeline
- BuddyAction
- BuddyEquip
- CSBonusContentType
- CharaMakeCustomize
- ChocoboTaxi
- Companion
- CraftAction
- EmjVoiceNpc
- Emote
- GeneralAction
- Glasses
- HowTo
- InstanceContentSheet
- Item
- MJILandmark
- MKDLore
- McGuffin
- Mount
- NotebookDivision
- Orchestrion
- Ornament
- Perform
- PublicContentSheet
- Recipe
- SecretRecipeBook
- Trait
- TripleTriadCard
New Service: IReliableFileStorage
The new
IReliableFileStorage
service provides functionality to read and write files from and to the local
filesystem in a reliable manner.
All reads and writes are backed by a secondary virtual filesystem, which can be used to automatically recover lost changes in case of power loss or malfunctioning hardware. As all data is duplicated, care must be taken to not write overly large files and a size limit is enforced.
Changes to existing services
IClientState
LocalPlayeris now obsolete, as it was moved toIObjectTable.LocalPlayer.
Before switching you should evaluate whetherIPlayerStatecontains the information you need.LocalContentIdis now obsolete, as it was moved toIPlayerState.ContentId.- Fixed
IsClientIdlealways returning false when the player is on the Free Trial.
IDalamudPluginInterface
- The service now inherits from
System.IServiceProvider.
IGameGui
- Added an
AgentUpdateevent. See AgentUpdateFlag for possible reasons why this event is fired.
IObjectTable
- Added
LocalPlayeras a shortcut for the first entry in the Object Table.
IUiBuilder
- Added a boolean
PluginUISoundEffectsEnabledto expose whether theEnable sound effects for plugin windowssetting is enabled.
SeStringRenderer
You can now render SeStrings directly to a texture, which can be used wherever
IDalamudTextureWrap can be used, by calling
ITextureProvider.CreateTextureFromSeString() like any of the other SeString
rendering functions.
When passing a draw list to SeString rendering functions through
SeStringDrawParams.TargetDrawList, care must now be taken to set
SeStringDrawParams.Font, SeStringDrawParams.FontSize and
SeStringDrawParams.ScreenOffset.
This has been done to accomodate rendering SeStrings outside an ImGui draw context, as accessing ImGui state there is not allowed.
Plugin Testing
- Testing plugins must now set
TestingDalamudApiLevelin their manifest. - Fixed a bug where testing plugins with a
DalamudApiLevelmore than two levels behind the current API did not appear in the Plugin Installer, even ifTestingDalamudApiLevelwas up to date.
Updated Font Awesome from 6.4.2 to 7.1.0
Expand for a list of added/removed icons
Added Icons
- AlarmClock
- BusSide
- ChartDiagram
- CommentNodes
- FileFragment
- FileHalfDashed
- Hexagon
- HexagonNodes
- HexagonNodesBolt
- MobileVibrate
- NonBinary
- Octagon
- Pentagon
- Septagon
- SingleQuoteLeft
- SingleQuoteRight
- Spiral
- SquareBinary
- TableCellsColumnLock
- TableCellsRowLock
- TableCellsRowUnlock
- ThumbtackSlash
- WebAwesome
Removed Icons
- InstagramSquare
- VectorSquare
Version Information
Version information for Dalamud should now be obtained via
IDalamudPluginInterface.GetDalamudVersion(), instead of the functions defined
in the Utils class, which have been removed.
Removed Dependencies
- Removed the
SharpDX.Direct3D11andSharpDX.Mathematicspackages, as SharpDX has been unmaintained since 2019. Please switch to TerraFX.Interop.Windows. - Removed the following unused dependencies:
- System.Collections.Immutable
- System.Drawing.Common
- System.Resources.Extensions
Minor Changes
- All Dalamud services now inherit from an interface marker
IDalamudService. - The following enumerable services now return
struct-based enumerators: AetheryteList, BuddyList, FateTable, PartyList, StatusList, ObjectTable - The following data-classes were converted to
readonly structs, as they are meant to be read within the same frame: AetheryteEntry, BuddyMember, Fate, PartyMember, Status Statusnow also has an interfaceIStatus.Fate.IsValidwas removed as it only checked for the local ContentId and wasn't related to Fates at all.- The
targets/folder was finally removed, as it was obsolete since API 12. If one of your old plugins used it, upgrade to Dalamud.NET.Sdk - learn more here: https://dalamud.dev/plugin-development/how-tos/v12-sdk-migration - Exception handling has been improved, and all .NET errors that would have previously led to a crash-to-desktop should now properly show the crash handler window.
- Windows that throw exceptions inside their
Draw()function will now stop rendering and show an error message to the user, instead of causing error spam.
IAddonLifecycle Rework
AddonLifecycle is the service that intercepts and relays various addon events to plugins, this service prior to this update operated by hooking virtual function invoke callsites in the native game code, this meant that we could be guaranteed to capture certain addon events like OnSetup and Finalize, but it made it impossible to get events like Show and Hide since those are invoked from several different locations in the native code.
This rework operates by replacing all addons virtual tables when they are initialized, and replaces each entry with a Dalamud-controlled dtor that will notify plugins that the events have occured, before calling back to the original virtual table function.
This rework has a couple minor side effects to watch out for:
- AddonLifecycle is no longer recursion safe, this means that if you have a OnRefesh listener, and call OnRefresh within your event listener it will end up recursively calling your listener. This behavior may have already been expected, however the old version of the service would not recurse in a case like this, so we are noting it here anyway.
- ReceiveEvent messages may be slightly different, the old version of this service would attempt to directly hook the ReceiveEvent listener for an addon during OnSetup, however dalamud was forced to do some filtering and management of how these hooks were created to filter certain events and to correctly hook the right listeners. With this rework events are much more accurately relayed, as each addons ReceiveEvent virtual table entry itself is being relayed, instead of the function that it would have called.
Additions:
- Added several new events: Open, Close, Show, Hide, Move*, MouseOver, MouseOut, Focus*
- Focus is only triggered in response to certain popup windows such as SelectYesno
- Move is only triggered when a move is completed, not during the drag process
Removals and renamings:
- Removed ICloneable from AddonArgs, and derived classes
- Removed AddonDrawArgs, AddonFinalizeArgs, AddonUpdateArgs, use AddonArgs instead
- Removed public AddonArgs constructor
- Renamed AddonReceiveEventArgs.Data to AtkEventData
SDK & Packages
We have released new packages of the SDK and DalamudPackager for this Dalamud API version.
- Dalamud.NET.Sdk v14.0.1
- To upgrade, change the header of your plugins'
.csprojfile:<Project Sdk="Dalamud.NET.Sdk/14.0.1">
- To upgrade, change the header of your plugins'
- DalamudPackager v14.0.1
- You don't need to reference DalamudPackager manually if you use Dalamud.NET.Sdk, it is done for you.
CSPROJ Manifest Properties
With version 14 of the SDK, it is now possible to specify manifest properties directly in your .csproj file. You no longer necessarily need a JSON manifest.
Expand for a list of possible properties
<PropertyGroup>
<Author>your name here</Author>
<Name>Sample Plugin</Name>
<InternalName>SamplePlugin</InternalName>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
<MinimumDalamudVersion>13.0.0</MinimumDalamudVersion>
<Punchline>A short one-liner that shows up in /xlplugins.</Punchline>
<Description>A description that shows up in /xlplugins. List any major slash-command(s).</Description>
<ApplicableVersion>2025.10.30.0000.0000</ApplicableVersion>
<RepoUrl>https://github.com/goatcorp/SamplePlugin</RepoUrl>
<Tags>sample;plugin;goats</Tags>
<CategoryTags>debug;test</CategoryTags>
<DalamudApiLevel>14</DalamudApiLevel>
<LoadRequiredState>1</LoadRequiredState>
<LoadSync>true</LoadSync>
<CanUnloadAsync>true</CanUnloadAsync>
<LoadPriority>1</LoadPriority>
<ImageUrls>https://raw.githubusercontent.com/goatcorp/DalamudPluginsD17/refs/heads/main/stable/SamplePlugin/images/image1.png;https://raw.githubusercontent.com/goatcorp/DalamudPluginsD17/refs/heads/main/stable/SamplePlugin/images/image2.png</ImageUrls>
<IconUrl>https://raw.githubusercontent.com/goatcorp/DalamudPluginsD17/refs/heads/main/stable/SamplePlugin/images/icon.png</IconUrl>
<Changelog>CHANGES!</Changelog>
<AcceptsFeedback>true</AcceptsFeedback>
<FeedbackMessage>Be nice.</FeedbackMessage>
</PropertyGroup>
Known Issues
Found conflicts between different versions of "WindowsBase"
Due to a new Dalamud dependency, building plugins against the NETCoreApp runtime - the default, using the SDK - results in this warning during plugin builds.
warning MSB3277: Found conflicts between different versions of "WindowsBase" that could not be resolved.
warning MSB3277: There was a conflict between "WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" and "WindowsBase, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35".
warning MSB3277: "WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" was chosen because it was primary and "WindowsBase, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" was not.
This warning can be safely ignored for now, while we work on a solution.
Contributors
We want to thank TODO.
FFXIVClientStructs Changes
FFXIVClientStructs will introduce their own breaking changes for Patch 7.4, which will be documented on their docs page.
We want to thank aers, Caraxi, Haselnussbomber, Pohky, WildWolf and the other FFXIVClientStructs contributors for their work.