# Dalamud 15.0.3.5 Stable for Patch 7.56h - September 17, 2026

Channel recheck: **September 17, 2026, 14:10:33 CDT / 19:10:33 UTC** (America/Chicago). This same-day Stable revision retains the existing report URL and earlier observations. Official channel, tag, dependency, package and PR state were rechecked at this observation.

**Dalamud 15.0.3.5 is now verified on both Stable/Release and STG/Beta for game `2026.09.15.0000.0000`, with applicability true.** The `15.0.3.5` tag, master and STG distribution still agree on `e81744f6aea94bb6781affdd0d0b9319592f95d9`. Plugin API remains **15**, and public SDK and packager remain **15.0.0**.

The official `15.0.3.4 -> 15.0.3.5` range contains **11 commits and 7 changed files**. Compared with the earlier source reviewed today, the only additional commit changes `DalamudVersion` to `15.0.3.5`; the ClientStructs pin and plugin-facing changes were already included in that earlier review. The latest evidence establishes applicable Stable delivery without another source change, while installation, loaded-runtime identity and live plugin behavior still require separate verification.

The label "7.56h" describes the reported game hotfix context. The runtime tag is `15.0.3.5`; ClientStructs history includes the September 17 commit titled `7.56 hotfix2`, and its assembly version metadata uses `7.56.2`.

## Release, source and delivery state

| Surface | Observed value | Meaning |
| --- | --- | --- |
| Latest runtime tag | `15.0.3.5` at `e81744f6aea94bb6781affdd0d0b9319592f95d9` | Newly verified tagged endpoint; 11 commits / 7 files beyond `15.0.3.4`. |
| Dalamud master | `e81744f6aea94bb6781affdd0d0b9319592f95d9` | Same source endpoint as the new tag. |
| STG distribution metadata | `15.0.3.5`, revision `7513`, at `e81744f6aea94bb6781affdd0d0b9319592f95d9` | Matches the inspected tag and master. |
| Release launcher endpoint | `track: release`, `assemblyVersion: 15.0.3.5`, supported game `2026.09.15.0000.0000`, applicability `true` | Stable hotfix delivery is confirmed. |
| STG launcher endpoint | `track: stg`, `assemblyVersion: 15.0.3.5`, supported game `2026.09.15.0000.0000`, applicability `true` | Applicable Beta delivery is confirmed by the launcher response. |
| Formal GitHub Releases page | Latest entry `14.0.4.0` | Separate from runtime tags and launcher distribution. |
| Public build packages | `Dalamud.NET.Sdk/15.0.0`, `DalamudPackager/15.0.0` | No package-version migration identified. |

Both returned tracks now corroborate the .3.5 distribution and September 15 game contract. Stable promotion is verified; successful injection and the runtime loaded by a particular client remain separate checks.

## Earlier observation and same-day revision

At **10:08:50 CDT (15:08:50 UTC)**, the latest runtime tag was still `15.0.3.4`, master/STG metadata identified `15.0.3.4-10-g25248de5d` at revision `7512`, and both requested launcher tracks returned the inapplicable Release response. Applicable delivery was therefore unconfirmed at that earlier time. At 11:04:20 CDT, STG/Beta served applicable .3.5 while Stable still served inapplicable .3.4. At 14:10:33 CDT, both served applicable .3.5. These successive observations are preserved as history; Stable promotion adds no new code beyond the previously reviewed .3.5 endpoint.

## Release announcement reconciliation

Both named feature PRs, [#2961](https://github.com/goatcorp/Dalamud/pull/2961) and [#2958](https://github.com/goatcorp/Dalamud/pull/2958), were authored by Haselnussbomber, merged, and are included in the tagged comparison. The notice's “2 PRs from 1 contributor” describes those two feature bullets, not every commit or dependency PR: the full range also contains ClientStructs update PRs #2960 and #2967, direct commits, merge commits and the version bump (11 commits / 7 files). The announced ClientStructs pin matches the tag; its old-to-new range contains 42 commits / 32 files.

## Exact comparison boundaries

| Comparison | Old commit | New commit | Included change |
| --- | --- | --- | --- |
| Dalamud `15.0.3.4 -> 15.0.3.5` | `cc568d5616baeb3c32e13acecd9171881a122501` | `e81744f6aea94bb6781affdd0d0b9319592f95d9` | 11 commits / 7 files. |
| Earlier same-day source -> new tag | `25248de5d5aefdf36b7b09725571ec7a70ff6ddf` | `e81744f6aea94bb6781affdd0d0b9319592f95d9` | 1 commit / 1 file: version metadata only. |
| ClientStructs at `15.0.3.4` -> `15.0.3.5` pin | `694dbbf6c0bda544d18a8e2a7431e799c3662c16` | `b53cdf38b532a2ffdb711f13d9501db046bf7d0d` | 42 commits / 32 files; the new pin is unchanged from the earlier same-day review. |
| ClientStructs movement in today's Dalamud PR #2967 | `5ff8edea4626f410660c31ed94cd8515eae3e2d6` | `b53cdf38b532a2ffdb711f13d9501db046bf7d0d` | 26 commits / 25 files; includes earlier work, not 26 commits authored today. |
| Lumina.Excel | `2b2854671facac83f02fdec1f355986f2edaeb3f` | `2b2854671facac83f02fdec1f355986f2edaeb3f` | Unchanged. |

The seven framework entries are `Dalamud.csproj`, the ClientStructs submodule, `UnlockState.cs`, `IUnlockState.cs`, and three internal self-test files. The framework changes add XBMPet unlock support and sheet-hash diagnostics, together with self-test organization changes. They do not establish a Lumina schema migration or API 16 adoption. Today's [PR #2967](https://github.com/goatcorp/Dalamud/pull/2967) merged at `2026-09-17T14:18:35Z`; the full range also contains [PR #2960](https://github.com/goatcorp/Dalamud/pull/2960), [PR #2958](https://github.com/goatcorp/Dalamud/pull/2958), and [PR #2961](https://github.com/goatcorp/Dalamud/pull/2961).

## Plugin-facing changes included in 15.0.3.5 Beta

These changes are included in the verified `15.0.3.5` tag and its adopted ClientStructs pin. They remain outside the `15.0.3.4` Stable endpoint. Verify the actual loaded runtime before relying on them in a client.

| Surface | Source change | Plugin author action |
| --- | --- | --- |
| `Utf8String.Ctor` | Native constructor signature corrected. | Keep the generated constructor call where appropriate, ensure the loaded ClientStructs contains the correction, and test native string creation/disposal. Reading an existing native string is a different path. |
| Packet, sharing and gearset functions | Signatures corrected in `PacketDispatcher`, `TofuHelper`, and `RaptureGearsetModule`. | Audit direct calls, copied signatures and detours on the changed functions; verify resolution against the matching game. |
| `AtkComponentIcon.SetIndicatorVisuals` | Parameter changes from `byte` to `ushort`; the old byte overload is error-obsolete. | Migrate affected callers to the verified ushort form and check indicator behavior. Do not treat an unchanged byte overload call as compatible. |
| `AtkComponentIcon` state flags | `IsIconLoading`, `IsBeingDragged`, and `IsDisabled` move from bits 9/10/12 to 10/11/13. | Inspect the compiled consumers of these enum constants, including bundled UI libraries. Updating ClientStructs alone does not replace constants already compiled into another assembly. |
| `AtkComponentDragDrop` | Adds `SetIconEnabled`; the old `SetIconDisableState` remains warning-obsolete with corrected enabled polarity. | Where the old method is used, verify the intended boolean meaning before migrating. Unrelated icon helpers do not establish an affected call. |
| `PlayerState` free-aetheryte fields | Adds `FreeAetheryteIds`; existing individual fields remain warning-obsolete aliases at their existing offsets. | Alias removal is not required by this snapshot. Resolve the array-bound discrepancy described below before adopting the NSO index suggestion. |
| Input data and devices | Existing data structs move into separate files without renaming their types; device interfaces gain methods and retain obsolete `Poll`. | Do not infer a removed-type migration from file movement. Independently verify custom input hooks and device assumptions. |
| `CharacterUtility` / `UIModuleHelpers` | Corrects two constant-buffer offsets; expands the helper array from 7 to 10 entries and its enclosing size. | Audit direct field, array and manual-layout consumers. |
| XBM definitions / `DetailKind` / `IUnlockState` | Adds pet/addon definitions and pet unlock support; `Unk62` becomes `XBMPet`. | Update actual callers of the renamed enum member. Treat new pet support as an optional feature for consumers that do not already use it. |
| Internal self-tests | Adds sheet-hash checking and reorganizes self-test registration. | Useful diagnostics; no general plugin source migration follows from these internal changes alone. |

The inspected `PlayerState` source declares `FixedSizeArray2<ushort>` for the new free-aetheryte array, while the obsolete `FreeAetheryteNSO` message recommends `FreeAetheryteIds[2]`. Index 2 is outside a two-element array. Do not mechanically follow that suggestion. The existing field remains a warning-only alias at the same offset in this snapshot; verify an upstream correction and the actual generated array contract before changing an NSO reader.

## Native contracts need complete revalidation

The official old and new native maps identify different game versions and moved function entry points and vtables. The new map identifies game `2026.09.15.0000.0000`, while the old map identifies `2026.09.01.0000.0000`. A plugin that embeds old addresses, executable identity checks, function-byte proofs or copied native bindings may require source/data updates even when its managed API calls still compile.

Use the complete native maps as well as the C# diff. GitHub's comparison omitted the large native-map patch during this review; an omitted patch does not mean that file is unchanged. Correlate symbols by their full class/function identity, then validate the resolved functions against the actual target executable. A numeric coincidence in source can be an ordinary color or flag value rather than a native address.

Updating a matched address is only one part of a native port. Revalidate executable identity, function boundaries, vtable ownership and slots, instruction bytes, interior addresses, lengths, calling conventions, and any generated signature inputs together. Retain existing unsupported-build and ownership guards. Keep affected features unavailable when those checks fail; do not remove a guard to make a new game build appear supported.

This review establishes source and metadata changes. It does not supply verified replacement executable hashes, complete function-body proofs, or live-client compatibility results. The hotfix executable was not available for that validation. Do not treat an official symbol-map candidate as a completed native binding.

## Open proposals and API 16 work

ClientStructs upstream subsequently advanced from the adopted `b53cdf38b532a2ffdb711f13d9501db046bf7d0d` pin to `aba627b1ec9ba6302c6ac1199757a01c4b4d11fe` through one commit changing only `ida/ffxiv_structimporter.py`. That Ghidra importer change is not adopted by `15.0.3.5` and introduces no additional runtime binding change in the reviewed range. [Inspect the exact upstream-only comparison](https://github.com/aers/FFXIVClientStructs/compare/b53cdf38b532a2ffdb711f13d9501db046bf7d0d...aba627b1ec9ba6302c6ac1199757a01c4b4d11fe).

At the 14:10 CDT PR recheck on September 17, the GameObject main-thread proposal [#2962](https://github.com/goatcorp/Dalamud/pull/2962), Framework Fixes [#2910](https://github.com/goatcorp/Dalamud/pull/2910), and Excel schema update [#2914](https://github.com/goatcorp/Dalamud/pull/2914) were open. They are watch items, not changes included in this API 15 source snapshot.

Service cleanup [#2945](https://github.com/goatcorp/Dalamud/pull/2945) and `Dalamud.Common.ClientLanguage` adoption [#2965](https://github.com/goatcorp/Dalamud/pull/2965) had merged to the API 16 branch only. Lifecycle disposal [#2946](https://github.com/goatcorp/Dalamud/pull/2946), SeString removal [#2948](https://github.com/goatcorp/Dalamud/pull/2948), and removal of the AsmHook string-array constructor [#2968](https://github.com/goatcorp/Dalamud/pull/2968) remained API 16 proposals. None establishes a current API 15 migration requirement.

Additional open-PR recheck at 14:17:49-14:17:51 CDT: [ClientStructs update #2969](https://github.com/goatcorp/Dalamud/pull/2969) proposes the already noted upstream-only importer commit `aba627b1ec9ba6302c6ac1199757a01c4b4d11fe`; it is not merged or adopted by .3.5. [Extended virtual-key support #2947](https://github.com/goatcorp/Dalamud/pull/2947) and [Excel schema update #2914](https://github.com/goatcorp/Dalamud/pull/2914) also remain open with refreshed branch heads. Their proposed changes are watch items only; the tagged runtime, adopted ClientStructs and Lumina.Excel pins are unchanged.

## Validation sequence for plugin authors

1. Record the actual game version, returned launcher track, applicability, loaded Dalamud commit and loaded ClientStructs version. A folder name or requested channel alone is insufficient.
2. Keep API 15 and SDK/packager `15.0.0` unless separate official package/API evidence changes that requirement.
3. Audit actual overlap with the changed ClientStructs members and native maps, including copied signatures, manual offsets and bundled libraries that compile enum constants.
4. Re-prove custom native bindings on the matching executable before enabling them. Keep unsupported-build guards intact and report incomplete bindings as pending.
5. Compile permitted affected consumers against the matching dependencies, then inspect compiled constants where relevant. Record compilation separately from runtime acceptance.
6. Exercise native string construction/disposal, changed icon states, affected native calls and the feature behavior behind each custom hook. Use a harmless canary before broader feature testing.
7. Test load, disable/re-enable, reload, logout/login and unload for the affected plugin. Record the exact tested runtime/game pair and leave untested paths pending.

No plugin implementation, compilation, installation or live-client testing was performed for this source review. Its verified result is the source/dependency delta and applicable Stable and STG/Beta delivery at the stated observation time; native executable proof and live-client compatibility remain pending.

## Official sources

- [Prior runtime tag](https://github.com/goatcorp/Dalamud/tree/15.0.3.4), [new 15.0.3.5 tag](https://github.com/goatcorp/Dalamud/tree/15.0.3.5), [full tag-to-tag comparison](https://github.com/goatcorp/Dalamud/compare/cc568d5616baeb3c32e13acecd9171881a122501...e81744f6aea94bb6781affdd0d0b9319592f95d9), and [same-day version-only increment](https://github.com/goatcorp/Dalamud/compare/25248de5d5aefdf36b7b09725571ec7a70ff6ddf...e81744f6aea94bb6781affdd0d0b9319592f95d9).
- [Full ClientStructs comparison](https://github.com/aers/FFXIVClientStructs/compare/694dbbf6c0bda544d18a8e2a7431e799c3662c16...b53cdf38b532a2ffdb711f13d9501db046bf7d0d) and [today's adopted pin range](https://github.com/aers/FFXIVClientStructs/compare/5ff8edea4626f410660c31ed94cd8515eae3e2d6...b53cdf38b532a2ffdb711f13d9501db046bf7d0d).
- [September 17 `7.56 hotfix2` commit](https://github.com/aers/FFXIVClientStructs/commit/71b9dabc8a0b44b2702d63835d8cb56831313781).
- [Old official native map](https://github.com/aers/FFXIVClientStructs/blob/694dbbf6c0bda544d18a8e2a7431e799c3662c16/ida/data.yml) and [new official native map](https://github.com/aers/FFXIVClientStructs/blob/b53cdf38b532a2ffdb711f13d9501db046bf7d0d/ida/data.yml).
- [Corrected Utf8String source](https://github.com/aers/FFXIVClientStructs/blob/b53cdf38b532a2ffdb711f13d9501db046bf7d0d/FFXIVClientStructs/FFXIV/Client/System/String/Utf8String.cs), [icon source](https://github.com/aers/FFXIVClientStructs/blob/b53cdf38b532a2ffdb711f13d9501db046bf7d0d/FFXIVClientStructs/FFXIV/Component/GUI/AtkComponentIcon.cs), and [PlayerState source](https://github.com/aers/FFXIVClientStructs/blob/b53cdf38b532a2ffdb711f13d9501db046bf7d0d/FFXIVClientStructs/FFXIV/Client/Game/UI/PlayerState.cs).
- [STG distribution metadata](https://raw.githubusercontent.com/goatcorp/dalamud-distrib/main/stg/version), [Release launcher endpoint](https://kamori.goats.dev/Dalamud/Release/VersionInfo?track=release), [STG launcher endpoint](https://kamori.goats.dev/Dalamud/Release/VersionInfo?track=stg), and [declarative configuration](https://github.com/goatcorp/dalamud-declarative/blob/main/config.yaml). These links are mutable; the table above preserves the observed responses.
- [SDK package index](https://api.nuget.org/v3-flatcontainer/dalamud.net.sdk/index.json), [packager package index](https://api.nuget.org/v3-flatcontainer/dalamudpackager/index.json), [formal GitHub Releases](https://github.com/goatcorp/Dalamud/releases), and [Dalamud version guidance](https://dalamud.dev/versions/).
