# Dalamud v15.0.2.0 to v15.0.2.2 - Public Report

Checked: `2026-06-23`

This is a public-safe summary of the official Dalamud `15.0.2.0...15.0.2.2` and FFXIVClientStructs `5deef083...82f00f3` changes. It intentionally omits private project names, local paths, and private implementation details.

## Sources

- Dalamud compare: `https://github.com/goatcorp/Dalamud/compare/15.0.2.0...15.0.2.2`
- Dalamud split compare: `https://github.com/goatcorp/Dalamud/compare/15.0.2.1...15.0.2.2`
- FFXIVClientStructs compare: `https://github.com/aers/FFXIVClientStructs/compare/5deef083b822c65f17bb64bbc3993c938fe4b743...82f00f3f1a1aa77219eda75d4ddaa29e66008684`
- FFXIVClientStructs split compare: `https://github.com/aers/FFXIVClientStructs/compare/bad8d3f2f1c39c057f5739f9cc4fb0f3f55dfe84...82f00f3f1a1aa77219eda75d4ddaa29e66008684`
- Dalamud v15 page: `https://dalamud.dev/versions/v15/`
- Dalamud API reference: `https://dalamud.dev/api/`
- Dalamud SDK package index: `https://api.nuget.org/v3-flatcontainer/dalamud.net.sdk/index.json`
- Dalamud packager package index: `https://api.nuget.org/v3-flatcontainer/dalamudpackager/index.json`
- Referenced merged fixes: [#2843](https://github.com/goatcorp/Dalamud/pull/2843), [#2846](https://github.com/goatcorp/Dalamud/pull/2846), [#2847](https://github.com/goatcorp/Dalamud/pull/2847), [#2852](https://github.com/goatcorp/Dalamud/pull/2852), [#2853](https://github.com/goatcorp/Dalamud/pull/2853), [#2855](https://github.com/goatcorp/Dalamud/pull/2855), [#2839](https://github.com/goatcorp/Dalamud/pull/2839), [#2804](https://github.com/goatcorp/Dalamud/pull/2804), [#2858](https://github.com/goatcorp/Dalamud/pull/2858), [#2860](https://github.com/goatcorp/Dalamud/pull/2860), [#2863](https://github.com/goatcorp/Dalamud/pull/2863)

## Summary

The official runtime tag moved from `15.0.2.0` to `15.0.2.2`, with `15.0.2.1` as an intermediate runtime tag.

- Dalamud full range: 76 commits, 52 changed files.
- Dalamud `15.0.2.1...15.0.2.2`: 61 commits, 45 changed files.
- FFXIVClientStructs full range: 154 commits, 93 changed files.
- Public plugin SDK remains `Dalamud.NET.Sdk/15.0.0`.
- Public packager remains `DalamudPackager/15.0.0`.
- `master` is identical to `15.0.2.2`.

Plugin projects should not switch to a nonexistent `15.0.2.2` SDK. Keep:

```xml
<Project Sdk="Dalamud.NET.Sdk/15.0.0">
```

## Main Codebase Impacts

1. Commands can now be marked as not allowed inside macros.
2. CommandManager received thread-safety changes.
3. Hovered plugin windows can inhibit native addon collision by default through `IWindow.InhibitAtkCollision`.
4. The collision inhibition feature is disabled in Gamepad Mode.
5. Window focus and hover state is reset when a window is not drawn.
6. Windowed-mode screen and click coordinate behavior changed.
7. Internal lock usage changed broadly across lifecycle, hooks, IPC, textures, storage, profile, plugin manager, and timing code.
8. FFXIVClientStructs and Lumina.Excel moved, mainly affecting direct native/UI/graphics/object/agent/Excel users.

## Common Before > After Examples

### Commands blocked in macros

Before:

```csharp
commandManager.AddHandler("/example", new CommandInfo(OnCommand)
{
    HelpMessage = "Run the example command.",
});
```

After:

```csharp
commandManager.AddHandler("/example", new CommandInfo(OnCommand)
{
    HelpMessage = "Run the example command.",
    AllowedInMacros = false,
});
```

Use this only for commands that should not be macro-runnable. Default behavior remains `AllowedInMacros = true`.

### Overlay window collision

Before:

```csharp
public sealed class OverlayWindow : Window
{
    public OverlayWindow() : base("Overlay")
    {
    }
}
```

After:

```csharp
public sealed class OverlayWindow : Window
{
    public OverlayWindow() : base("Overlay")
    {
        InhibitAtkCollision = false;
    }
}
```

Use this for overlays that should not block native addon mouse interaction underneath them.

### Focus and hover state

Before:

```csharp
if (window.IsHovered)
    KeepTooltipOpen();
```

After:

```csharp
if (window.IsOpen && window.DrawConditions() && window.IsHovered)
    KeepTooltipOpen();
```

Do not treat hover/focus values as persistent state when a window is closed or not drawn.

### Command registration cleanup

Before:

```csharp
commandManager.AddHandler(CommandName, new CommandInfo(OnCommand));
```

After:

```csharp
private bool registered;

public void Enable()
{
    if (registered)
        return;

    commandManager.AddHandler(CommandName, new CommandInfo(OnCommand));
    registered = true;
}

public void Dispose()
{
    if (!registered)
        return;

    commandManager.RemoveHandler(CommandName);
    registered = false;
}
```

Thread-safe internals do not remove the need for plugin-owned idempotency.

## Retest Checklist

- Rebuild against `Dalamud.NET.Sdk/15.0.0`.
- Smoke command registration/removal on plugin reload.
- Smoke any command that should be macro-blocked.
- Smoke plugin windows over native addons with mouse and Gamepad Mode.
- Smoke world/screen conversion or click-position helpers in windowed mode.
- Smoke hook-heavy features around enable/disable/dispose.
- Smoke lifecycle listener-heavy features around repeated enable/disable/dispose.
- Smoke direct ClientStructs, object, UI, graphics, agent, and Excel/Lumina access.
- Smoke file picker/list UI only if the plugin uses FileDialog.

## Current Conclusion

This release is a runtime behavior and native-structure review update, not a new SDK package update. The highest-value work is command/macro policy review, window collision/focus smoke, hook/lifecycle/threading smoke, windowed-mode coordinate smoke, and rebuild/runtime checks for direct FFXIVClientStructs and Lumina.Excel users.
