WoW Emulation Community Hub

Forge Your Own Azeroth.

The premier nexus for WoW emulator developers, coders, learners, and players. Master the core, contribute to open-source, and build the future of private servers.

5+
Emulator Cores
12K+
GitHub Stars
3.4K+
Contributors
20+
Years of History

The Five Core Hubs

Every great private server begins with a core. Explore the foundational emulator projects that power the WoW emulation scene — from legendary legacy code to cutting-edge modern C++.

Est. 2005

MaNGOS

The legendary foundation of WoW emulation — an open-source C++ server application that first proved Azeroth could be rebuilt from scratch, spawning an entire ecosystem of projects.

Enter Hub
Community Fork

CMaNGOS

The continuous, community-driven evolution of classic MaNGOS — meticulously maintained across Vanilla, TBC, and WotLK branches with a relentless focus on blizzlike accuracy.

Enter Hub
High Performance

TrinityCore

High-performance, modern C++20 architecture optimized for stability and extensibility — the dominant framework for WotLK 3.3.5a servers, with a massive scripting database.

Enter Hub
Most Active

AzerothCore

Modular, scalable, and the most actively maintained WoW 3.3.5a emulator — featuring a powerful module system that allows plug-and-play server customization without core modification.

Enter Hub
Bleeding Edge

Retail WoW Scene

The bleeding edge of modern private server development — reverse-engineering current expansion clients, tackling Shadowlands and Dragonflight emulation challenges.

Enter Hub

The Developer Compendium

From zero to compiled server — every guide, snippet, and reference you need to master WoW emulator development lives in this curated compendium.

Getting Started with WoW Emulation

New to WoW emulator development? Start here. This guide walks you through the conceptual architecture of a typical emulator stack — from client packet handling to world simulation — and helps you choose the right core for your goals.

1

Choose Your Emulator Core

Decide which expansion you want to host (Vanilla 1.12.1, TBC 2.4.3, WotLK 3.3.5a, Cataclysm 4.3.4). Each expansion has dedicated core projects with different community sizes and completion levels.

2

Set Up Your Development Environment

Install prerequisites: CMake 3.16+, Boost 1.74+, MySQL 8.0 or MariaDB 10.6+, and a C++20-compatible compiler (GCC 11+, Clang 12+, or MSVC 2022). Use Docker for a reproducible build environment.

3

Clone the Repository & Configure CMake

Fork the upstream repository, clone your fork locally, and run CMake with your desired module flags. Familiarize yourself with the CMakeLists.txt configuration options before your first build.

4

Import the World Database

Download the latest world database SQL dump and execute the import scripts against your MySQL instance. The world DB contains all creature spawns, quest data, game objects, and loot tables.

5

Launch Authserver & Worldserver

Start with the authserver (authentication/realm list), then launch worldserver. Monitor the console output for any missing DBC file errors or database connection failures before connecting a client.

Compiling the Core from Source

Building your own binary gives you full control over compile-time flags, custom patches, and debug symbols. Below is the canonical build sequence for AzerothCore on Ubuntu 22.04 LTS.

build.sh — AzerothCore Ubuntu 22.04 bash
# ─── Install Prerequisites ────────────────────────────────────────────
sudo apt-get install -y \
    cmake make gcc g++ clang \
    libmysqlclient-dev libssl-dev libboost-all-dev \
    libreadline-dev libncurses-dev libace-dev

# ─── Clone Repository ─────────────────────────────────────────────────
git clone https://github.com/azerothcore/azerothcore-wotlk.git
cd azerothcore-wotlk

# ─── Create Build Directory & Configure CMake ─────────────────────────
mkdir build && cd build
cmake .. \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DCMAKE_INSTALL_PREFIX=/opt/azerothcore/ \
    -DTOOLS_BUILD=db-only \
    -DSCRIPTS=static \
    -DMODULES=static

# ─── Compile (use -j$(nproc) to parallelize) ──────────────────────────
make -j$(nproc) && make install

# ─── Verify Binaries ──────────────────────────────────────────────────
ls /opt/azerothcore/bin/
# Expected output: authserver  worldserver  mapextractor  vmap4extractor

Database Architecture & Setup

WoW emulators rely on a multi-database schema. Understanding the separation between auth, characters, and world databases is critical for both setup and custom scripting.

Auth Database

  • Account credentials & bcrypt hashes
  • Realm list & realmflags
  • IP bans & account bans table
  • Account access levels (GM ranks)
  • Battle.net session tokens

Characters Database

  • Player character data & stats
  • Inventory items & bank contents
  • Quest completion states
  • Guild membership & ranks
  • Mail inbox, auction house bids
custom_spell_loot.sql — world database update SQL
-- ─── Custom Spell Loot Template ──────────────────────────────────────────
-- Adds a 0.5% chance drop of Azeroth Dev Token (item 900001)
-- to all creatures using the Arcane Blast scripted spell (spell 36032)
-- Author: DevHub Scripting Team | Patch: 3.3.5a | Date: 2024-11-15

DELETE FROM spell_loot_template WHERE Entry = 36032 AND Item = 900001;

INSERT INTO spell_loot_template
    (Entry, Item, Reference, Chance, QuestRequired, LootMode,
     GroupId, MinCount, MaxCount, Comment)
VALUES
    (36032, 900001, 0, 0.5, 0, 1,
     0, 1, 1, 'Azeroth Dev Token — 0.5% from Arcane Blast');

-- ─── Creature Loot Template Update ───────────────────────────────────────
-- Kel'Thuzad (NPC Entry: 15990) drops the Phylactery Shard at 100%

UPDATE creature_loot_template
SET    Chance = 100.0,
       Comment = 'Guaranteed drop — heroic 25-man only'
WHERE  Entry = 15990
  AND  Item = 47557;

-- ─── Verify Changes ───────────────────────────────────────────────────────
SELECT Entry, Item, Chance, MinCount, MaxCount, Comment
FROM   spell_loot_template
WHERE  Entry = 36032;

C++ Spell Scripting Guide

Custom C++ scripts let you override default server logic with precise, event-driven behavior. Below is a production-quality example of a boss spell script — specifically an arcane overload ability with phased cast logic and creature AI hooks.

spell_arcane_overload.cpp C++20
/*
 * AzerothCore — Custom Spell Script
 * Spell: Arcane Overload (ID: 68019)
 * Boss:  High Arcanist Vex'tara — Nexus (Heroic 10-Man)
 * Author: AzerothDevHub Team
 * License: GPL-2.0-or-later
 */

#include "ScriptMgr.h"
#include "SpellScript.h"
#include "SpellAuras.h"
#include "Unit.h"
#include "Player.h"

// ─── Spell Entry Constants ─────────────────────────────────────────────
constexpr uint32 SPELL_ARCANE_OVERLOAD     = 68019;
constexpr uint32 SPELL_ARCANE_PHASE_SHIFT  = 68020;
constexpr uint32 SPELL_ARCANE_RESONANCE    = 68021;
constexpr float  OVERLOAD_DAMAGE_MULT     = 1.35f;  // Heroic bonus

// ─── SpellScript: Arcane Overload ──────────────────────────────────────
class spell_arcane_overload : public SpellScript
{
    DECLARE_SPELLSCRIPT(spell_arcane_overload);

public:
    /**
     * Validate that all dependent spells exist in the DBC.
     * Prevents crashes if the spell table is incomplete.
     */
    bool Validate(SpellInfo const* /*spellInfo*/) override
    {
        return ValidateSpellInfo({
            SPELL_ARCANE_OVERLOAD,
            SPELL_ARCANE_PHASE_SHIFT,
            SPELL_ARCANE_RESONANCE
        });
    }

    /**
     * OnHit: Scale damage in heroic mode & apply Phase Shift debuff
     * if target is a Player with Arcane Resonance aura active.
     */
    void HandleOnHit()
    {
        Unit* target = GetHitUnit();
        Unit* caster = GetCaster();

        if (!target || !caster)
            return;

        // Scale damage for heroic difficulty
        if (caster->GetMap()->IsHeroic())
        {
            int32 dmg = GetHitDamage();
            SetHitDamage(static_cast<int32>(dmg * OVERLOAD_DAMAGE_MULT));
        }

        // Apply Phase Shift if target already has Arcane Resonance
        if (target->HasAura(SPELL_ARCANE_RESONANCE))
            caster->CastSpell(target, SPELL_ARCANE_PHASE_SHIFT, true);
    }

    void Register() override
    {
        OnHit += SpellHitFn(spell_arcane_overload::HandleOnHit);
    }
};

// ─── Register Script with ScriptMgr ────────────────────────────────────
void AddSC_spell_arcane_overload()
{
    RegisterSpellScript(spell_arcane_overload);
}

Downloads & Releases

Access the latest stable builds, release candidates, and development snapshots for all major WoW emulator cores. Always verify checksums before deploying to production.

Showing 4 projects · Last synced with upstream repositories 2 hours ago · All builds require client data files (MPQ/CASC)

Project Branch / Version Last Updated Status Action
AzerothCore
WotLK 3.3.5a — Modular Architecture
master
2 hours ago
Stable Download
TrinityCore
WotLK 3.3.5a & Master Branch
3.3.5
6 hours ago
Stable Download
CMaNGOS
Vanilla 1.12.1 / TBC 2.4.3 / WotLK
wotlk-dev
1 day ago
RC Download
MaNGOS
Original Legacy Core — Historical
v21.5-beta
3 days ago
Beta Download

Community Forum

Discuss, collaborate, and share your work with thousands of WoW emulation developers, server operators, and passionate community members around the world.

News & Changelogs

Patch notes, project announcements, and release highlights.

MaNGOS CMaNGOS TrinityCore AzerothCore Retail
342
Topics
4,891
Posts
VX
AzerothCore v2.0.0-rc3 Released — Changelog & Known Issues
AR
TrinityCore: CMake minimum version bumped to 3.22 — migration guide

General Chat

Off-topic discussions, community introductions, and dev banter.

1,247
Topics
19,034
Posts
KT
Which expansion had the best dungeon design? (Classic vs. WotLK)
DV
Show your server's custom transmog system — screenshots welcome!

Help Me!

Technical support, compile errors, configuration issues, and debugging help.

2,108
Topics
11,762
Posts
NV
[SOLVED] worldserver crash on startup — libmysql undefined reference
SQ
Spell script not firing — OnHit handler never called in 3.3.5a

Share Your GitHub

Showcase your modules, custom scripts, tools, and open-source contributions.

634
Topics
3,219
Posts
MX
[MODULE] mod-transmog v4.2 — full AC module with MySQL caching
GH
[TOOL] WoW DBC Editor v3 — Supports all expansions through Cataclysm

Private Servers

Server advertisements, rate listings, reviews, and player recruitment.

891
Topics
6,440
Posts
ER
[ADVERTISEMENT] EternalRealm WotLK x1 — 200 players online, fresh start
FP
Looking for staff: Custom RPG server needs C++ dev — paid position

Community Forum Loading...

Paste your Claude embed code in the HTML to activate the live forum.