Local development

poetry run coltrane play will serve the markdown files for local development.


poetry run coltrane play or Django’s runserver management command is fine for local developement, but should never be used in production.


coltrane can be installed with deployment features for production by installing the deploy extras.

poetry add coltrane -E deploy


If using pip you can do something like: pip install coltrane[deploy].

Required settings

DEBUG should be False (more details in Django docs). ALLOWED_HOSTS must be set to the acceptable host or domain names (more details in Django docs).



gunicorn is a production WSGI server. More information about it can be found at:

Something like this could be used to start gunicorn with coltrane: poetry run gunicorn -b localhost:8000 app:wsgi.


whitenoise allows regular WSGI servers to serve static files without needing to move assets to S3 or another hosted file platform. More documentation is at:

Recipe for Heroku

Heroku will run the collectstatic management command by default for Django projects, but this should be disabled for by setting the DISABLE_COLLECTSTATIC environment variable to 1. Add the nginx buildpack from

Then, add the following files so that nginx will serve the static files efficiently.

def when_ready(server):
    # touch app-initialized when ready
    open("/tmp/app-initialized", "w").close()

bind = "unix:///tmp/nginx.socket"
workers = 3


web: python collectstatic --noinput && bin/start-nginx gunicorn -c app:wsgi