Skip to content
This repository has been archived by the owner on Jun 28, 2023. It is now read-only.


Repository files navigation

ElmGossip: Explore dynamic gossip in your browser

Website License

ElmGossip is a web tool for exploring and analysing dynamic gossip, built in Elm. The tool is available online, or you can follow the instructions below to run the tool locally. In general, we advise using the online version unless you plan to do anything with the source code.


This tool began its life as part of my bachelor's thesis. Since finishing my thesis, I have been working on implementing new features and polishing the tool.


  • 👁 Visualise gossip graphs
  • ☎️ See which calls are allowed for any protocol
  • ✅ Validate and execute call sequences
  • ⏰ Time-travel between multiple graph states after executing calls
  • 🛠 Create your own custom gossip protocols
  • 🌳 Generate execution trees
  • ⚠️ Helpful and human-oriented error messages
  • 🪶 Lightweight1

In progress

  • Successfulness analysis
    That is, whether some protocol is weakly/strongly successful on a given graph
  • GraphViz and LaTeX export
    Making it easy to use graphs and protocol formulae in other places
  • Saving the state of the tool to LocalStorage
    So you don't lose your work when navigating away from the page
  • Saving and loading custom protocols
  • Dark mode

You can track the progress of these features on the issues page.

Future ideas

  • Mobile support (#75)
  • Turn the site into a Progressive Web App for offline access

Running locally

If you want to build this project yourself, you'll need yarn (or, alternatively, npm).

To install:

yarn install # or npm install

Building and running

If you just want to run the project, you can run a live-reload server in development mode:

yarn start # or npm start

If you want to build a release, you can run the following command:

yarn build # or npm build

This will generate a docs2 directory. You can upload this directory to a web server or run a local web server from this directory (e.g. python3 -m http.server) to see the project. Since Elm is compiled to Javascript, uploading the compiled files is all you need to do – you don't have to start a web server as everything runs client side.

1 The entire application, bundled for production, weighs in at around 200kb. That includes compiled js, css, images and all favicons – most of which you won't even load, since they are platform-specific. For example, when loading the application on Firefox, only 129.29KB (45.73KB gzipped) is downloaded.
2 The application is configured for deployment to GitHub Pages, which expects a docs directory.