Skip to content
AppEngine hosted chat server. Example for the distributed systems class at
Python JavaScript HTML CSS
Branch: master
Clone or download
Latest commit 7863a03 Oct 4, 2017
Type Name Latest commit message Commit time
Failed to load latest commit information.
appengine More changes to port from Channel API to Firebase API. Oct 3, 2017
public first commit Dec 13, 2016
stylesheets first commit Dec 13, 2016
uwsgi More changes to port from Channel API to Firebase API. Oct 3, 2017
LICENSE first commit Dec 13, 2016 Enhanced instructions. Oct 4, 2017
TODO Updating configs and docs to new directory structure. Jan 27, 2017


This is the dschat online chat system. Inspired by the zarchive interface to the Zephyr chat system used by CS grad students at Carnegie Mellon.

This is a example program. It is not guaranteed to be complete, robust, or anything else. If you deploy this to AppEngine and get a lot of active users (or one runaway bot), it may cost you money to run this. If you deploy the uwsgi version it is wide open to spammers and abuse. Be careful!

I am far from an expert in Python, and this is the first Javascript program I ever wrote. I'm a C++ guy. Don't use my code as an example of "good practice", as it probably isn't.

This program is intentionally minimalist -- it is a foundation for people to build upon to help them learn distributed systems, as a part of the class at So many features are intentionally absent to give students a chance to implement them themselves.

This does not mean that I welcome any and all contributions. Anything which adds features and doesn't detract from the learning goal of this code? Great! Anything which makes the code easier to read, more "standard" Python or Javascript, easier to deploy? Awesome. Send me my first github pull request ever, and I'll figure out what to do with that.



If you change this app and want to test it on your local computer, you need to first set up Firebase (grrr, the Channel API was deprecated). See the instructions here:

Then to test this program use:

cd dschat/appengine pip install -t lib -r requirements.txt export GOOGLE_APPLICATION_CREDENTIALS=/path/to/firebase_credentials.json .

To deploy the new version to AppEngine, use:

gcloud app deploy app.yaml

If you make a change which issues new datastore queries, run the following to cause AppEngine to build new indexes:

gcloud app deploy index.yaml



If you change this app and want to test it on your local computer (or a cloud VM), you need to:

  • Install and configure nginx.

  • Install uwsgi.

  • Install redis.

  • You may want to get a SSL certificate and install it (I used letsencrypt).

  • Configure nginx to serve the static content in dschat/*/, and also pass through dynamic requests to the uwsgi socket. My config can be found in sample_configs/nginx_sites.conf.

  • Configure systemd or upstart to automatically start both redis and uwsgi on boot. My config for uwsgi can be found in sample_configs/uwsgi.service, the installer for redis generated one automagically for me.

You can’t perform that action at this time.