WoW Toolbox
WoW Toolbox is a commercial desktop application for World of Warcraft 3.3.5 private-server developers, designed, built and operated solo since June 2025. It replaces scattered command-line tools and hand-written SQL with 30 visual editors for DBC data, spells, talents, items, quests, NPCs, factions, achievements and more, plus 3D map and M2 model viewers, working against TrinityCore or AzerothCore with automatic schema detection.
As of August 2026 it has 466 registered accounts, paying subscribers across three Stripe tiers, and 52 signed releases (v1.0.62) shipped with in-app auto-updates over roughly 2,800 commits.
The renderer is ~71k lines of TypeScript: React 19, Redux Toolkit for 50k+ record datasets, three.js with React Three Fiber for map and model viewports, Pixi for 2D editors, and Tailwind. The shell is Tauri 2 (~30k lines of Rust) that links a ~77k-line Rust core directly, so DBC parsing, MPQ access, M2/WMO/ADT decoding, MySQL and SQL generation run as plain function calls with no FFI or serialisation boundary. Terrain and model geometry stream to the renderer over a Rust-hosted WebSocket because IPC serialisation was the bottleneck.
The app shipped on Electron until August 2026. All 541 IPC channels were ported to Rust behind a hand-owned, test-guarded ABI (window.toolboxAPI), so the renderer shipped unchanged, and the encrypted settings stores are read and written in place in their original format so existing installs carry over without a migration.
Integrated LLM helpers draft spell names, item descriptions, NPC dialogue and lore inside the relevant editors, with suggestions reviewed before they are written back. Supabase auth with role-based entitlements drives the Stripe subscriptions, Hocuspocus/Yjs powers real-time collaborative editing, and releases are signed and published through GitHub with an in-app updater.
Three views of the same system
Solo-built desktop platform: React 19 renderer, Tauri 2 shell, Rust core linked straight in. Same architecture at three depths. Start glanceable, drill in as far as you want.
Switch views 1 2 3
What's actually inside
- Registered accounts
- 466
- Signed releases
- 52
- Current version
- v1.0.62
- Commits
- ~2,800
Paying subscribers across three Stripe tiers, in-app auto-updates, changelog, community content and issue reporting. Built and operated solo since June 2025; numbers as of August 2026.
Renderer (Vite + React 19) never touches the OS or native code directly. Every call goes
through window.toolboxAPI, a hand-owned, test-guarded ABI of 33 namespaces and 541 channels, dispatched into a Tauri 2 shell written in
Rust. The shell links the Rust core as a plain crate, so DBC parsing, MPQ access and
M2/WMO/ADT decoding are function calls: no napi, no serialisation boundary.
The app shipped on Electron until August 2026. All 541 IPC channels were ported to Rust behind that same ABI, so the renderer shipped unchanged. Installer went from ~130 MB to ~50 MB and the Node main process with its four worker isolates collapsed into Rust threads.
DBC parse + cache: ~50 ms in Rust vs ~2.5 s in JS, across ~50 DBC parsers running off the UI thread.
Delta auto-save with WAL: ~5–15 ms vs ~700–800 ms for the whole-file roundtrip. The Rust core writes a write-ahead log, replays on crash and flushes batched diffs.
Map geometry bypasses IPC entirely. Terrain and model data stream to the renderer over a WebSocket hosted in Rust, because IPC serialisation was the bottleneck.
Profiled before optimizing. The JS DBC reader was what blocked 50k-record table loads, not the renderer.
Per-user Supabase auth + role-based entitlements drive the Stripe subscription tiers, and
Hocuspocus/Yjs powers real-time collaborative editing. Direct MySQL profiles connect to
game-server schemas with TrinityCore / AzerothCore auto-detected from characters + world table fingerprints. Credentials and profiles live in
OS-keychain-encrypted stores that Rust reads and writes in place, byte-compatible with the
Electron-era files, so existing installs carried over without a migration.
- Editors
- 30
- Feature folders
- 41
- TS renderer
- ~71k LOC
- Rust core
- ~77k LOC
- Rust shell
- ~30k LOC
- IPC channels
- 541
State split across Redux Toolkit (cached records), React Context (auth / admin / notifications), and React Query (server cache, 5 min stale / 30 min cache).