OctoLauncher
Desktop launcher for the OctoWoW (World of Warcraft 1.12.1 private server) client. Built with Electron, React, and tRPC.
What it does:
- Downloads and patches the OctoWoW game client via a manifest-based CDN updater
- Rewrites
Config.wtfwith the correct realm/patch-list on every launch - Optionally applies binary tweaks to
WoW.exe(FOV, far-clip, large-address flag, etc.) - Injects client mods (VanillaFixes, DXVK, nampower, etc.) via a DLL chainloader
- Manages git-based addon installations
- Self-updates via NSIS
Quick start (players)
- Grab
OctoLauncher.exe(portable) orOctoLauncher_Installer.exefrom the Releases page. - Run it and set your WoW client directory when prompted.
- Click Verify to download any missing game files, then Play.
No server configuration needed — the launcher connects to octowow.st by default.
Building from source
Prerequisites
| Requirement | Version | Notes |
|---|---|---|
| Node.js | 20 LTS | Node 22+ breaks dll-inject native bindings — use Node 20 |
| VS 2022 Build Tools | C++ workload + Win SDK | node-gyp v10 only detects VS2017–2022 |
| Python | 3.x | Required by node-gyp |
Install Node 20 with fnm:
winget install Schniz.fnm
fnm install 20
fnm default 20
Install VS 2022 Build Tools:
winget install Microsoft.VisualStudio.2022.BuildTools `
--override "--wait --passive --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.Windows11SDK.22621 --includeRecommended"
Install dependencies
npm install
postinstall rebuilds the native modules (dll-inject, stormlib-node) against the Electron ABI — expect C++ compiler output.
Run in development
VSCode users: The integrated terminal sets
ELECTRON_RUN_AS_NODE=1, which crashes Electron. Unset it first:Remove-Item Env:ELECTRON_RUN_AS_NODE
npm run dev
Opens the app in a hot-reloading Electron window. The dev build points to http://localhost:5000 by default — create a .env file from .env.example if you want to run against a local server, otherwise it falls back to https://octowow.st.
Build for distribution
Remove-Item Env:ELECTRON_RUN_AS_NODE
npm run dist
Outputs to dist/:
OctoLauncher.exe— portable single-fileOctoLauncher_Installer.exe— NSIS installer
The production build uses .env.production (committed) which points to https://octowow.st. No .env file needed.
Running the dev backend
The server/ subdirectory is a standalone Express server that simulates the production CDN for local development. It is not bundled into the Electron app.
cd server
npm install
Create server/.env from server/.env.example and set SOURCE_DIR to your local WoW client directory, then:
npm run dev
The server listens on http://localhost:5000 and serves:
GET /api/file/:version/manifest.jsonGET /client/:version/*— per-file downloadsGET /api/addons.json
Architecture overview
Three Vite bundles tied together by tRPC over Electron IPC:
- Main (src/main/) — Electron main process; owns all filesystem/native work and the tRPC router
- Preload (src/preload/) — secure IPC bridge via
exposeElectronTRPC() - Renderer (src/renderer/) — React 18 + Tailwind UI; no direct Node access
All cross-process data shapes are Zod schemas in src/common/schemas.ts. All renderer→main calls go through tRPC procedures in src/main/api/routers/ — never raw ipcMain.handle.
License
MIT