Trend Explorer
Recent download momentum
Hourly download deltas for the last 48 hours.
About this addon
What it does
Stop juggling whispers and Discord channels just because Blizzard's 1,000-member guild cap forced your community into multiple guilds. GreenWall transparently bridges guild chat — and optionally officer chat — across every co-guild on a single realm or a connected-realm cluster, so a single conversation flows between all of them as if they were one guild.
The Problem
Blizzard caps guild membership at 1,000 characters. Active communities outgrow that fast, and the workaround — splitting into multiple guilds — fragments guild chat. Officers end up running parallel Discord channels, members lose track of who is in which sister guild, and join/leave events stop being visible across the whole community.
Existing bridge addons typically rely on a designated "gateway" member whose client relays the traffic. When that member logs out, the bridge dies. Configuration is done by every member individually, so newcomers can't see the bridged conversation until they set the addon up themselves.
The Solution
GreenWall uses a hidden custom chat channel as the transport. Every member of every co-guild joins the same channel automatically, and chat sent in any one co-guild's guild chat is replicated into the chat windows of every member of every other co-guild — routed through the channel, not through any one player.
There is no gateway member: with N online members the bridge has N independent senders. The bridge survives anyone logging out, and the only way to break it is for every member of every co-guild to be offline simultaneously.
Configuration lives in the in-game Guild Information page (J key). Officers set it up once for each co-guild; ordinary members install the addon and the bridge just works — zero per-member configuration required.
Core Features
Transparent Guild-Chat Bridging
- Messages typed in
/gin any co-guild appear in every other co-guild's guild-chat window in real time, attributed to the original sender - Optional co-guild tag prefix (e.g.
<DMC>) so you can tell at a glance which sister guild a speaker is in - Bridged messages preserve player linking, item links, and chat-window class colors — they go through the standard
CHAT_MSG_GUILDhandler, not a fake channel - Hidden bridge channel never appears in your channel list and never spams the chat window
Officer-Chat Bridging
- Optional second hidden channel for officer chat; configured via the GM's officer note (
GW:a:channel:password) - Each officer opts in individually with
/gw ochat on— non-officers never see officer traffic, and the addon detects officer-note read access before activating the bridge - Same replication semantics as guild chat: every co-guild's officer chat appears in every other co-guild's officer chat window
Roster Announcements
- Cross-confederation join, leave, kick, online, and offline notifications — you see the same notifications you'd expect from your own guild for every member of every co-guild
- Toggle with
/gw roster on|off - A comember-cache hold-down suppresses the duplicate notification storm that would otherwise fire when a peer crosses the bridge channel boundary
Per-Character or Account-Wide Settings
modesetting picks between a sharedGreenWallAccountstore and per-characterGreenWallsettings — switch any character to whichever mode you prefer- Existing pre-1.9.0 installs default to character mode so nothing changes underneath you on upgrade
- Settable via the standard Blizzard Interface Options canvas (
ESC→ Options → AddOns → GreenWall) or the slash-command CLI
Third-Party Addon API
Other addons can piggyback on the confederation bridge through GreenWallAPI:
GreenWallAPI.SendMessage(addon, message)— broadcast a message to every co-guildGreenWallAPI.AddMessageHandler(handler, addon, priority)— register a callback for inbound messagesGreenWallAPI.GetChannelNumbers()— query the hidden channel numbers in use- Messages are framed with the source addon name so multiple subscribers coexist cleanly
An example consumer is GWSonar. Full reference in API.md.
Compatibility With Popular Chat Addons
- ElvUI — bridged messages are routed through ElvUI's floating chat-frame event handler
- Prat-3.0 — bridged messages flow through Prat's chat dispatcher
- Identity-2 / Name2Chat / Incognito — outbound message rewriting is detected and accommodated rather than triggering the corruption guard
- Compatibility shims activate automatically; no extra setup required
How It Works
Hidden Custom Chat Channel
GreenWall does not use the addon-message API. Bridged traffic is sent as ordinary chat-channel messages on a custom channel that every member silently joins via JoinTemporaryChannel. The channel is removed from every chat-window subscription after joining, so it never appears in your chat. Each segment is structured as:
opcode#guild_id##payload
The opcode (C chat, B broadcast, N notice, R request, M addon, E external API) tells the receiver which adaptation-layer decoder to apply. Maximum segment length is 255 bytes; longer messages are truncated.
Loopback & Corruption Detection
Every transmitted segment is hashed with CRC-16-CCITT and counted in a per-channel transmit table. When a peer's own broadcast loops back through the channel, the hash count is decremented. If a self-sent segment arrives with a hash that doesn't match anything in the table, the addon raises a corruption warning — that's how GreenWall detects a third-party addon mutating outbound chat (Identity-2, Name2Chat, Incognito are the known offenders, hence the dedicated compatibility shims).
In-Game Configuration
The addon reads its confederation configuration from the Guild Information panel (J) at login time and on GUILD_ROSTER_UPDATE. The directive grammar is line-oriented:
GW:c:channel_name:password # required common channel
GW:p:Darkmoon Clan:DMC # peer co-guild + tag
GW:p:Baseball Dandies:BBD
GW:p:Nightlife:NL
GW:v:1.11.0 # optional minimum addon version
GW:s:value:k # substitution variable, $k expands later
The optional officer-chat directive lives in the GM's officer note: GW:a:officer_channel:password. Reload the configuration after editing with /gw reload. Full grammar in CONFIGURATION_FORMAT.md; officer-oriented setup walkthrough in GUILD_QUICKSTART.md.
Reconnection & Backoff
Channel joins are debounced by a configurable joindelay (default 30s) so the General channel grabs slot 1 first. Per-channel join failures use exponential backoff (10s → 900s). Configuration reloads are gated by a 5-minute hold-down to prevent reload storms on guild-roster churn.
Slash Commands
/gw,/greenwall— root command (use/gw helpfor the full list)/gw status— channel and connection statistics/gw dump— full settings and configuration dump (channel names and passwords redacted)/gw reload— re-parse Guild Information after an officer edits it/gw reset— disruptive: clear all channels and reload from scratch/gw mode account|character— switch between shared account-wide settings and per-character settings/gw tag on|off— toggle co-guild prefix tags on bridged messages/gw roster on|off— toggle cross-confederation join/leave/online/offline announcements/gw ochat on|off— enable officer-chat bridging (officers only)/gw joindelay N— seconds to wait before joining the bridge channel/gw debug 0..5,/gw verbose on|off,/gw log on|off,/gw logsize N— diagnostics/gw redact on|off— obfuscate channel names and passwords in debug output (default on)/gw version— print addon and WoW build versions
Requirements
- WoW client — supports Classic Era 1.15.x, Burning Crusade Classic 2.5.x, Wrath Classic 3.4.x, Cataclysm Classic 4.4.x, Mists Classic 5.5.x, and Retail 11.x. A single CurseForge project ships a per-flavor build of the same source.
- Fewer than 10 active custom chat channels — you can verify in the Social window (
O→ Chat tab). The bridge channel needs a free slot. - For officer-chat bridging: officer-note read access on at least one character per co-guild. This conflicts with EPGP-style addons that store data in the officer note.
- For initial configuration: Guild Information edit access in the guild management panel (
J).
Recent Updates
v1.13.3 (Latest — 2026-07-22) — Restore outbound bridging after the WoW 1.15.9 chat-frame refactor.
- fix: guild and officer chat stopped bridging outbound after patch 1.15.9 — your messages showed in local guild chat but never reached co-guilds. 1.15.9 (interface 11509) rebuilt the chat edit box into the mixin-based
Blizzard_ChatFrameBasesystem, so the globalChatEdit_ParseTextGreenWall hooked to catch outgoing messages became a dead deprecation alias — the client now calls the edit box's ownParseTextmethod, which the hook never saw. The bridge channel still connected (/gw statusshowedconnected=true) and inbound peer messages still arrived, which is why it looked half-alive. Now hooks each chat edit box'sParseTextmethod where the new mixin exists and falls back to the legacy global hook on older clients, so every flavor keeps working. This refactor already shipped on Retail (11.0) and Mists Classic, where the old hook was likewise dead. (GreenWall.lua) - change: bumped the Classic Era TOC to interface
11509for WoW 1.15.9. (GreenWall.toc) - note: this is the second half of the 1.15.9 breakage — v1.13.2 fixed the
GetAddOnInfologin crash, this fixes the quieter outbound-bridging regression from the chat-frame refactor. Inbound replication was never affected.
v1.13.2 (2026-07-22) — API-breakage fixes for the latest WoW client update.
- fix:
GreenWallAPIcrashed withattempt to call a nil valuewhenever a third-party addon touched it — a client update removed the loose globalGetAddOnInfo, which now exists only asC_AddOns.GetAddOnInfo. Any caller reachingSendMessage/AddMessageHandler/ClearMessageHandlersfor a named addon hit theassert(addon == GetAddOnInfo(addon))validation and threw — seen in the wild asVersionCheck-1.0callingAddMessageHandlerat login. The rest of the addon migrated toC_AddOnsin v1.12.0;API.luawas the one file missed. (API.lua) - change: proactively migrated two now-deprecated globals — the same update demoted
GetGuildInfoTextandSendChatMessageto deprecation-fallback shims forC_GuildInfo.GetInfoTextandC_ChatInfo.SendChatMessagethat load only while theloadDeprecationFallbacksCVar is on and are flagged "will be removed in the future." Switched both to the namespaced API with the loose global kept as a fallback, using the same feature-detect idiom v1.13.1 introduced forC_GuildInfo.GuildRoster— no flavor regresses, and the namespacedSendChatMessageis the same restricted function, so the wire protocol is unchanged. (Config.lua,Channel.lua) - note: audited the addon's entire WoW API surface against the updated Classic Era docs.
GetAddOnInfowas the only hard removal andGetGuildInfoText/SendChatMessagethe only two deprecations; every other global GreenWall calls is still first-class. No further changes required.
v1.13.1 (2026-05-19) — Hotfix for v1.13.0's multi-flavor rollout.
- fix:
GuildRoster()crashed on TBC Classic / Wrath / Cata / Mists / Retail withattempt to call global 'GuildRoster' (a nil value)— Blizzard movedGuildRoster()into theC_GuildInfonamespace years ago; it remains as a loose global only on Classic Era 1.15.x. v1.13.0 enabled the addon to load on the other flavors but did not audit the Lua source for Era-only API calls, soGwConfig:reload()threw on the very first config load and the bridge configuration never bootstrapped. Reported on TBC/Anniversary. (Config.lua) - tooling: refreshed
CLAUDE.mdto match the post-v1.12.0 / post-v1.13.0 docs reality — togpm changelog format, 6 flavor-specific TOC files, and the@project-version@packager substitution that replaced manual## Version:/## X-Date:bumps. (CLAUDE.md)
v1.13.0 (2026-04-30) — Multi-flavor support. GreenWall now ships per-flavor builds for Classic Era, Burning Crusade Classic, Wrath Classic, Cataclysm Classic, Mists Classic, and Retail from a single CurseForge project.
- add: per-flavor TOCs —
GreenWall.toc(Classic Era),GreenWall_TBC.toc,GreenWall_Wrath.toc,GreenWall_Cata.toc,GreenWall_Mists.toc,GreenWall_Mainline.toc. The BigWigs packager (already wired up in.github/workflows/release.yml) auto-detects flavor-suffixed TOCs and produces one build per flavor on every tagged release. - note: no Lua source changes. Every API GreenWall depends on (
Settings.RegisterCanvasLayoutCategory,C_AddOns.*,C_ChatInfo.RegisterAddonMessagePrefix,JoinTemporaryChannel/SendChatMessage/GetChannelName/LeaveChannelByName, theERR_*localized constants,GetGuildInfoText) is present on every supported flavor, so the same compiled load order works everywhere. The custom-chat-channel transport carries across connected-realm clusters on every flavor; guild membership is itself bounded to a cluster, so no transport rework was required.
v1.12.0 (2026-04-29) — First Pimptasty fork release: long-standing bug fixes, dead-code cleanup, modernized TOC. Mark Rogaski's original work covers releases 0.9.00 (2010-11-01) through 1.11.18 (2025-05-24); see LICENSE for full attribution.
- fix: roster announcements duplicating for every co-guild member crossing the bridge channel —
GwHoldDownCache:holdhad an inverted comparison since v1.5.3 (Nov 2014); the comember-cache that was supposed to dedupe online/offline announcements always returnedfalse, so every login produced both the naturalCHAT_MSG_SYSTEMnotification *and* a duplicate generated from the bridge channel'sCHAT_MSG_CHANNEL_JOIN. The cache's pruning logic was also broken (#self.cachealways returns 0 on hash-keyed tables;table.removeis the wrong API for string keys). Both fixed. (HoldDown.lua) - fix: stale channels weren't cleared after Guild Information edits —
GwConfig:load()'s cleanup loop usedipairsoverself.channel, which is hash-keyed byguild/officer; the loop body never ran. Officers removing a channel directive left the addon transmitting on the orphaned channel until reload. Switched topairs. (Config.lua) - fix: GreenWallAPI.RemoveMessageHandler was broken since v1.7.0 — the function had a leaked
rv = falseglobal, anif addon ~= '*'block referencing a parameter the function doesn't take (copy-paste fromClearMessageHandlers), and usedgw.api_table[i] = nilwhich leaves a hole that breaks subsequentipairswalks. Any third-party caller using the documented API hit undefined behavior. Rewrote to match the contract; switched totable.remove.ClearMessageHandlershad the same hole-leaving bug; fixed too. (API.lua) - fix:
gw.IsLegendaryleaked the_andrarityglobals on every call — orphan from the v1.11.0 legendary-loot-replication removal; deleted along withgw.GetItemString,GwPromoteSystemEventHandler, therankfield on broadcast destructuring, and an unusedsemverimport. (Utility.lua,SystemEventHandler.lua,Chat.lua) - fix: invalid Lua 5.1 escape sequence (backslash-backtick) in the
gw.Debugcall-stack parser. WoW's interpreter accepted it;lua-language-serverflagged it as error-severity. Replaced with a literal backtick. (Utility.lua) - fix: malformed
'id=%, addon=%s, priority=%d'debug format string in two API debug calls would error if logged at debug level 4+. (API.lua) - change: TOC modernized. Bumped to Interface 11508 (Classic 1.15.8); switched
## Versionto the packager substitution token@project-version@; addedX-Min-Interface,OptionalDeps(ElvUI, Prat-3.0, Identity-2, Name2Chat, Incognito),X-License: MIT, andX-Curse-Project-ID; dropped legacyX-Category(replaced byCategory),DefaultState, manualX-Date, and the twoURLlines. (GreenWall.toc) - add: this fork is now Pimptasty-maintained.
Pimptastyappended to the## Authorline; LICENSE finally filled in (it had been the unfilled MIT template since the project began). New repo tooling:CLAUDE.md,.pkgmeta,.luarc.json,.markdownlint.json,docs/curseforge_description.html.
Community
For bug reports or feature requests, visit the project on CurseForge.
Dedication
GreenWall is dedicated in memoriam to Roger Keith White (1962-2017), known to the members of Alea Iacta Est as Ralff. He was instrumental in the creation and refinement of GreenWall, and the soul of our community writ in flesh and blood.
Never again shall we meet such a formidable mountain of intelligence, curiosity, hospitality, and non-stop innuendo.
At-a-glance numbers
Performance highlights
- Peaked at Hot #109 on Jul 23, 2026.
- Peaked at Rising #36 on Jul 26, 2026.
- Featured on the Hot list across 6 distinct weeks.
- Shipped 4 releases in the last 30 days.
- Averaging 886 new downloads per day over the past week.