About Me

I am a programmer and post-graduate computer science student at the Oxford University Computing Laboratory in Oxford, United Kingdom. I have been working with computers from a young age, like many programmers and computer scientists of my age. After developing an affinity for World of Warcraft in November, I've worked on several addons and addon libraries that are used by hundreds of thousands of World of Warcraft players all over the world. I have also had the opportunity to work on three different books about writing addons for World of Warcraft. When I'm not working on "computer" things, I spend time taking photos and spending time with my friends and family.

World of Warcraft Addons

Since 2004, I have been involved in several addon projects for World of Warcraft. The following are a sample of these probjects.


Dongle is a minimal addon framework that tries to provide a set of components that are necessary for the bulk of addons, without trying to provide a full-featured abstraction of the World of Warcraft API. This is accomplished through a pseudo-object-oriented approach, allowing you to group your addons' functionality into a single Lua table if you choose. This library was instrumental in the development of the embedded library framework used widely in World of Warcraft, and was developed using a unit testing harness and framework.


LightHeaded is a very simple addon that displays quest information and comments from Wowhead in-game, eliminating the need to Alt-Tab when you get stuck on a quest. Since there is no network access in World of Warcraft, this is accomplished through a series of load-on-demand addons that ensure data is only loaded when explicitly required, with an incredibly light footprint by default.

LightHeaded window


TomTom is a navigation assistant in World of Warcraft, allowing you to set waypoints and maintain a consistent heading in the right direction. By itself, TomTom simply provides world coordinate information, and a system for setting/clearing and navigating to waypoints. Addons can use TomTom for more advanced navigation, leading the player along a path to reach a final destination.

TomTom crazy arrow TomTom waypoints


Clique is one of least noticed, but most inflential World of Warcraft addons. It enables a drastically different playstyle for certain players, enabling a mode called "click-casting" on character's unit frames within the game. Normally when trying to cast a spell on a player you must choose the spell and then choose the target for the spell. Alternatively, you can target the recipient of the spell and then perform the spellcast. Clique allows you to do both of these in a single action, by specifying more complex click-bindings. For example, you can set shift-click on your unit frames to perform a "Flash Heal" on the character on which you have clicked.

This sort of playstyle is not possible by default in World of Warcraft, and Clique helps to unlock the power of the addon system to enable it. Configuration is a very simple process and allows the player to customize their bindings in an intuitive way. Unlike some other solutions, Clique allows you to use click-casting on any unit frames, allowing the player to customize their information to be displayed however they'd like.


WowLua is an interactive Lua interpreter and in-game scripting environment for within World of Warcraft. Addon authors find themselves tweaking bits of code and constantly having to reload the user interface in order to test their changes. WowLua allows the developer to save, edit, and run simple scripts with syntax highlighting and automatic indentation. For those who instead wish to bits of code in an interactive command-line interpreter, WowLua provides this feature as well.

WowLua script editor and interpreter

Open Source Work

Before (and since) World of Warcraft, I have been involved in a number of open source projects. Only the larger more established projects are listed on this page and in the projects section of the main page.

tnt - AOL instant messaging for emacs

Before moving to vim as my default editing environment, I was involved in the revitalisation of tnt, an AOL Instant Messenger client for Emacs. Written entirely in elisp, it was an interesting departure from the other projects I have worked on. In the early stages we were responsible for implementing away message support, better buddy list support, pounce messages and other handy features. Although I no longer use this software, it continues to function (albeit with the occasional quirk due to different emacs environments and implementations).

Sputnik - An extensible wiki engine in Lua

Sputnik is a content management system designed for extensibility. Although it functions out of the box as a wiki, it can easily be customized and extended to fit any particular need. Sputnik is used as the software that drives http://wowprogramming.com and more information. Each aspect of the site is a different type of "Node" in sputnik terminology so they function in different ways. Although the documentation for Sputnik is somewhat lacking at the moment, we try to provide as much support as possible over the mailing list, which can be found on the project page.

go-luapatterns - Lua pattern matching in Go!

go-luapatterns is a library for the Go! programming language that provides support for Lua pattern matching on both strings and byte arrays. It is mainly a function-by-function port of the original C code from the Lua 5.1.4 distribution, altered to be written in an idiomatic "Go" style.

Commercial Work

I have been involved in the production of three books about writing addons for World of Warcraft, all published by John Wiley & Sons.

Hacking World of Warcraft

Hacking World of Warcraft
Hacking World of Warcraft is an introduction to the addon system in World of Warcraft. This book guides the reader through the basics of what an addon is, and what addons can do in World of Warcraft. It follows by showing some of the different categories of addons, and gives some examples from each. Finally, this book walks the reader through creating a simple working addon for World of Warcraft, and finally providing a reference manual for the macro system. Although the material in this book is somewhat out-of-date it can stil be a useful resource for someone who is unfamiliar with the addon system.

World of Warcraft Programming: a Guide and Reference for Creating WoW Addons

World of Warcraft Programming
This epically-sized book has an epically-sized title to match. This is the bestselling programming book for writing addons for World of Warcraft. This book has been presented in two editions with the first (green cover) being published in 2008 and the updated second edition arriving in February of 2010. This book is a one-stop resource for all things related to World of Warcraft addons. Taking the reader first through an introduction to Lua and XML, the reader then works their way through the in-depth anatomy of an addon by creating a large non-trivial addon called BagBuddy. The third section of the book introduces the reader to some of the more advanced techniques used in writing addons. The final section is a comprehensive reference for the World of Warcraft API. This printed reference allows you to easily scan functions by category or name in order to find the right function to accomplish something.

Personal Life

I grew up in Syracuse, NY and went to school at Syracuse University for my BSc and MSc in Computer Science. While there I worked for the Division of Student affairs as a web developer, graduate assistant and finally as a computing consultant for the division. When I graduated I went to work for Anheuser-Busch, where I worked in the brewing department as a System Engineer providing support for process systems.

Currently I am a DPhil/PhD student at the Oxford University Computing Laboratory. I am currently researching software engineering methods and designs in systems-level concurrent programming under Bernard Sufrin and Michael Spivey. During my studies I also serve as a Teaching Assistant within the lab, giving me an opportunity to instruct and assist students with their practical assignments and other obligations.




James N. Whitehead II is an author, computer scientist who is currently studying for his DPhil/PhD at the Oxford University Computing Laboratory. This blog is a collection of his thoughts, projects, snippets, photos and any other bits that come along.