VersionCheck-1.0 — Cross-Guild Addon Version Check Library
VersionCheck is a shared LibStub library that other addons use to perform a single batched cross-guild version check at login. If a guildmate is running a newer version of an addon than you are, you get a one-time popup telling you to update. Type /vc (or /vcroster) and you get a window showing who in your guild is running which version of each of those addons, built entirely from the announcements that were already arriving.
Do you need this addon?
Probably not directly. You need VersionCheck-1.0 installed only if another addon you use depends on it. CurseForge installs it automatically as a dependency when you install one of those addons. If you're not running any of these, you can safely uninstall VersionCheck and nothing else will be affected:
- FastGuildInvite, Dibs, Grouper, BijouRR, Recount, TrackOMatic, SpellCheck, PersonalShopper, GuildShoppingList, SandPacker
- TOGProfessionMaster, TOGBankClassic, TOGTools, ClassicCalendar, CalendarHelper
- The GuildRoster, ItemDB, ProfessionDB, LibGraph-2.0 and LibAceGUIWidgets libraries
- (and any other addon whose
.toclists## Dependencies: VersionCheck-1.0)
What you'll see in-game
- A small popup at most once per session, per outdated addon, telling you the highest version any guildmate is running and where to download it (CurseForge). Click OK and it's gone for the session.
- No popups mid-combat. If the check completes while you're in a fight, the popup waits until combat ends.
- No popups for the same version twice. If a host addon re-triggers a version check later in the same session (some addons do this periodically), you won't see the same alert again unless a strictly-newer version has surfaced.
- If GreenWall is installed and you're in a confederation, the check reaches every linked co-guild — not just your literal
<guild>— so you'll catch updates from a wider pool of guildmates. - A roster window, opened with
/vc(also/vcrosteror/versioncheck), listing who in your guild is running which version of each addon. It is built from information VersionCheck was already receiving, so opening it adds no chat traffic.
Slash commands
- /vc — open (or close) the guild version roster (/versioncheck and /vcroster do the same)
- /vcd — toggle debug logging
- /vcdon — enable debug logging (verbose log to chat)
- /vcdoff — disable debug logging
Debug state persists across /reload. Apart from /vc, you'll only ever need these if a host addon's author asks you to capture a debug log for a bug report.
For addon developers
Full integration documentation is in the README.md that ships with the addon. Short version:
- Add
## Dependencies: Ace3, VersionCheck-1.0to your.toc. - Call
VC:Enable(self)from your addon's init code (whereselfis your AceAddon object, or a wrapper with:GetName()and.Version). - Make sure your
.tochas a## Version:line.
Enable is the entry point. Get the library with LibStub("VersionCheck-1.0", true) and guard on VC.Enable. Pass the raw ## Version: string, @project-version@ included when running from source — that is how the library recognises a development build and stays quiet. The global VersionCheck is not assigned and will not be; the library is reachable only through LibStub. You do not declare GuildRoster or LibAceGUIWidgets yourself: VersionCheck's own manifest pulls both in from CurseForge, requires LibAceGUIWidgets, and loads after GuildRoster whenever it is present.
What v1.4.0 adds for your addon. Everything below is additive and feature-detectable (if VC.GetRoster then), so an addon that may load beside an older embedded copy can guard on the name. Nothing that existed before changed meaning.
VC:RegisterCheck(name, version)—Enablewith an explicit version string, for when you have no addon object to hand. Two addons were already calling this name before it existed; it now means what those call sites intend.VC.version/VC.minor— the loaded library minor, as a number. Diagnostics that list loaded libraries can finally say what version of VersionCheck is running.VC:GetPeerVersions([addon])— everything observed this session,sender → { version, via, at }, including addons you do not have installed and confederation members who can never whisper you back. Reading it sends nothing.VC:GetRoster(addon)— one row per guild member for one addon, with name, rank, class, online state and a four-waystate:reported,silent(online, never reported),offline, orunknown(not in the roster). This is the built-in window's model; read it rather than rebuilding it.VC:RequestCheck([push])— a rate-limited refresh that returnstrue, orfalseplus the seconds remaining, so a button can grey itself rather than fire into a peer's 20-second dedup window. Passtrueto also ask every receiver to run its update decision now, which is how the leadership "Notify guild" button makes out-of-date guildmates see the popup immediately. Receivers on older copies ignore the flag and behave exactly as before.VC:IsLeadership()— whether the player holds officer permissions, by GuildRoster's one predicate for it (the officer-note permission, not a rank index; covers the GM).VC:NewestKnownVersion(addon),VC:IsBehind(row, addon),VC:WhisperUpdate(row, addon)— the pieces behind the right-click whisper: the highest build anyone is known to run, whether a roster row is behind it (nilwhen the row has no version to compare), and the canned whisper itself.VC:ToggleRoster()— what/vccalls. If your addon wants a "versions" button, call this rather than building a second window.VC.callbacks— a CallbackHandler registry withOnPeerVersion(sender, addon, version, via, changed),OnCheckComplete(), andOnRosterChanged(). Register with the dot form,VC.RegisterCallback(yourAddon, ...).- Reserved wire keys. Every request key beginning with
is protocol plumbing (v,resync,from,push). Do not register an addon whose name starts that way.
What v1.5.0 adds for your addon. VC:RequestFrom(name) asks one player, by whisper, what they run — the guild broadcast never reaches someone outside your guild, and this does. VC:RequestAbout(addon) asks the guild and the confederation about one of your registered addons, with RequestCheck's return shape and clock. Answers to both arrive through OnPeerVersion and show in GetPeerVersions and GetRoster like every other. VC:FlushGreenWall() releases the GreenWall half of a request from your own hardware event (a click on a frame you own) instead of waiting for the player's next chat keystroke; you guarantee the hardware event, it does nothing else. Guard on the names as with everything above. One more reserved wire key, all, joins the list.
If you embed VersionCheck-1.0 in your addon (rather than declaring it as an external dependency), also add ## SavedVariables: VersionCheck10_DebugEnabled to your .toc so end-users' /vcdon survives /reload — and note that embedding no longer removes the need for the two standalone libraries: without GuildRoster and LibAceGUIWidgets an embedded copy still checks versions and still pops, but has no roster window and compares names as the transport spells them. Depending on the standalone VersionCheck-1.0 is the supported path.
Requirements
- Ace3 installed as a separate addon. VersionCheck does not embed Ace3; it uses the global AceComm-3.0 and AceSerializer-3.0 you already have if you run any Ace-based addon.
- GuildRoster and LibAceGUIWidgets, also installed as separate addons; if you install VersionCheck through CurseForge, both arrive with it. LibAceGUIWidgets provides the roster window's list and is required. GuildRoster is what lets VersionCheck tell two players with the same name on different realms apart and fills the roster window with your guild; from v1.5.0 VersionCheck loads without it (GuildRoster itself now requires VersionCheck, and two addons cannot require each other), but with it missing the window lists only people who have answered, with no rank or class colouring, and names are shown as they arrive rather than realm-qualified. Keep both installed.
- Optional: GreenWall for confederation reach.
Recent Updates
v1.5.0 (2026-09-16)
New
- Addons built on VersionCheck can now ask a single player what they are running. The normal version check is a message to your whole guild, so it never reaches someone outside it — a member of a sister guild in your GreenWall confederation, for instance. An addon can now whisper that one person the same question and get the same answer back, which shows up in the roster window like any other. This is one whisper, sent only when an addon has a reason to ask; nothing here adds ongoing chat traffic, and nothing changes for players on an older VersionCheck, who simply answer as they always have. The first addon to use it is GuildRoster, which asks a player what they run before syncing a roster with them, so it picks the most compatible person.
- An addon can also ask everyone about just itself. Rather than the full list of every addon you have, an addon can send a version check naming only itself — to your guild, and through GreenWall to your confederation — and hear back from everyone who runs it. Same twenty-second countdown as the Refresh button, shared with it, for the same reason.
- An addon can send the GreenWall half of a check from its own button. Until now a version check bound for your confederation waited for you to type something in chat, because that is the only moment the game lets an addon send on a chat channel. An addon that already has you clicking something can now send it from that click instead, so a sister-guild check no longer waits for you to say something.
Changed
- GuildRoster is no longer a hard requirement for VersionCheck to load. GuildRoster now requires VersionCheck (its sister-guild sync uses VersionCheck to find someone who can answer), and two addons cannot each require the other — the game would load neither. So VersionCheck now loads with or without GuildRoster, loading after it whenever it is present. Nothing changes for you if you have both, and CurseForge still installs both together. Without GuildRoster the roster window lists only players who have answered, has no rank or class colouring, and names are shown as they arrive rather than realm-qualified.
Fixed
- Version checks sent through GreenWall never reached your confederation if you ran more than a few VersionCheck-aware addons. GreenWall carries one short chat message and cuts anything longer, so the full list of your addons and versions was being chopped mid-message on its way to sister guilds, thrown away on arrival, and answered by nobody — while your own guild, which hears you a different way, was fine, so nothing looked wrong. The GreenWall message is now a short prompt that asks sister-guild members to reply with everything they run. Members on this version reply about all of their addons; members on an older VersionCheck reply about the ones the short prompt could still name, exactly as they always did. Your own guild is unaffected either way.
v1.4.0 (2026-09-10)
New
- A guild version roster, opened with
/vc(or/vcroster, or/versioncheck). One tab per addon that uses VersionCheck, and a list of your guild showing each person's name, rank and version — click any column header to sort by it, and again to flip the order. The status bar shows which version of VersionCheck you are running, and the i icon beside it explains what each entry in the version column means; every button has a tooltip saying what it does and what it costs. Where a version is missing it tells you which kind of missing it is rather than guessing — whether they are online and have simply never reported, offline, or unknown to it entirely. Opening the window sends nothing, and neither does switching tabs: it is filled from the version announcements that were already arriving as guildmates log in, so leaving it open costs you and your guild no chat traffic at all. - Right-click a name to whisper them about it. If that player is running an older copy of one of your addons, the menu offers a one-click whisper naming the addon, their version and the newest one anyone in the guild has — so they can see at a glance that it is true. For someone who is up to date, or someone you have no version for, it says so instead of offering a whisper that would be wrong — and an addon author running an unreleased copy from source is never treated as out of date, in either direction.
- A Notify button for guild leadership. Anyone with officer permissions (and the guild master) gets a second button that asks the whole guild at once and tells their VersionCheck to check right now — so anyone on an older copy sees the normal update popup immediately, rather than at their next login. Guildmates on an older VersionCheck are unaffected: they answer as usual and check at their next login, exactly as before.
- A Refresh button that will not lie to you. It asks the guild again, then counts down for twenty seconds — because other players ignore a repeat request inside that window, so pressing it sooner would send a message nobody answers and leave your list emptier than before you pressed it. Press it while the guild is still ignoring you (in the first twenty seconds after logging in, say) and it counts down the time actually left rather than doing nothing. If the refresh could not be sent at all — you are not in a guild — the button stays available instead of counting down for a request that never left.
- Your addon can now register with
VC:RegisterCheck("MyAddon", version). It does the same job asVC:Enable, but you hand it your version string directly — useful when your addon has no addon object to pass. Pass the raw version from your TOC, including an unsubstituted@project-version@if you are running from source: that is how VersionCheck recognises a development build and stays quiet. Two addons were already calling this name before it existed, and were being silently rescued by their fallback branch; it is now a real, documented method, so it can never mean something different underneath them. - VersionCheck now remembers who is running what, for the whole session. It used to learn about other players only during a short window just after you logged in, so anyone who logged in later was invisible to it — and it quietly discarded most of what it was told. It now keeps track continuously, including addons you do not have installed yourself and guildmates reached through a GreenWall confederation. This sends no extra addon messages at all; it simply stops throwing away information that was already arriving. Groundwork for a roster window, and addon authors can read the data today.
- VersionCheck can finally report its own version.
VC.versionandVC.minorboth give you the loaded library version as a number. Until now there was no way to ask, which meant diagnostics that list your loaded libraries showed VersionCheck as "version unknown" on every client — in the one library whose whole job is reporting versions.
Changed
- Two more small addons now install alongside VersionCheck: GuildRoster and LibAceGUIWidgets. CurseForge fetches them automatically with this update. GuildRoster is how VersionCheck now tells two players with the same name on different realms apart; LibAceGUIWidgets is what the new roster window is built from. Neither does anything on its own and neither adds chat traffic. If VersionCheck ever shows as not loaded after updating, check that both are installed and enabled.
- The update popup now tells you which version you are on. It used to name the newer version twice and yours not at all, so a popup about an update you had already installed looked exactly like a live one. It now reads "You have 1.0.0; player 'Bob' has 2.0.0." If your own version cannot be determined, the old wording is used rather than telling you that you have "unknown".
Fixed
- Two players with the same character name on different realms no longer cancel each other out. VersionCheck ignores the realm part of a name so that one person arriving through both your guild and a GreenWall confederation is answered once. That also meant two genuinely different people — say Bob on one realm and Bob on another — were treated as the same player, and whichever asked second within 20 seconds got no reply at all. Their version check finished without your addon versions in it, and nothing said so. They are now told apart.
v1.3.1 (2026-08-13)
- No longer shows as out of date on Retail. The supported-version list still named Retail 12.0.7, so after the 12.1.0 patch the addon list flagged VersionCheck as out of date. Refreshed. Nothing else changed — no new behaviour, no new settings, and the other supported clients are untouched.
v1.3.0 (2026-08-04)
- Fixed: some addons were never reported as out of date. When an addon registered with VersionCheck by name rather than by handing over its addon object, VersionCheck answered other players' version checks with "unknown" instead of that addon's real version. Because "unknown" sorts below every real version number, those addons could never be the newest version anyone saw — so nobody was ever prompted to update them, no matter how far behind they were. They now report their real version, read from the addon's own version info.
- Fixed: repeated "No version responses received" messages in chat. If nobody else in your guild ran one of your VersionCheck-using addons, VersionCheck printed a line to your chat window saying so — once per addon, and again every few minutes for the rest of your session. That is the normal situation for a less common addon and there is nothing you can do about it, so the message is now only shown when you turn debugging on with
/vcdon. - Marked compatible with the current Retail, Anniversary and Mists clients. The supported-version list had fallen behind — it stopped at Retail 12.0.1, Anniversary 2.5.5 and Mists 5.5.3, so the addon list was flagging VersionCheck as out of date on 12.0.7, 2.5.6 and 5.5.4. Refreshed, with the superseded duplicates dropped. Existing targets are unchanged. No behaviour change.
- No other user-visible changes. This release also adds an offline test suite covering the whole library, which is what found the fixes above. It is a development tool and is not part of the download.
v1.2.9 (2026-07-28)
- Marked compatible with the current Classic Era client. No behaviour changes — this release only stops the addon list from showing VersionCheck as out of date after the latest client patch.
Older patch notes are in the addon's CHANGELOG.md file (ships with the addon).
Credits
Pimptasty — maintainer.
Source
Released under the MIT license. Bug reports and feature requests welcome on the CurseForge page.

