WoW Files Setup sheets
12 / 12
Stable branch WF Core · Northrend Target 3.3.5a

Wrath of the Lich King

Setup sheet · 3.0.2 — 3.3.5

The best-documented setup in emulation. If a guide exists for any branch, it exists for this one, and the module ecosystem assumes you are here.

Source bundle
wf-wotlk-3.3.5a-src.tar.zst
Branch
northrend
Protocol build
3.3.5a · build 12340
Client required
3.3.5a (12340)
Disk
80 GB
Compile time
≈ 40 min

Before you start

Everything below assumes a clean host
  • A 3.3.5a (12340) clientExtraction reads your own legally obtained install. No client files ship with any core.
  • Roughly 80 GB freeExtracted maps, vmaps, and mmaps dwarf the core itself. Check before you start.
  • GCC 12+ · CMake 3.16+ · Boost 1.74+ · MySQL 8.0Install all of it up front — a missing dev package fails several steps later.
  • Ports 3724 · 8085 reachableAuth then world. If only the first is open, players see the realm list and then hang.

Choose a path

Steps rewrite themselves below

Install the toolchain

Everything on this sheet assumes GCC 12+ · CMake 3.16+ · Boost 1.74+ · MySQL 8.0. Install these first — a half-configured toolchain fails three steps later with a confusing error.

bash · ubuntu 24.04
$ sudo apt update && sudo apt install -y git cmake make gcc g++ \
        libmysqlclient-dev libssl-dev libbz2-dev libreadline-dev \
        libncurses-dev libboost-all-dev mysql-server
$ cmake --version && gcc --version   # confirm before continuing

Unpack the repack

A repack carries compiled binaries and a seeded world database in one archive. Fastest route to a running realm, and the one that needs a fresh bundle every time the core moves.

bash · ubuntu 24.04
$ sha256sum -c wf-wotlk-3.3.5a-repack.tar.zst.sha256
$ tar --zstd -xf wf-wotlk-3.3.5a-repack.tar.zst
$ cd wf-wotlk && ls
# bin/  etc/  sql/  tools/

Import the seeded database

The repack's SQL bundle creates all three schemas and fills the world database in one pass. This is the step that takes the longest.

bash · mysql
$ mysql -u root -p < sql/create_databases.sql
$ mysql -u root -p acore_world < sql/wotlk_world.sql
$ mysql -u root -p acore_auth < sql/wotlk_auth.sql
$ mysql -u root -p acore_characters < sql/wotlk_characters.sql

Extract client data

The core needs maps, vmaps, and mmaps generated from a 3.3.5a (12340) client you own. Nothing is downloaded — this reads your install and writes into the server's data directory.

bash · extraction
# run from the client root, not the server directory
$ cd /path/to/client-3.3.5a
$ ~/realm/bin/mapextractor
$ ~/realm/bin/vmap4extractor && ~/realm/bin/vmap4assembler Buildings vmaps
$ ~/realm/bin/mmaps_generator --threads $(nproc)
$ mv maps vmaps mmaps dbc ~/realm/data/
Heads up: The core imports and updates its databases automatically on the first worldserver start.

Point the config at your database

Two files: authserver.conf handles logins, worldserver.conf handles everything else. Copy the .dist versions before editing so you can diff against defaults later.

bash · config
$ cp etc/authserver.conf.dist etc/authserver.conf
$ cp etc/worldserver.conf.dist etc/worldserver.conf
$ $EDITOR etc/worldserver.conf   # see the key table below

Start both servers

authserver first, then worldserver. The world server holds the console — leave it in the foreground the first time so you can watch it load.

bash · launch
$ ./bin/authserver &
$ ./bin/worldserver
# "World initialized in X minutes" means you are up

Create an account and log in

Accounts live in the auth database, not in a config file. Create the first one from the worldserver console, then point the client at your host.

worldserver console
> account create admin <password>
> account set gmlevel admin 3 -1
# then, client side — edit realmlist.wtf
set realmlist 127.0.0.1
Max level: set MaxPlayerLevel = 80 in worldserver.conf to match this era.

Configuration keys

Edit before first launch
KeyValueWhat it does
DataDir
worldserver.conf
"./data"
Where maps, vmaps, mmaps, and DBC live after extraction.
WorldDatabaseInfo
worldserver.conf
"127.0.0.1;3306;wowfiles;<pw>;acore_world"
Semicolon-separated. A wrong password here fails silently as a connection error.
CharacterDatabaseInfo
worldserver.conf
"127.0.0.1;3306;wowfiles;<pw>;acore_characters"
Character state. Back this one up on a schedule.
LoginDatabaseInfo
worldserver.conf
"127.0.0.1;3306;wowfiles;<pw>;acore_auth"
Shared with authserver.conf — both must match.
WorldServerPort
worldserver.conf
8085
Game traffic. Open this on the host firewall.
RealmID
worldserver.conf
1
Must match the id column of your realmlist row.
MaxPlayerLevel
worldserver.conf
80
Era cap for Wrath of the Lich King. Setting this wrong caps characters at the wrong level.
RealmServerPort
authserver.conf
3724
Login traffic. The client connects here first.
realmlist.address
auth database
127.0.0.1
What the client is told to connect to. Use your public IP for remote players, not localhost.
realmlist.gamebuild
auth database
12340
Must match the client build (3.3.5a (12340)) exactly or logins are rejected.
client side
realmlist.wtf
set realmlist 127.0.0.1
Client-side file. Edit it in the client folder, not on the server.

Verify it worked

In order — each one gates the next
  • Auth server acceptsThe client reaches the realm list. If it stalls here, it is port 3724 or the gamebuild column.
  • World loads fullyThe console reports the world initialized with no missing-map warnings.
  • Character enters the worldLogin, create a character, and zone in. Falling through terrain means vmaps failed.
  • Movement is validatedRun, mount, and use a flight path. Rubber-banding points at mmaps, not at latency.

When it goes wrong

The four failures everyone hits
Client hangs after the realm listAuthServer: connection accepted, then silence
The realmlist row points somewhere the client cannot reach. Set address to your public IP, not 127.0.0.1, for anyone outside the host.
Login rejected immediatelywrong gamebuild / version mismatch
The gamebuild column must equal your client build (12340). A one-digit mismatch fails every login.
Characters fall through the worldno vmap data for map N
The vmap pass did not finish or its output never moved into data/vmaps. Rerun the extractor and assembler in order.
Core refuses to boot after a pulldatabase version mismatch
SQL updates were skipped. Apply everything in sql/updates/ in filename order — they are not idempotent out of sequence.

License terms you inherit

Read these before you redistribute
Copyleft obligations

This core carries copyleft terms from its lineage. Anything you distribute travels under the same license, with source.

Network clause

Serving a modified core publicly counts as distribution under the stricter terms. A private realm does not trigger it.

Access terms

Bundles are issued per operator and are not transferable. Do not rehost them or pass them on.

Client files — not licensed here

Maps, DBC, and art stay under the publisher's terms. Extract from a client you own; never redistribute them.

Every era in full

One page per branch, with all deployment paths