5dca94a3fc
Manifest-based CDN updater and mod manager for the OctoWoW 1.12.1 client: launcher-owned realmlist, torrent-backed content sync with bundled aria2c, antivirus and Defender exclusion handling, hardware-aware render distance, optional client tweaks and mods, and the in-launcher news feed.
121 lines
3.7 KiB
Markdown
121 lines
3.7 KiB
Markdown
# 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.wtf` with 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)
|
|
|
|
1. Grab `OctoLauncher.exe` (portable) or `OctoLauncher_Installer.exe` from the [Releases](../../releases) page.
|
|
2. Run it and set your WoW client directory when prompted.
|
|
3. 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`:
|
|
```powershell
|
|
winget install Schniz.fnm
|
|
fnm install 20
|
|
fnm default 20
|
|
```
|
|
|
|
Install VS 2022 Build Tools:
|
|
```powershell
|
|
winget install Microsoft.VisualStudio.2022.BuildTools `
|
|
--override "--wait --passive --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.Windows11SDK.22621 --includeRecommended"
|
|
```
|
|
|
|
### Install dependencies
|
|
|
|
```powershell
|
|
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:
|
|
> ```powershell
|
|
> Remove-Item Env:ELECTRON_RUN_AS_NODE
|
|
> ```
|
|
|
|
```powershell
|
|
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
|
|
|
|
```powershell
|
|
Remove-Item Env:ELECTRON_RUN_AS_NODE
|
|
npm run dist
|
|
```
|
|
|
|
Outputs to `dist/`:
|
|
- `OctoLauncher.exe`: portable single-file
|
|
- `OctoLauncher_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.
|
|
|
|
```powershell
|
|
cd server
|
|
npm install
|
|
```
|
|
|
|
Create `server/.env` from `server/.env.example` and set `SOURCE_DIR` to your local WoW client directory, then:
|
|
|
|
```powershell
|
|
npm run dev
|
|
```
|
|
|
|
The server listens on `http://localhost:5000` and serves:
|
|
- `GET /api/file/:version/manifest.json`
|
|
- `GET /client/:version/*`: per-file downloads
|
|
- `GET /api/addons.json`
|
|
|
|
---
|
|
|
|
## Architecture overview
|
|
|
|
Three Vite bundles tied together by tRPC over Electron IPC:
|
|
|
|
- **Main** ([src/main/](src/main/)): Electron main process; owns all filesystem/native work and the tRPC router
|
|
- **Preload** ([src/preload/](src/preload/)): secure IPC bridge via `exposeElectronTRPC()`
|
|
- **Renderer** ([src/renderer/](src/renderer/)): React 18 + Tailwind UI; no direct Node access
|
|
|
|
All cross-process data shapes are Zod schemas in [src/common/schemas.ts](src/common/schemas.ts). All renderer→main calls go through tRPC procedures in [src/main/api/routers/](src/main/api/routers/); never raw `ipcMain.handle`.
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
MIT
|