Skip to main content

What's New in Dalamud v10

warning

Dalamud v10 is still under active development. This list is not yet exhaustive and will be appended as we get closer to the intended release date.

Dalamud v10 is the next major version of Dalamud, to be released together with Patch 7.0. This is a high-level overview of changes. You can see a code diff of all of these changes here.

Key Information

  • Branch: apiX (view on GitHub)
  • Release Date: Targeted to release alongside Patch 7.0 (estimated June 2024).
  • API Level: 10
  • .NET Version: .NET 8.0

New Features

  • New APIs have been added.
    • IConsole lets you add console variables and commands to the Dalamud console(/xllog). These are distinct to chat commands and offer various convenience features such as completion and support for types. No string parsing needed.
    • IMarketBoard lets you access market board data events that Dalamud already had implemented to provide Universalis with it's pricing data. This will allow users to subscribe to these events without having to hook those events themselves.

Major Changes

  • There has been refactoring in relation to what interfaces/classes Dalamud provides. Generally speaking Dalamud will now provide interfaces where possible. This should make it easier for plugins to unit test/mock as required.

    • The majority of public facing classes provided by dalamud services to plugins have been interfaced.
    • DalamudPluginInterface is now IDalamudPluginInterface, you must request a IDalamudPluginInterface in your plugin's constructor.
    • UiBuilder is now IUiBuilder
    • For a full list please see Class/Interface Changes
  • ITextureProvider has been reworked to be more performant and easier to use.

    • All of the functions inside now return a ISharedImmediateTexture, instead of a texture wrap. This represents an instance of a texture that may or may not be loaded yet. All textures are loaded asynchronously to avoid making the game hitch.
    • You don't need to maintain your own "texture cache" anymore. Caching IDalamudTextureWrap is now explicitly discouraged, as it sidesteps all of the asynchronous loading and performance optimizations in the new texture provider implementation. You should try to remove your caches and use ISharedImmediateTexture.GetWrapOrEmpty(), ISharedImmediateTexture.GetWrapOrDefault() or ISharedImmediateTexture.TryGetWrap(). The former GetWrapOrEmpty() function will return a transparent 4x4 texture if it hasn't loaded yet, allowing easy upgrades.
    • ISharedImmediateTexture.RentAsync() can be used to obtain a IDalamudTextureWrap that stays valid, but it's a legacy option and should only be used if you need to acquire a texture off the main thread, for example, inside a task. You should always prefer to use the other functions if you are planning to use the texture to render with ImGui.
    • Please refer to the updated documentation of ITextureProvider and ISharedImmediateTexture for more guidance.
  • ITextureReadbackProvider has been added to allow accessing raw RGBA data of textures as streams, or saving them to a file.

Minor Changes

  • Some IBattleChara properties were renamed.

    • In BattleChara, TotalCastTime was renamed to BaseCastTime.
    • In BattleChara, AdjustedTotalCastTime was renamed to TotalCastTime.
  • Dalamud.ClientLanguage was moved to Dalamud.Game.ClientLanguage.

    • The ToLumina() extension method was moved to Dalamud.Utility.
  • IDalamudPluginInstaller.OpenPluginInstaller() was removed. Please use OpenPluginInstallerTo() instead.

  • The type returned by IDalamudPluginInterface.InstalledPlugins has been changed to IExposedPlugin

    • Functions to open the main and config UIs have been added.
  • Some changes were made to unify texture wraps.

    • The public DalamudTextureWrap class has been removed. Please use IDalamudTextureWrap instead.
    • IDalamudTextureWrap has been moved out of an internal namespace into Dalamud.Interface.Textures.TextureWraps
  • ImRaii style functions will now throw if an invalid type is specified.

  • The RequiredVersion attribute for injected services has been removed. You don't need to replace it with anything.

Errata

These changes have been made after the official stabilization.

Contributors

We want to thank the following people for their contributions to Dalamud during this patch cycle:

FFXIVClientStructs Changes

These are relevant changes made to FFXIVClientStructs, listed here for reference. We want to thank aers, Pohky, WildWolf and the other FFXIVClientStructs contributors for their work.

Class/Interface Changes

  • DalamudPluginInterface -> IDalamudPluginInterface
  • UiBuilder -> IUiBuilder
  • AetheryteEntry -> IAetheryteEntry
  • AetheryteList -> IAetheryteList
  • BuddyMember -> IBuddyMember
  • BuddyList -> IBuddyList
  • GameObject -> IGameObject
  • PlayerCharacter -> IPlayerCharacter
  • BattleChara -> IBattleChara
  • BattleNpc -> IBattleNpc
  • Character -> ICharacter
  • Npc -> INpc
  • EventObj -> IEventObj
  • Fate -> IFate
  • PartyMember -> IPartyMember
  • CommandInfo -> IReadOnlyCommandInfo
  • MenuItem -> IMenuItem
  • MenuArgs -> IMenuArgs
  • MenuItemClickedArgs -> IMenuItemClickedArgs
  • MenuOpenedArgs -> IMenuOpenedArgs
  • DtrBarEntry -> IDtrBarEntry
  • PartyFinderListing -> IPartyFinderListing
  • PartyFinderListingEventArgs -> IPartyFinderListingEventArgs
  • TitleScreenMenuEntry -> ITitleScreenMenuEntry and IReadOnlyTitleScreenMenuEntry