Skip to main content

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 Version

.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.

Dalamud.NET.Sdk Migration

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.

OldNew
Dalamud.Game.ISigScannerDalamud.Plugin.Services.ISigScanner
Dalamud.Game.ClientState.Objects.ITargetManagerDalamud.Plugin.Services.ITargetManager
Dalamud.Plugin.SelfTest.ISelfTestRegistryDalamud.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.

note

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.

note

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

  • LocalPlayer is now obsolete, as it was moved to IObjectTable.LocalPlayer.
    Before switching you should evaluate whether IPlayerState contains the information you need.
  • LocalContentId is now obsolete, as it was moved to IPlayerState.ContentId.
  • Fixed IsClientIdle always returning false when the player is on the Free Trial.

IDalamudPluginInterface

IGameGui

  • Added an AgentUpdate event. See AgentUpdateFlag for possible reasons why this event is fired.

IObjectTable

  • Added LocalPlayer as a shortcut for the first entry in the Object Table.

IUiBuilder

  • Added a boolean PluginUISoundEffectsEnabled to expose whether the Enable sound effects for plugin windows setting 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 TestingDalamudApiLevel in their manifest.
  • Fixed a bug where testing plugins with a DalamudApiLevel more than two levels behind the current API did not appear in the Plugin Installer, even if TestingDalamudApiLevel was 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.Direct3D11 and SharpDX.Mathematics packages, 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
  • Status now also has an interface IStatus.
  • Fate.IsValid was 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.

warning

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' .csproj file: <Project Sdk="Dalamud.NET.Sdk/14.0.1">
  • 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.