# azerothcore-wotlk: a C++ World of Warcraft server where the module system is the point

> Eight CI pipelines, a CMake and Nix build, a Docker stack on MySQL 8.4, and an explicit rule that every change passes CI before it reaches master.

**azerothcore/azerothcore-wotlk** — Complete Open Source and Modular solution for MMO

- Repository: https://github.com/azerothcore/azerothcore-wotlk
- Website: http://www.azerothcore.org
- Stars: 9,023 · Forks: 3,866
- Language: C++
- License: GPL-2.0
- Published: 2026-10-06 · Updated: 2026-10-06 · Language: en
- Canonical page: https://hysenlabs.com/projects/azerothcore-azerothcore-wotlk

## What the project is actually for

AzerothCore describes itself as an open source game server application and framework for hosting massively multiplayer online role playing games, based on World of Warcraft and seeking to recreate the gameplay experience of the original game from patch 3.3.5a. That is the Cataclysm Classic client, and being explicit about the patch matters, because every mechanic, spell and dungeon balance in this codebase is measured against one specific version of a game that is old enough to have its own anniversaries.

The lineage is stated openly. The original code is based on MaNGOS, TrinityCore and SunwellCore, and the project itself began in 2016 from SunwellCore. The README is candid about what that costs in history, noting that SunwellCore was published without any git history, so there are no credits on record for contributors before 2016. An AUTHORS file covers everything since.

There is a third use stated that is unusual for this category. Alongside hosting private servers, the project says it can serve as a learning resource for developers who want to understand how WoW servers work, how MMORPGs are structured, how game server emulators are created, or to improve their C++ and SQL. For a codebase that implements a real network protocol, a real persistence layer and a real scheduler, that is a fair claim. It is written in C++ and released under the GNU GPL v2, with 8,951 stars and 3,807 forks.

## Four stated priorities and how they are enforced

The philosophy section is short and worth reading closely, because it explains the shape of everything else in the repository. Four priorities are listed.

Stability is first, and the mechanism is named: all changes must pass the CIs before being merged into the master branch. That is a policy stated in the README rather than an aspiration, and the badge row above it is the evidence. Second is blizzlike content, where the project says it strives to make all in-game content match Blizzard's behaviour and therefore holds a high standard for the fixes being made. That word is doing real work, because it means a submitted module that is faster than retail but behaves differently can be turned down.

Third is customization through modules, which the README describes as easy, and fourth is community driven, with forums, Discord and other platforms named as the support channels.

The priorities have a visible cost. The project carries 2,453 open issues, which is an extraordinary number and mostly reflects scale rather than neglect. When your merge bar is CI plus fidelity to a reference implementation, contributions get held, and the queue grows. The last push was on 2026-09-21 and the repository is not archived, so the queue is being worked rather than abandoned.

## Modules as the extension mechanism

AzerothCore is described as designed to be highly modular, allowing developers to extend and customize the game or create unique gameplay experiences, with flexibility for adding custom features, content and modifications. The README says the project already has a lot of community-made modules and points to a Module Catalogue on the project site.

The practical consequence is that the core stays small and the gameplay lives elsewhere. If you want different quest behaviour, a new spell mechanic, or a custom endgame scenario, the intended path is a module directory under modules rather than a diff against the server source. That has two benefits. Your changes survive a core update, because the core is something you pull and the module is something you own. And the community catalogue becomes a source of prior art, since somebody has probably already solved the problem you are about to start on.

The repository tree backs this up. There is a modules directory alongside src, and a separate core-modules-build CI workflow, which means module compilation is verified independently of the core. That badge is distinct from the two Linux build badges, so a module that fails to compile is caught as its own class of failure rather than as a core regression.

## Nine CI workflows for a codebase this size

The build status section is the most informative part of the README and it is worth reading as a list of answers to questions you would otherwise have to ask.

Two Linux builds run in parallel, one named nopch and one pch, which is precompiled headers. Having both means the fast path is tested alongside the slow one, so a module that only compiles without precompiled headers does not slip through. Then there are dedicated workflows for core modules, Windows, macOS, Docker, tools and a dashboard. Nine badges, nine jobs.

The rest of the tree explains the rest. There is a CMakeLists.txt and a PreLoad.cmake at the root, so the build is CMake rather than autotools. There is a flake.nix and a flake.lock for reproducible Nix environments, and a .devcontainer directory so a contributor can work inside a prepared container. A .vscode directory and a .claude directory sit next to .agents and an AGENTS.md, alongside CLAUDE.md, which is how the project supports several coding assistants at once. acore.sh and install.sh are the shell entry points, docker-compose.yml is the container path, and an e2e directory suggests end-to-end tests exist as a separate concern.

The tools and data directories round it out. This is a repository that expects different platforms, different build strategies and different consumers, and it pays the CI cost to prove all of them still work on every merge.

## The Docker stack and the three databases behind it

The committed docker-compose.yml shows what a running installation looks like in practice, and the comment at the top of the file sets the rule for anyone editing it: do not change this file, create a docker-compose.override.yml and make changes there instead. The file starts the server with a single documented command.

```bash
docker compose up -d --build
```

There are at least two services visible. ac-database runs mysql:8.4 on a shared network, publishes a port that defaults to 3306 through a variable, persists to a volume, and has a healthcheck that runs SHOW DATABASES every five seconds with up to forty retries before giving up. That healthcheck is not decoration, because the second service depends on it. ac-db-import is the build step that populates the databases, built from a target called db-import in apps/docker/Dockerfile, tagged master by default, and configured with three database connection strings.

Those three strings are the real insight into the data model: acore_auth, acore_world and acore_characters. Authentication is separate from world data, which holds the static game content, and character data holds per-player state. Anyone writing SQL for this server is writing against one of three schemas and needs to know which. The import service also takes a data directory and a logs directory, and its volumes mount from env/dist/etc and env/dist/logs, with the logs mount marked delegated for macOS filesystem performance.

## Releases, and why the wiki beats the archive

The releases page is unusual and slightly awkward, which is itself informative. The most recent entry is tagged Latest, named Install latest AzerothCore, published on 2024-11-16, and its entire body is a warning not to download the ZIP files from that page, with instructions to follow the official installation procedure on the project wiki instead.

Underneath sit v4.0.0 from 2021-10-20 with an empty body, and v3.0.0 from 2021-01-25, whose release notes say to always use the latest master branch, not to download source from the release, and to follow the official guide. It links to upgrade instructions for administrators moving an existing server from pre-3.0.0 to latest master, then thanks a long list of named contributors.

The pattern across all three is consistent: version tags exist for history, but the recommended artifact is the master branch installed through the documented procedure. A reader looking for a download link in a releases list will find something that actively tells them not to use it.

On the legal question the README is unambiguous, and it is worth reading in full rather than paraphrasing. AzerothCore is not an official Blizzard Entertainment product, is not affiliated with or endorsed by World of Warcraft or Blizzard Entertainment, does not in any case sponsor or support illegal public servers, and the GPL v2 release covers the source code. The README also asks explicitly that the project not be used to run an illegal public server as opposed to testing and learning.

## Conclusion

AzerothCore is a serious software project that happens to be a game server, and the evidence is in the repository rather than the README. Nine CI workflows covering Linux builds with and without precompiled headers, module builds, Windows, macOS, Docker, tools and the dashboard, plus a CMake build, a Nix flake, a devcontainer and an end-to-end directory, is the setup of a codebase with hundreds of contributors rather than a hobby. The module system is what makes it reusable, since anything from a spell to a whole quest line is meant to arrive as a module rather than a patch to the core. The cost is real and worth naming before you start: 2,453 open issues, a build that needs a MySQL instance and a populated world database before a client will connect, and content the project describes as blizzlike with a high standard for fixes, which is a promise of fidelity rather than a shortcut. Use the installation wiki rather than any release archive, and pick a module from the catalogue before writing code of your own.

## FAQ

### What is AzerothCore used for?

AzerothCore is a C++ game server application and framework for hosting World of Warcraft 3.3.5a private servers, recreating the gameplay of the original patch. The README also describes it as a learning resource for understanding how WoW servers and MMORPGs are structured, and for improving C++ and SQL skills.

### Is AzerothCore legal?

The source is released under the GNU GPL v2, so the code itself is free to use and modify. The README states that AzerothCore is not an official Blizzard product, is not affiliated with or endorsed by Blizzard, and does not support illegal public servers, asking that it be used for testing and learning rather than for operating one.

### Is AzerothCore blizzlike?

Blizzlike fidelity is one of four stated priorities, and the README says the project strives to make all in-game content match Blizzard's behaviour, holding a high standard for the fixes being made. That is also part of why the project carries 2,453 open issues, since contributions are held to that reference.

### Is AzerothCore difficult to set up?

The README does not give inline steps and instead points to a detailed installation page on the project wiki, and the releases page tells you not to download ZIP files and to follow that procedure. The Docker path is the most self-contained, using docker compose up -d --build against MySQL 8.4 with separate auth, world and characters databases.

## Sources

- [azerothcore/azerothcore-wotlk on GitHub](https://github.com/azerothcore/azerothcore-wotlk)
- [License: GPL-2.0](https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE)
- [Project website](http://www.azerothcore.org)
- [README](https://github.com/azerothcore/azerothcore-wotlk/blob/master/README.md)
- [Releases](https://github.com/azerothcore/azerothcore-wotlk/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/azerothcore-azerothcore-wotlk
