Emacs as an Exocortex

First posted on June 13, 2021

I’ve leaned into the trend of explicitly crafting a “digital brain”, and chose Org-roam in Emacs as an ultra-customaizable Lisp-based substrate. This post summarizes my experience so far.

Org-roam is one of several recent developments in “tools for thought”, most notably Roam Research. If you’re already familiar with Emacs and Org-mode, Org-roam is a must-try package. For everyone else, Gwern said it best:

“Friends don’t let friends use heroin or org-mode — are you ever really going to make back the time it takes to learn & customize org-mode?”

Well, Gwern, I’m working on it. If you happen go down this rabbit hole, you might find my configuration helpful.

What is Org-roam?

Org-roam is an Emacs package that augments Org-mode with features found in Roam Research. Specifically, Org-roam enables building and leveraging an emergent graph structure on top of Org-mode. Each node is an Org file, which (in my case) is an entity or concept like a person, place, company, book, paper, codebase, technology, etc… A bi-directional graph edge is generated whenever the contents of one node reference another node, enabling structure to form incrementally. Edges can also be pinned to specific sub-sections of a node, for more specificity. Critically, Org-roam enables generating nodes and links with minimal overhead, friction, or cognitive load. It’s joyfully streamlined.

My Use Cases

Here are some things I currently find useful to augment with this graph structure:

  1. Notes on my engineering work / personal research
  2. Notebooks with executable code blocks (see Org babel and emacs-jupyter)
  3. PDFs, references, and annotations (see my org-noter config and org-roam-bibtex config)
  4. Tasks (see my org-agenda config here)
  5. Daily journal entries

Example Flow

Here’s a realistic example how I leverage the graph structure:

  1. I create a journal entry describing my learnings about a computational method, which I recently used for a work task.
  2. The journal entry links to the task description.
  3. The task description links to the implementation in a computational notebook (via emacs-jupyter).
  4. The inline documentation of the notebook links to an equation in a paper (PDF) describing the computational method.

Much later, I go back to the same paper for a different project. Then, I immediately see the backlinks attached to the equation, which bring the past code, task, and journal entry to my fingertips.

This is the key purpose of the graph overlay: it enables resurfacing information when it’s most useful. Ideally, this augments the value of taking good notes, since they’re more likely to serve me in the future.

My Graph Structure

Here’s a bird’s-eye view of part of my graph, courtesy of org-roam-server:

Other Projects / Resources

Some interesting projects / resources in this space:

And don’t miss the classic “As We May Think”.