Skip to main content

What's New in Dalamud v12 (draft)

Dalamud v12 is the current major version of Dalamud, and will release with Patch 7.2. This is a high-level overview of changes. You can see a code diff of all of these changes here.

Key Information

  • Branch: api12 (view on GitHub)
  • Release Date: March 25, 2025
  • API Level: 12
  • .NET Version: .NET 9.0
Dalamud.NET.Sdk Migration

If you haven't done so yet, we strongly recommend migrating your plugin project to Dalamud.NET.Sdk, especially if you are still using a targets file to reference the Dalamud SDK. We no longer plan to support the targets file in the next API level.

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.

New Features

  • A new experimental ISeStringEvaluator service has been added. (by @Haselnussbomber)
    • This service allows you to evaluate encoded SeStrings from memory or various sheets as if they were being displayed by the game.
    • Various parameters are automatically injected from active game state, and can be supplemented through arguments.
    • The experimental flag will be removed in a future update during the 7.2 cycle.

Major Changes

  • Dalamud now uses .NET 9.
    • If you use Dalamud.NET.Sdk, your plugin will automatically use the new .NET version and API level upon upgrading to v12+.
    • If not, you will have to change your target framework to net9.0-windows.
    • You will have to install the .NET 9 SDK to build plugins targeting this Dalamud version.
  • The IObjectTable service and certain IClientState properties will now throw an InvalidOperationException on certain operations not performed in the main thread.
    • You may use functions in the IFramework service such as RunOnTick() and RunOnFrameworkThread() to easily schedule tasks to run on the main thread.
  • Corrupt state exceptions (e.g. AccessViolationException) will no longer be caught by the CLR.
    • This has been deprecated by Microsoft and is causing issues with the newer, faster exception handling mechanism introduced with .NET 9
  • Dalamud.NET.Sdk now references InteropGenerator.Runtime.dll from FFXIVClientStructs automatically to allow usage of newly introduced string helpers.
    • If you do not use the SDK, you need to reference this DLL manually to use FFXIVClientStructs types.

Minor Changes

  • Some Dalamud APIs that take textures have been normalized to take ISharedImmediateTexture instead of raw texture handles.
    • Icons for notifications are now set by assigning an ISharedImmediateTexture to INotification.IconTexture, instead of by calling SetTexture().
    • ITitleScreenMenu now takes an ISharedImmediateTexture in ITitleScreenMenu.AddEntry().
  • SummonerGauge and DarkKnightGauge had extra fields from ClientStructs added.
    • Certain properties in SummonerGauge were renamed.
  • All job gauge enum values have been converted from SNAKE_CASE to PascalCase to follow C# code standards.
  • The Easing#Value property has been deprecated. Devs should select either ValueClamped or ValueUnclamped depending on their use case.
  • PluginLoadReason is now a [Flags] enum. Use .HasFlag() to check its values.

Packages

We have released new packages of the SDK and DalamudPackager for this Dalamud API version.

Contributors

We want to thank Marzent, Critical-Impact, Aireil, Haselnussbomber, KirisameVanilla, kizer, zbee, nathanctech, AlexValliere, voidstar0, Cytraen, Blooym, Jaksuhn, wolfcomp, ItsBexy, nebel, WorkingRobot and Infiziert90 for their contributions during this patch cycle.

FFXIVClientStructs Changes

FFXIVClientStructs will introduce their own breaking changes for Patch 7.2, 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.