Windows companion app that automatically syncs your RCLootCouncil_GuildMastery addon data to the GuildMastery web app.
No more copy-pasting JSON exports. Install the app, point it at your WoW folder, paste your API key, and every /reload in-game pushes the latest loot vote sessions to your guild dashboard.
- Silent background sync — watches
WTF/Account/*/SavedVariables/RCLootCouncil_GuildMastery.luaand uploads on change. - Per-account safety — each WoW account folder is tracked independently; switching characters won't skip a sync.
- Manual refresh — one-click resync button if you want to force a push.
- Connection probe — live indicator showing whether the server is reachable and the API key is valid (with the guild name displayed when verified).
- Server-side dedup — the GuildMastery API rejects exports it already has, so duplicate uploads are harmless.
- Auto-start with Windows — optional, toggled in the top bar.
- Live log panel — see exactly what the watcher is doing, in real time.
Grab the latest Windows installer from the Releases page and run it.
The installer puts GuildMastery Sync in your Start menu. First launch:
- Click Parcourir… and select your
World of Warcraftfolder (the one containing_retail_or_classic_). - Paste your API key — generate it from guildmastery.io under Dashboard → API.
- Wait for the green Actif badge. You're done.
From now on, every time you do /reload in-game with the addon loaded, the app catches the file write and pushes the new sessions.
WoW client (addon writes Lua)
│
▼
SavedVariables/RCLootCouncil_GuildMastery.lua
│ (chokidar file watcher)
▼
GuildMastery Sync (Electron app)
│ POST /api/loot-sessions (Bearer <apiKey>)
▼
guildmastery.io
The app extracts the syncPayload field from the addon's SavedVariables, parses it as JSON, hashes it (sha1) to avoid re-uploading identical content, and POSTs it to the GuildMastery API. The server detects duplicates by (timestamp, sessions) and replies with { duplicate: true } if it already knows the payload.
git clone https://github.com/GuildMastery-io/GuildMasterySync.git
cd GuildMasterySync
npm installnpm run devnpm run buildOutput: release/GuildMastery Sync Setup <version>.exe.
| Component | Tech |
|---|---|
| Runtime | Electron 41 |
| UI | React 19 + Mantine 8 + Tabler Icons |
| Bundler | Vite 8 + vite-plugin-electron |
| Installer | electron-builder (NSIS) |
| File watcher | chokidar |
| HTTP client | axios |
| Settings store | electron-store |
GuildMasterySync/
├── electron/
│ ├── main.ts # BrowserWindow, IPC handlers, auto-sync interval
│ ├── preload.ts # Named API exposed to the renderer (no generic IPC passthrough)
│ ├── store.ts # electron-store schema + accessors (apiKey, apiUrl, wowPath, …)
│ └── watcher.ts # chokidar watch, Lua parser, POST to /api/loot-sessions
├── src/
│ ├── App.tsx # Main UI (Mantine)
│ ├── main.tsx # React entrypoint
│ ├── index.css # Global styles
│ └── vite-env.d.ts # `window.api` type declarations
├── public/logo.png
├── index.html
├── package.json
├── vite.config.ts
├── tsconfig.json
└── tsconfig.node.json
- The renderer runs with
nodeIntegration: false,contextIsolation: true,sandbox: true. - The preload exposes a typed, allowlisted API — no generic
ipcRenderer.invokeis reachable from the renderer. - External navigation is denied; clicks on external URLs are routed through
shell.openExternal. - A strict Content-Security-Policy is set in
index.html. - The API key is stored locally in
%APPDATA%\guildmasterysync\config.jsonviaelectron-store. It is never logged. Treat your%APPDATA%folder as you would a password file. - The configured
apiUrlis validated ashttp://orhttps://before any request — invalid URLs cannot be used to exfiltrate the API key.
- Preferred: open an issue on GitHub
- Or join the GuildMastery Discord —
#supportchannel is the fastest way to reach us.
When reporting a bug, the Logs de synchronisation panel at the bottom of the app is your best friend — copy-paste its contents into the issue.
All rights reserved — see LICENSE. The source is published for transparency, reference, and bug reporting. Forks, modifications and redistributions require prior written permission.
Authored by Ged (Uldaman-EU). Built to feed the GuildMastery web app from the RCLootCouncil ecosystem.