The Carnegie Mellon University KGB plays a delightful game called Capture The Flag With Stuff. The game relies on wall-clock time and previously we just used a bunch of stop-watches manually set by hand. That stunk.

What have you done?

We have brought technology to bear. In particular, we use MQTT to dispatch messages about the current game state to subscribers and rely on NTP to keep devices in temporal synchrony. We have hardware devices, based around the ESP8266 and nodemcu, at the teams’ jails within the game, and additionally offer open, anonymous subscription to the data feed.

The devices’ firmware (in Lua) is available here. The device itself, at least for v1, looks like this:

A picture of the CtFwS jail timer device

Because machine-readable messages over MQTT is perhaps not the friendliest thing in the world, we have written several wrappers around the core, provided in addition to the devices themselves.

For player use, there is

The judges primarily interact with the system through the above website’s judge mode. If necessary, beside the webpage source, there are also some utility scripts for speaking the protocol, suitable for use by the head judge.

For the techies, the protocol definitions, server configuration, and some autonomic daemons are available at https://github.com/cmukgb/ctfws-timer-host.


This project lives in the ee part of my website mostly as a historical accident; I put it here because it involved hardware, but there’s very little engineering to be found.

How Can I Help?

All the usual open-source ways: Bug hunting, documentation…

Would you like to write or build another frontend for us? Please feel free to observe the existing clients’ behaviors, but the protocol document should be a complete description of the wire protocol. If you find deficiencies, please advise.