Group collaboration tools for hackers in forts.
Python JavaScript
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Group collaboration tools for hackers in forts.


  • Several collaborating hackers
  • A fort, castle or other defensive structure
  • No internet connection

Bugle is a Twitter-like application for groups of hackers collaborating in a castle (or fort, or other defensive structure) with no internet connection. Bugle combines Twitter-style status updates with a pastebin and a group todo list. It also has a rudimentary API allowing automated scripts (such as the included subversion post-commit hook) to post messages in an unobtrusive way.

It was built as a side project during a /dev/fort week in a Scottish castle.

Server-side code is by Simon Willison, and the parts of the CSS that don't suck are by Natalie Downe (Simon's butchered it a bit since then).

Awesome/Evil Twitter API imitation by Ben Firshman.

Bugle isn't secure (vulnerable to CSRF) and probably doesn't scale.

Bugle is released under a BSD license.

Development installation

Fabric is required:

$ sudo easy_install fabric

To set up a development environment:

$ mysql -u root
mysql> create database bugle default charset = "utf8";
mysql> exit
$ fab localhost setup_dev 
$ cd bugle_project/
$ ./ syncdb
$ ./ migrate

If requirements.txt gets updated in the future, you may need to run:

$ fab localhost install_requirements

Test suite

$ fab localhost test

Setting up live server

Before deploying for the first time, install Apache and mod-wsgi (libapache2-mod-wsgi on Debian).

Create MySQL database bugle and an SSL certificate:

$ mysql -u root
mysql> create database bugle default charset = "utf8";
$ make-ssl-cert generate-default-snakeoil --force-overwrite
$ a2enmod ssl

Set up the deployment environment:

$ fab live setup


To deploy new versions:

$ fab live create_version deploy

Magic Twitter support

To make Twitter clients magically work with Bugle on a network, we need to mess with BIND.

Create /etc/bind/

$TTL    604800
@   IN  SOA localhost.  root.localhost. (
                    4   ; Serial
                    604800  ; Refresh
                    86400   ; Retry
                    2419200 ; Expire
                    604800  ; Negative Cache TTL

@       IN  NS
@       IN  NS
@       IN  A
api     IN  A

Add to /etc/bind/named.conf.local:

zone "" {
        type master;
        file "/etc/bind/";