Skip to content
Clojure JavaScript
Branch: master
Clone or download


Epitaph is an idle game about existential risks and the death of civilizations. It was originally made for the Fermi Paradox Jam. You can play it in your browser, or check it out on

From an implementation perspective, Epitaph is interesting mainly because it's a browser game written in ClojureScript that makes extensive use of procedurally generated text to tell an interactive story. It also uses Om (a ClojureScript wrapper around React) for rendering.

Project structure

  • deps/: Exactly what it says on the tin: plain old JavaScript libraries that the game pulls in as dependencies. Right now the only thing in here is Tone.js, which Epitaph uses exclusively to make little pinging sounds that notify the player when things are happening.
  • docs/: The HTML page (index.html) in which the game actually runs, as well as the fonts and compiled JavaScript required by said page.
  • externs/: Closure Compiler externs for each of the plain JS dependencies in deps/. Only covers the parts of each library that the game actually uses.
  • src/epitaph/: The main ClojureScript codebase for the game.
    • app.cljs: The main entry point that ties everything together. Handles rendering and manages the game state.
    • civs.cljs: Functions for procedurally generating alien civilizations, and for updating them on every tick.
    • events.cljs: A table of all the random events that can happen in the game.
    • language.cljs: Functions for procedurally generating alien languages. Heavily inspired by Martin O'Leary's blog post on generating naming languages, albeit with some substantial tweaks and deviations.
    • rand.cljs: Generic utilities for working with randomness and generator functions.
    • techs.cljs: A table of all the technologies that can be discovered in the game.
  • project.clj: The Leiningen project file used to build the game.
You can’t perform that action at this time.