Skip to content
Pandemic cooperative board game (client / server in Javascript)
Branch: master
Clone or download
Pull request Compare This branch is 42 commits ahead of gertvv:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Pandemic Build Status

Implementation of the Pandemic cooperative board game in node.js and AngularJS. The point was mainly to learn more about Angular, but so far the server side has received more attention, and the UI is more of a barely functional stub.

There is also a Perl implementation of Pandemic that appears to be more feature complete.


This implementation of Pandemic is copyright 2013-2014 by Gert van Valkenhoef. It is free software under the GNU GPL v3. See LICENSE.txt for more information.


sudo apt-get install nodejs npm
sudo ln -s /usr/bin/nodejs /usr/local/bin/node # for bower
sudo npm install -g bower
bower install
npm install


node server

Point your browser at http://localhost:8080 -- note that you need two players to create a game.


Run tests using:

jasmine-node spec

Make sure you have jasmine-node installed:

sudo npm install -g jasmine-node

Tests are also run on TravisCI


Gameplay features:

  • special events [x] resilient population [x] government grant [x] one quiet night [x] airlift [ ] forecast
  • share knowledge UI
  • make ui-sortable work on touch devices;
  • keep private information private (e.g. hand cards)
  • more input sanitation (e.g. location / player IDs in action)
  • move research centers when they run out
  • ensure nothing else can happen during approval phase
  • give reasons for action rejection
  • display of raw IDs / JSON / etc. must be eliminated

Other features:

  • the UI needs a LOT of work
  • also display names of offline players that have a role in game
  • display more information about ongoing games (status, active players)
  • live update list of ongoing games
  • remove stale games after a time-out
  • close websockets after a time-out, with dynamic re-opening as needed
  • for ended games, serve the state over plain HTTP instead


  • Refactor the horrible Game.act() blob and simplify tests
  • Factor out action preconditions so they can also be calculated client side
  • The map SVG is very unreadable, use more directives for it
  • Split the client side up into require.js modules
You can’t perform that action at this time.