Details
Expansion
Categories
Developers
Having issues?
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 — name, rank and version, sortable by any column, with a right-click whisper for anyone who is behind and a Notify button for guild leadership. Members of linked guilds in your GreenWall confederation appear too once they have reported, with their rank in their own guild. It is built from information VersionCheck was already receiving, so opening it adds no chat traffic. - A warning at login if something is missing. If GuildRoster or LibAceGUIWidgets is not installed (or LibAceGUIWidgets is too old), you get one line in chat naming it, what will not work without it, and what to do. With both installed you see nothing.
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.
What v1.5.1 changes for your addon. No new methods. Rows from VC:GetRoster for a member of a sister guild in the player's GreenWall confederation now carry rank, rankIndex and classFile from that sister roster (when the sister's GuildRoster is 0.8.2 or later), plus a new guild field naming which guild the rank belongs to — nil on the player's own guildmates. And a peer running an old enough VersionCheck to not name itself on the wire is now keyed by its full Name-Realm when it is on the player's own realm, so it shares a row with the guild roster's entry instead of appearing twice.
What v1.5.2 changes for your addon. Nothing to call. Where VersionCheck adds a realm to a name — its own name on the wire, and an older peer on the player's realm — it now uses the game's normalized realm spelling (Bob-OldBlanchy), never the display name with its space (Bob-Old Blanchy). On realms with a space in their name, keys in GetPeerVersions and GetRoster therefore now match the guild roster's. VersionCheck also checks for GuildRoster and LibAceGUIWidgets itself at login and tells the player in chat if either is missing, so your addon does not need its own check for them.
What v1.5.3 changes for your addon. Nothing to call, and nothing changes outside WoW: Forever. On Forever, where a character is “First Last” with no realm, every name VersionCheck hands you — the keys in GetPeerVersions, row.name in GetRoster, and the sender in OnPeerVersion — is the full name with any realm dropped, and every whisper it sends goes to that name, because Forever refuses a whisper addressed with a realm. If your addon compares those names with its own, build yours the same way there.
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 tells the player at login which library is missing. 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. Keep both installed; VersionCheck tells you at login if either is missing.
- Optional: GreenWall for confederation reach.
Recent Updates
v1.5.3 (2026-09-29)
Changed
- VersionCheck’s name in the AddOns list is now orange, matching the other addons and libraries from the same author.
Fixed
- Version checks now work with WoW: Forever’s first-and-last names. On Forever a character is “First Last” with no realm, and VersionCheck was still treating names the old way. It announced you by your first name alone, so guildmates could see you as a different person. It filed guildmates under a hidden realm name, so they could appear twice in the roster window. And its replies and whispers went to an address the game rejects, so players who were online looked like they never answered. All three are fixed. Nothing changes on any other version of the game.
v1.5.2 (2026-09-27)
New
- VersionCheck now tells you at login if one of its libraries is missing. CurseForge does not always install GuildRoster and LibAceGUIWidgets alongside VersionCheck as it should, and the game only warns about the one VersionCheck strictly requires — and not at all when VersionCheck is bundled inside another addon. Rather than a roster window that silently never works, you now get one line in chat at login, per missing library, saying which it is, what will not work without it, and to install it from CurseForge and check it is enabled. If both are installed you see nothing, exactly as before.
Changed
- Retail no longer shows VersionCheck as out of date. It now declares every current retail game version, so it — and any addon that requires it — loads on retail without you having to allow out-of-date addons.
- VersionCheck now appears under “Library” in the AddOns list, alongside your other libraries, instead of loose among your addons.
Fixed
- Guildmates on realms with a space in the name (such as Old Blanchy) no longer appear twice in the version roster. VersionCheck spelled the realm with its space where the game spells it without one, so a guildmate could show up as one row with their version and a second row reading “Not seen”. It now uses the game’s own spelling, so each guildmate is a single row.
v1.5.1 (2026-09-20)
New
- Sister-guild members in the roster window now show their rank and class colour. Someone in a linked guild of your GreenWall confederation used to appear with a version and a blank Rank, beside your own guildmates with theirs. GuildRoster now shares ranks across sister guilds (from its 0.8.2), and VersionCheck reads them. The rank shown is their rank in their guild. If the person providing that sister roster is still on an older GuildRoster, the rank stays blank exactly as before.
- Marked compatible with World of Warcraft: Forever. Addons that require VersionCheck (FastGuildInvite, for one) can only load there if VersionCheck itself does. Not yet tried on a Forever client; if you play there and it still shows as out of date, check that LibAceGUIWidgets and Ace3 are also marked for it, because VersionCheck requires both.
Fixed
- A guildmate on your own realm running an older VersionCheck appeared twice in the roster window. Once with their version and once, from the guild list, as "Not seen" — for ever — because the game hands over a same-realm name without its realm and VersionCheck filed it under that shorter spelling. The two are now one row, and the right-click whisper and the update popup name them in full. Guildmates on VersionCheck v1.4.0 or later were never affected, because they introduce themselves by their full name.
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.
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.
You must be logged in to leave a comment.