Back to articles

Cross-Core Study: AzerothCore, TrinityCore, and MaNGOS Comparison

Run and study multiple open-source cores in isolation to compare behavior, implementations, and features.

wow-emulationdistroboxvmlinuxdockerguide

Cross-Core Study: Running AzerothCore, TrinityCore, and MaNGOS Side-by-Side

  • Identify whether an issue is core-specific or shared.
  • Study how features are implemented across projects and learn from each codebase.
  • Validate fixes by comparing before/after across cores and reuse proven solutions where appropriate.

Port and Realm Isolation Strategy

When running multiple worldservers for comparison, ensure ports and realm entries do not conflict and keep each core's data isolated.

Example ports:

ServiceDefaultAC 1AC 2TCCM
DB33063311331233153316
World80858085808680878088
Auth37243724372537263727
realmlist (DB)80858085808680878088
Client realmlist.wtf37243724372537263727

These values live in each core's worldserver.conf, authserver.conf, and the authentication DB (e.g., acore_auth.realmlist). Match your client realmlist.wtf to the auth port in use (e.g., set realmlist 127.0.0.1:3725).

Keep separate databases and ports per core to avoid accidental cross-talk during tests.

Setup without polluting the host

  • Use containers, VMs, or Distrobox to avoid dependency conflicts and keep host clean.
  • Keep each core isolated: separate DBs, ports, and build directories.

Recommended approaches:

  • Distrobox: lightweight container-like environment that uses your distribution of choice while integrating with the host filesystem. Good for iterative builds and debugging. See https://distrobox.it
  • Full VM: use when you need a completely separate OS image (useful for older builds or different distributions). Manage VMs with a utility like virt-manager: https://virt-manager.org
  • Docker/container: when you want reproducible, shareable environments (CI-friendly).

TrinityCore 3.3.5 (Distrobox)

TrinityCore - Linux Core Installation

Example: create a database user and per-core databases (run inside your DB container or host DB configured for use with containers):

CREATE USER 'trinity'@'%' IDENTIFIED BY 'trinity';

CREATE DATABASE world;
CREATE DATABASE characters;
CREATE DATABASE auth;

GRANT ALL PRIVILEGES ON world.* TO 'trinity'@'%';
GRANT ALL PRIVILEGES ON characters.* TO 'trinity'@'%';
GRANT ALL PRIVILEGES ON auth.* TO 'trinity'@'%';

Initial DB import

mysql -h 127.0.0.1 -P 3315 -u root -p
login with password password
source TDB_full_world_xxxx_2025_xx_xx.sql

CMaNGOS (Ubuntu 22.04 VM)

CMaNGOS Installation Guide

  1. Create an Ubuntu 22.04 VM.
  2. Allow external MySQL connections (bind-address 0.0.0.0) if you need to access the DB from the host.
  3. Restart MySQL and connect from the host or from other isolated environments.

Vanilla MaNGOS (Same VM)

VMaNGOS Wiki

Add a realm entry example:

INSERT INTO realmlist (id, name, address, port, icon, realmflags, timezone, allowedSecurityLevel)
VALUES (1, 'VMaNGOS', '192.168.122.202', 8086, 1, 0, 1, 0);

Known examples to compare

  • City guards "Call for help" behavior across cores: Implemented in VMaNGOS See commit
  • Mammoth accessory mounting logic and edge cases: Handled correctly in CMaNGOS-wotlk See commit

Related Articles

AzerothCore Development Setup (Linux)
A Linux-focused, stock AzerothCore development environment.
AzerothCore Post-Install Setup: Configuration, Accounts, Clients
Post-install setup notes for AzerothCore: useful worldserver config, account workflows, character provisioning, client addons, and client management tools.