Server for WoW
Switch branches/tags
Nothing to show
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
config Send Movement update to players in range (need create object first) Jan 31, 2016
docs Basic ChatManager (handle only joining) Jan 25, 2016
durator Update PyShgck logger usage May 21, 2017
tests Clean a bit SRP tests Jan 5, 2016
.gitignore Update PyShgck logger usage May 21, 2017 Update readme with a video Jan 31, 2016
start.bat Quick start batch file Jan 29, 2016


This is a World of Warcraft tiny server emulator, written in Python, which tries to remain small, clean and understandable. The goal is to handle several player and basic stuff like chat and groups to have some fun with old school exploration techniques.

I'll repeat that again: it is a TINY emulator, which means that it is not meant for serious use (you shouldn't run a serious private server anyway). There are very few sanity checks beside basic auth, and almost nothing that a client wouldn't do is checked for. It is also not meant to be an efficient implementation. It is in Python, and nothing is done to circumvent the GIL. The threaded connections use locks pretty much anywhere because I didn't want to do a full-fledged concurrency system, and I'm not even implying that I could do that correctly. It would mean that I have to look in my reading notes about the readers-writers problems and stuff, and these notes are almost unreadable.

Use it to have fun exploring with a few friends, that's all.




  • Python 3.4+
  • MySQL
  • Peewee, the Python ORM used
  • A Python MySQL driver
  • PyShgck

Python 3.4+

Get that from their website.


Get a community package from their website, anything slightly recent should be fine. Once the MySQL server is running, you need to setup a database and an account to access this database.

Quick MySQL database setup:

  • CREATE DATABASE durator;
  • CREATE USER 'durator'@'%' IDENTIFIED BY 'durator'
  • GRANT ALL PRIVILEGES ON durator.* TO 'durator'@'%' IDENTIFIED BY 'durator';

Feel free to use other credentials (but update the database code configuration), and to narrow the hostname to something more private than a full wildcard.


Available in PyPI:

pip install peewee

Python MySQL driver

You only need one of them, preferably PyMySQL because that's the one I use, but both are available in PyPI:

pip install pymysql
# OR
pip install mysqldb


Grab this tag and install it with the setup batch file.


Configure the database and create an account with the database client

cd DuratorEmu
python3 -m durator.main db
# use the commands 'install' and 'account'

Then just use start.bat, or manually start the login and world servers in different consoles:

python3 -m durator.main login
python3 -m durator.main world


Some related projects and documentation that I used, first for Vanilla (mostly 1.12):

More recent but still interesting sources:

Also, thanks to #modcraft for being nice folks :]