Release v4.4.0 (2026-09-04)
Wrath of the Lich King Classic
This is the first release with WotLK Classic (3.4.3) support. You can now play on a 3.3.5a server — TrinityCore, AzerothCore or CMaNGOS — using a retail 3.4.3 client.
It is the largest release the project has had: 348 commits, 183 of them fixes, developed over roughly four months on feature/wotlk-classic-v3.4.3 and merged in #238.
Getting started
Set ClientOptions:ClientBuild to V3_4_3_54261 and point LegacyServerOptions at your 3.3.5a realmd. Launch the client through Arctium with --staticseed --version=Classic. Full instructions are in the README.
V3_4_3_54261 is the only supported 3.4.3 build.
What works
The full status matrix, copied verbatim from wotlk.md. Nothing is summarised away: ✅ verified,
TrinityCore is the primary test backend and AzerothCore the secondary, so a row that is ✅ only under AzerothCore means exactly that — it has not been exercised on TrinityCore, not that it is known to fail there.
| Subsystem | TC 3.3.5a | cMangos 3.3.5a | AzerothCore 3.3.5a |
|---|---|---|---|
| Auth + char-select | ✅ | ✅ | ✅ |
| World-enter + walk + camera | ✅ | ✅ | ✅ |
| New-char first login (post-cinematic movement) | ✅ | ❓ | ✅ |
| Player render (incl. equipped items) | ✅ | ✅ | ✅ |
| Combat — auto-attack | ✅ | ✅ | ✅ |
| Player Armor + magical resistances | ✅ | ❓ | ✅ |
| Combat — special abilities | ✅ | ❌ | ✅ |
| Channel spells (cast bar / kneel anim / ESC unblock) | ✅ | ❓ | ✅ |
| Channel spells (loop animation) | ✅ | ❓ | ✅ |
| Spell-failure error text (e.g. NotShapeshift) | ✅ | ❓ | ✅ |
| Flying projectiles (arrows / fireball / missiles) | ✅ | ✅ | ✅ |
| Death Knight character create | ✅ | ❓ | ✅ |
| Death Knight runes + runic power | ✅ | ❓ | ✅ |
| Death Knight starter quest chain (full) | ✅ | ❓ | ✅ |
| Battle Shout / self-aura | ✅ | ✅ | ✅ |
| Shapeshift / form cancel (Bear Form verified) | ✅ | ❓ | ✅ |
| Action bar — main bar populated on login | ✅ | ✅ | ✅ |
| Action bar — drag spell / macro / item to any bar (incl. Bar 4) | ✅ | ❓ | ✅ |
| Action bar — Always Show Action Bars checkbox persistence | ✅ | ✅ | ✅ |
| Action bar — Bar 2 / 3 / 4 / 5 visibility checkbox persistence | ✅ | ❓ | ✅ |
Sporadic V3_4_3 client CMSG_LOG_DISCONNECT(reason=7) under load |
❌ | ❓ | ❓ |
| Inventory equip / unequip / drag-drop | ✅ | ✅ | ✅ |
| Gem socketing — apply gem, socket bonus, prismatic slot | ❓ | ❓ | ✅ |
| Inventory — "on use" items | ✅ | ❌ | ✅ |
| Vendor — buy | ✅ | ✅ | ✅ |
| Vendor — sell | ✅ | ❌ | ✅ |
| Professions — secondary train + skinning use | ✅ | ❓ | ✅ |
| Looting (items + money) | ✅ | ❓ | ✅ |
| Group loot — Need / Greed / Pass + roll numbers | ❓ | ❓ | ✅ |
| Quest log + tracker | ✅ | ✅ | |
| Quest pickup + completion | ✅ | ✅ | ✅ |
| Quest map markers (mini-map + world-map dots) | ✅ | ✅ | ✅ |
| Quest area highlight on world map (POI blob mesh) | ✅ | ❓ | ✅ |
| Gossip POI direction marker (guard "where is the trainer") | ✅ | ❓ | ✅ |
| Hotfix data | ✅ | ✅ | ✅ |
| Static GameObjects | ✅ | ✅ | ✅ |
| Quest-objective GameObject interaction | ✅ | ❓ | ✅ |
| Spell-click NPCs ("right-click to ride") | ✅ | ❓ | ✅ |
| Vehicles — mount + dismount + seat-change + action button | ✅ | ❓ | ✅ |
| Trajectory casts (cannons / arc projectiles) | ✅ | ❓ | ✅ |
| Active-mover handover (vehicle / charm / Eye of Acherus) | ✅ | ❓ | ✅ |
| Flightmaster — discover node + open Taxi window + fly route | ✅ | ❓ | ✅ |
| Auras / aura ticks | ✅ | ✅ | ✅ |
| Spellbook (incl. trainer learning) | ✅ | ✅ | ✅ |
| Pet — summon, portrait, attack/follow/stay | ✅ | ❓ | ✅ |
| Pet — spellbook + action bar | ❓ | ✅ | |
| Pet — character-sheet stats | ✅ | ❓ | ✅ |
| Pet — spellbook "Pet" tab in player UI | ❌ | ❓ | ✅ |
| Talent panel — unspent talent point counter + tree population | ✅ | ✅ | ✅ |
| Talent panel — dual-spec switch | ✅ | ✅ | ✅ |
| Pet talents | ✅ | ❓ | ✅ |
| Glyphs — display + slot unlock | ✅ | ❓ | ✅ |
| Glyphs — slot unlock at L15/30/50/70/80 mid-session | ✅ | ❓ | ✅ |
| Glyphs — apply (CMSG_USE_ITEM) | ✅ | ❓ | ✅ |
| Glyphs — remove (CMSG_REMOVE_GLYPH) | ✅ | ❓ | ✅ |
| Glyphs — dual-spec swap UnitData refresh | ✅ | ❓ | ✅ |
Chat (/say, /emote) |
✅ | ✅ | ✅ |
| Party / raid (form, convert) | ✅ | ✅ | ✅ |
| Party chat / raid chat / raid warning | ✅ | ✅ | ✅ |
| Raid promote-to-assistant (single + "Everyone is assistant") | ✅ | ❓ | ✅ |
| Raid kick (single member) | ❓ | ❌ | ✅ |
| Trade (between players) | ✅ | ✅ | ✅ |
| Char-list — auto-select newly created character | ✅ | ❓ | ✅ |
| Mail — open + inbox + take attachments + COD pay + delete | ✅ | ❓ | ✅ |
| Achievement panel — earned + criteria progress | ✅ | ❓ | ✅ |
| Account heirloom panel — collection listing | ✅ | ❓ | ✅ |
| Toy Box — learn from bags + use from journal | ❓ | ❓ | ✅ |
Spellbook fresh-login animations (InitialLogin flag) |
✅ | ✅ | ✅ |
| Pet spellbook tab + chat spam on login | ✅ | ✅ | ✅ |
| Flat / Pct spell modifier array shape | ✅ | ||
| repair | ✅ | ❓ | ✅ |
| Spirit healer — resurrect with sickness (gossip) | ✅ | ❓ | ✅ |
| Innkeeper — make this inn your home | ❓ | ❓ | ✅ |
| Battlegrounds — list, queue, port, scoreboard | ✅ | ❓ | ✅ |
| Wintergrasp — join, capture, vehicles | ❓ | ❓ | ✅ |
| Who / friends / ignore | ❓ | ❓ | ✅ |
| Arena — skirmish queue + enter (2v2 / 3v3 / 5v5) | ✅ | ❓ | ✅ |
| Arena — team assignment (friend vs foe) | ✅ | ❓ | ❓ |
| Titles — character-panel dropdown | ✅ | ❓ | ✅ |
| Master Looter — candidate list + assignment | ❓ | ❓ | ✅ |
| Dungeon Finder — queue, proposal, enter, teleport, leave | ✅ | ❓ | ✅ |
| Auction House — open, search, bid, buyout, post, cancel, sold mail | ✅ | ❓ | ✅ |
| Transports — elevators, trams (GO type 11) | ✅ | ✅ | ✅ |
| Transports — zeppelins, boats (GO type 15 / MO_TRANSPORT) | ✅ | ❌ | ✅ |
| Ready check (raid) | ✅ | ❓ | |
| Raid target icons (skull / cross / …) | ✅ | ❓ | |
| Respec — talent wipe at trainer | ✅ | ❓ | ✅ |
| Reputation panel — standings, at-war, watched faction | ✅ | ❓ | |
| Currency / honor panel | ❓ | ✅ | |
| Tutorials (popup tips + reset) | ✅ | ❓ | ✅ |
| Send mail (compose + attach + postage) | ✅ | ❓ | |
| Feed pet / happiness | ✅ | ❓ | ✅ |
| Fishing — cast + bobber + catch | ✅ | ❓ | ✅ |
| Pick lock / open locked container | ✅ | ❓ | ✅ |
| Barber shop | ❌ | ❌ | ❌ |
| GM ticket / support UI | ❓ | ||
| Calendar | ❌ | ❌ | ❌ |
| Instance lockouts + heroic difficulty toggle | ✅ | ❓ | |
| Stable — pets, slots, revive | ✅ | ❓ | ❓ |
Per-row detail, dates and the reasoning behind each entry are in wotlk.md.
Status: beta
3.4.3 is playable end to end, but it is newer than the 1.14 and 2.5 paths and has rough edges. Please read these before reporting a bug:
- wotlk.md — full audited status per subsystem
- docs/known-issues.md — current bugs and their workarounds
- docs/known-limitations.md — what the proxy structurally cannot do
Not bridged yet: the barber shop (#220) and the calendar (#222).
Warden-protected servers do not work, and that includes Warmane. HermesProxy does not implement Warden and cannot: a modern client's Warden module answers for its own build, while the legacy server's checks target the client it expects. Your target server must have Warden disabled. Connecting to a public server through a proxy is indistinguishable from client tampering, and servers ban for it.
Faster startup
Hotfix data that merely mirrored the client's own DB2 files was removed, so login no longer ships 545k lines of redundant records.
| before | after | |
|---|---|---|
| GameData load | 1566 ms | 666 ms |
| Records parsed at startup | 600,211 | 58,179 |
CSV/Hotfix on disk |
44 MB | 2.6 MB |
Classic Era and TBC
1.14.x and 2.5.x are unaffected and were re-tested against this exact build before release, against CMaNGOS vanilla and CMaNGOS TBC.
That testing caught one regression, fixed in this release: SMSG_INVENTORY_CHANGE_FAILURE wrote its result code at the wrong width for those clients, so a refused action — equipping armour while in combat, for instance — left the bag slot greyed out until relog.
What's Changed
Fixes
- fix(v3_4_3): fix enter-world crashes and contain packet-handler failures by @rursache in #111
- fix(build): stop clobbering TRACE on Windows, disarm remaining process aborts by @Xian55 in #116
- fix(v3_4_3): Dungeon Finder proposal crash (#103), invisible join errors, and silent hang on 3.4.3-only dungeons by @rursache in #112
- fix(v3_4_3): restore in-dungeon LFG state, teleport and group leave by @Xian55 in #117
- fix(v3_4_3): clear the LFG eye when the association ends by @Xian55 in #118
- fix(v3_4_3): battleground scoreboard (#106) and two legacy packet over-reads by @rursache in #113
- feat(v3_4_3): make transports work — elevators, trams, zeppelins and boats (#96) by @rursache in #114
- fix(v3_4_3): send deck-relative position in SMSG_MOVE_TELEPORT by @Xian55 in #119
- fix(v3_4_3): make action-bar visibility checkboxes survive a relog by @rursache in #121
- fix(v3_4_3): quest Accept, world-map POIs, and AzerothCore turn-in flow by @rursache in #123
- fix(v3_4_3): Specific Dungeons queue says dungeon is not valid by @rursache in #127
- fix(v3_4_3): character list order resets after logout by @rursache in #128
- fix(v3_4_3): Dungeon Finder Leave Queue greyed out — echo requested roles by @Xian55 in #130
- fix(v3_4_3): stop stuck caster kits on SpellStart/Go by @rursache in #132
- fix(v3_4_3): Change Realm from the character list no longer dumps to login by @rursache in #133
- fix(v3_4_3): Equipment Manager save, swap, delete, and Place In Bags by @rursache in #135
- fix(v3_4_3): innkeeper Make this inn your home confirm by @rursache in #136
- fix(v3_4_3): party Set Role and whisper text length by @rursache in #137
- fix(v3_4_3): translate item links between modern and legacy chat formats by @Xian55 in #142
- fix(v3_4_3): hide Titan Rune in the party DF Type dropdown by @rursache in #140
- fix(v3_4_3): show Dueling isn't allowed here after CAST_FAILED by @rursache in #141
- fix(v3_4_3): spam-cast reject no longer prints Requires %s by @rursache in #143
- fix(v3_4_3): translate quest-POI WorldMapArea to the Classic UiMap id by @Xian55 in #145
- fix(v3_4_3): render socketed gems and live item enchantments by @Xian55 in #147
- fix(v3_4_3): synthesize Pet Journal from companion spells by @rursache in #149
- fix(v3_4_3): drop fake LFG item-level zeros from lock tooltips by @rursache in #150
- fix(v3_4_3): open the guild crest designer from tabard gossip by @rursache in #151
- fix(v3_4_3): write GuildClubMemberID and RaceID on the guild roster by @rursache in #152
- fix(v3_4_3): translate guild bank rights and item deposits by @rursache in #153
- fix(v3_4_3): raid difficulty picker no longer snaps back to 25-player by @rursache in #154
- fix(v3_4_3): read guild bank log Count as uint32, switch on EntryType by @Xian55 in #160
- fix(v3_4_3): open the group loot roll dialog by @Xian55 in #161
- fix(v3_4_3): carry LootObj into the loot roll result packets by @Xian55 in #163
- fix(v3_4_3): stop the injected bank activate from stealing the UI by @Xian55 in #165
- fix(v3_4_3): fill the inspect talent tree from SMSG_INSPECT_TALENT by @rursache in #168
- fix(v3_4_3): close the quest details frame on Decline by @rursache in #169
- fix(v3_4_3): interleave glyph slot and glyph ids on Values update by @rursache in #173
- fix(v3_4_3): show unlocked titles in the character-panel dropdown by @rursache in #172
- fix(v3_4_3): echo the queue bracket id on battlefield port and leave by @Xian55 in #174
- fix(wotlk): read the arena team from PLAYER_BYTES_3 instead of guessing from race by @Xian55 in #175
- fix(v3_4_3): show master loot candidates and allow assignment by @Xian55 in #176
- fix(v3_4_3): read the channel chat text length as 11 bits, not 9 by @Xian55 in #178
- fix(v3_4_3): learn and use toys from the Toy Box by @rursache in #170
- fix(v3_4_3): defer the Toy Box sync, clear known guids on world change, synthesize item cooldowns by @Xian55 in #181
- fix(v3_4_3): Wintergrasp join, workshops, and vehicles on AzerothCore by @rursache in #179
- fix(v3_4_3): arena petition drop, vendor slots, and rated party invite by @rursache in #183
- fix(v3_4_3): BG combat/death SMSG, post-kick MapID, end-score faction by @rursache in #186
- fix(logging): route object-lifecycle destroy traces to the Server category by @Xian55 in #191
- fix(v3_4_3): ship Corpse Customizations on the create path by @Xian55 in #192
- fix(v3_4_3): make Strand of the Ancients gunships work on a 3.3.5a backend by @rursache in #194
- fix(v3_4_3): name-map WotLK inventory and quest-share result bytes, and correct the QuestPushReason ordinals by @rursache in #196
- fix(legacy): read the 5-byte server header WotLK cores use past 0x7FFF by @Xian55 in #201
- fix(v3_4_3): write ProposedRoles as a byte in SMSG_PARTY_INVITE by @Xian55 in #203
- fix(v3_4_3): disable Continue on unfinished RequestItems and restore the list on Cancel by @rursache in #195
- fix(v3_4_3): stop wiping quest objective counters at login and on turn-in by @Xian55 in #205
- fix(v3_4_3): sail the Strand of the Ancients gunships instead of jumping by @Xian55 in #208
- fix(v3_4_3): read the ready-check answer bits and end a check that times out by @Xian55 in #225
- fix(v3_4_3): map the raid target icon opcodes and fetch the list on join by @Xian55 in #226
- fix(v3_4_3): bridge CMSG_ITEM_TEXT_QUERY so mail letters open by @Xian55 in #227
- fix(v3_4_3): make report-player work and answer the GM ticket status queries by @Xian55 in #229
- fix(v3_4_3): raid difficulty picker reflects the choice, and bridge the pending raid lock by @Xian55 in #231
- fix(v3_4_3): drop the ReferAFriendBonus float so live reputation gains apply by @Xian55 in #232
- fix(v3_4_3): show emblems and battleground marks in the currency panel by @Xian55 in #233
- fix(v3_4_3): deliver the pet stable to the modern client by @Xian55 in #236
- fix(ci): ignore pre-release tags when computing the release version by @Xian55 in #239
New Features
- fix(v3_4_3): let the client fire legacy area triggers, remove proximity synthesis by @Xian55 in #188
- perf(hotfix): drop client-mirror hotfix data — GameData load 1566ms -> 666ms, 44MB -> 2.6MB by @Xian55 in #193
- fix(v3_4_3): render destructible buildings by resolving their DestructibleModelData id by @Xian55 in #207
- Add WotLK Classic (3.4.3) support by @Xian55 in #238
Other Changes
- docs(wotlk): drop the superseded MOTransport row, record the flying-mount finding by @rursache in #120
- docs(wotlk): fill in the AzerothCore column from a play-testing pass by @rursache in #122
- docs(wotlk): continue the AzerothCore play-test column by @rursache in #124
- docs(wotlk): tick Auction House as fully working on AzerothCore by @rursache in #166
- fix(v3_4_3): enter 3v3/5v5 skirmish and surface arena join errors by @rursache in #171
- docs(wotlk): record AC group-loot Need/Greed play-test by @rursache in #185
New Contributors
Full Changelog: v4.3.29...v4.4.0