Keep WoWthing up to date without opening a browser.
A small desktop app that uploads your WoWthing Collector addon data each time you log out.
Download ยท Getting started ยท Screenshots ยท Development
WoWthing tracks your characters, collections and progress across every
World of Warcraft account you own. Its WoWthing Collector
addon records that data in your game's SavedVariables whenever a character logs out or reloads the UI.
Wowthing Sync watches those files and uploads each new version to WoWthing for you.
flowchart LR
A["๐ฎ World of Warcraft<br/>WoWthing Collector addon"] -- "log out or /reload" --> B["๐ WoWthing_Collector.lua<br/>one per account"]
B -- "change detected" --> C["๐ Wowthing Sync"]
C -- "upload with your API key" --> D["๐ wowthing.org"]
- Set it and forget it. Runs in the system tray and can start when you sign in. Changes are uploaded a moment after the game finishes writing them.
- Every account at a glance. See when each account last uploaded. If one fails, the error and a Retry button appear on that account's row.
- Sync Now, from anywhere. Trigger an upload from the window or the tray menu, which also shows the current sync status.
- One notification per sync. Optional desktop notifications summarize the whole sync, for example "Collector data uploaded for 3 accounts".
- Secure by default. Your API key is stored in your system's credential store (Keychain, Windows Credential Manager or Secret Service), never in a plain-text file.
- Stays current. Signed automatic updates, plus light and dark themes that follow your system.
| Platform | Download |
|---|---|
| macOS (Apple Silicon) | Download for Apple Silicon |
| macOS (Intel) | Download for Intel Macs |
| Windows 10/11 (x64) | Download for Windows |
| Linux (x64, including Steam Deck) | Download the AppImage |
Each link downloads the latest build for that platform. All releases, including older versions, are on the Releases page. Once installed, the app updates itself.
Update checks run at startup and every six hours; you can check manually from the tray menu at any time. File changes trigger background syncing, with periodic scans as a fallback. Hiding the window pauses display-only timestamp updates while syncing continues.
Note
On Linux, the app stores your API key with the Secret Service (GNOME Keyring, KWallet and similar), so a keyring must be running. Most desktop environments, including Steam Deck desktop mode, provide one.
On first launch, the Status page guides you through connecting your account and game folder, marking each step complete as you save it in Settings. Background update checks that cannot connect stay quiet; their status is available under Settings โ About. Manual update checks show a retry and optional technical details.
- Install the addon. Add WoWthing Collector to your retail game with your addon manager of choice.
- Copy your API key. Sign in to wowthing.org, open Settings โ Account and copy your API key.
- Connect the app. In Wowthing Sync, open Settings, paste the key and select Save API Key.
- Pick your game folder. Select Use Default Location, or Choose Folder and pick the
_retail_folder inside your World of Warcraft installation. - Play. Log out of a character (or
/reload). Its account shows up under Status with an upload time a few seconds later.
Where is my _retail_ folder?
| System | Default location |
|---|---|
| macOS | /Applications/World of Warcraft/_retail_ |
| Windows | C:\Program Files (x86)\World of Warcraft\_retail_ |
| Linux (Wine or Lutris) | ~/.wine/drive_c/Program Files (x86)/World of Warcraft/_retail_ or ~/Games/world-of-warcraft/drive_c/Program Files (x86)/World of Warcraft/_retail_ |
The folder you pick must contain WTF/Account. Use Default Location checks these paths for you.
First launch: account and game folder setup
Status: when each account last uploaded |
Failures: shown on the affected account, with Retry |
Settings: API key, game folder, notifications and launch at login |
- The app reads only
WTF/Account/<account>/SavedVariables/WoWthing_Collector.luafiles inside the folder you choose. It doesn't read other addons' data or anything outside that folder. - Collector data is sent only to wowthing.org, using your API key.
- The API key is kept in your operating system's credential store and is never shown in the app or written to logs.
- Updates are signed and verified before they're installed.
| Problem | What to try |
|---|---|
| An account shows Failed ยท HTTP 401 | Your API key was rejected. Copy it from WoWthing again and save it in Settings. |
| "No collector files found" | Make sure the WoWthing Collector addon is enabled, log out of a character once, then choose the _retail_ folder again. |
| No desktop notifications | Turn on Desktop notifications in Settings, then allow notifications for Wowthing Sync in your system settings. |
| Credential store errors on Linux | Start your keyring (for example GNOME Keyring or KWallet), then select Retry Sync. |
Still stuck? Open an issue and describe what you see in the app.
Wowthing Sync is built with Tauri 2 (Rust) and Nuxt 4 with Nuxt UI (Vue and TypeScript). Rust handles everything that touches the operating system: watching files, uploading, the credential store, autostart and notifications. Vue only renders the interface.
- Node.js 22.22.3+, 24.15.0+ or 26+ (CI uses 22.22.3)
- Rust 1.97.1, installed automatically from
rust-toolchain.tomlbyrustup - The Tauri system dependencies for your operating system
git clone https://github.com/calebsmithdev/wowthing-sync.git
cd wowthing-sync
npm ci --prefix apps/desktop
npm run --prefix apps/desktop tauri:devtauri:dev starts a local Nuxt dev server on port 3015 (hot reload on 3016) and opens the app with a development Content Security Policy.
If that port is in use, set TAURI_DEV_PORT to a free one.
Warning
The development app uses your real preferences and OS credential store. Use the test commands below, which run against isolated fixtures, instead of the normal app when you verify changes.
apps/desktop/
โโโ src/ # Nuxt app: pages, components, composables
โโโ src-tauri/src/ # Rust: sync service, settings, credentials, tray
โโโ tests/ # Vitest unit tests, Playwright smoke, native test scripts
marketing/ # Download site (GitHub Pages)
scripts/ # Dev, test, packaging and release tooling
docs/ # CI validation and dependency notes
# Frontend
npm run --prefix apps/desktop lint
npm run --prefix apps/desktop typecheck
npm run --prefix apps/desktop test:unit
# Rust (build the frontend first; the native app embeds it)
npm run --prefix apps/desktop generate
cargo fmt --all -- --check
cargo clippy --locked --all-targets -- -D warnings
cargo test --locked
# The UI in Chromium, and in your system's real webview
cd apps/desktop
npx playwright install chromium
npm run test:e2e
npm run test:native # on Linux: xvfb-run -a npm run test:nativeThe browser and native smoke tests use synthetic fixtures. They never touch your settings or credentials, and never upload anything.
What the test layers cover
test:e2eserves the built frontend with a strict CSP and a fake Tauri bridge, then exercises settings, sync status, failures and update states in Chromium.test:nativebuilds the app with thesmoke-testfeature, which replaces all native services with fixtures. It runs the real webview (WKWebView, WebView2 or WebKitGTK) with the production CSP.test:integrationdrives the real sync worker, settings commands, window lifecycle and updater cleanup against a local HTTP server.cargo testcovers file discovery and path-safety checks, the upload queue and retries, settings persistence, and a real sync worker running against a local server.
CI runs all of these on macOS (Apple Silicon and Intel), Windows and Linux. See docs/ci-validation.md for the full matrix, and AGENTS.md for the command catalog and security boundaries.
# A debug build for your current OS (no signing credentials needed)
npm run --prefix apps/desktop tauri -- build --debug --no-bundle -- --locked
# An unsigned macOS .app bundle
npm run --prefix apps/desktop tauri -- build --debug --bundles app --no-sign \
--config '{"bundle":{"createUpdaterArtifacts":false}}' -- --lockedThe app version comes from apps/desktop/src-tauri/Cargo.toml. Releases are built, signed and drafted by the
Publish Release workflow. scripts/clean-build-artifacts.sh --dry-run previews
what the cleanup script would delete to reclaim disk space.
Download site
The download links above come from the Nuxt site in marketing/:
npm ci --prefix marketing
npm run generate --prefix marketing # outputs marketing/.output/publicIt is deployed by the Deploy to GitHub Pages workflow.
Issues and pull requests are welcome. Before opening a PR, run the checks under Testing, and include a screenshot if you changed the UI. AGENTS.md describes the conventions this repository follows.
Released under the GNU GPL v3.0. Built by Failcookie. Powered by WoWthing.
Wowthing Sync is a community project and is not affiliated with or endorsed by Blizzard Entertainment. World of Warcraft is a trademark of Blizzard Entertainment, Inc.