Introduction & rationale

I’ve been absolutely loving org-roam since I started experimenting with it. It’s a brilliant implementation of the concept of bidirectional linking for org-mode—replacing hierarchies of notes—, however the way it displays backlinks never really clicked for me.

Because backlinks in org-roam are only displayed in a side buffer, they are easy to miss. The side buffer will not always be open, and even if it is, the information it contains is visually far away from the note you’re looking at.

I was reluctant to use the daily notes as much as I would have in applications such as Roam Research or Logseq, in fear of content getting buried in notes that I would not come back to.

Another issue with the side buffer implementation of backlinks in org-roam is that it does not display the entire outline subtree of a backlink. This is I think an essential part of the bidirectional linking feature of Roam for surfacing content from other notes.

Enter nroam

nroam is a supplementary package for org-roam that replaces its backlink side buffer. Instead, it displays org-roam backlinks at the end of org-roam buffers. The user can also click a button to see unlinked references, all in the original org-mode source buffer.

One of the ideas behind nroam is to remove the friction and effort it takes to consult backlinks. By making them an integral part of the org buffer, backlinks also become more powerful. You could for instance make a sparse tree—see org-sparse-tree—to filter the contents of a note and its backlinks at the same time.

Below is a screenshot of what nroam looks like.

Backlinks in nroam

For a comparison, here’s how backlinks are rendered in vanilla org-roam:

Backlinks in org-roam

And here are the same backlinks displayed with nroam:

Same backlinks in nroam

As you can see, the purpose is not only to display references within the notes buffer, but also to display the entire org-mode subtree for each reference, giving much more context to the reader.

Why extend org-roam?

Alternative Emacs packages exist, such as gkroam, which I could have simply used, but I decided instead to build nroam as a companion package for org-roam as I believe we should build upon and extend the existing ecosystem of org-roam instead of competing with it. Org-roam has gained a lot of traction recently and does much of the heavy lifting already, so there is no need to compete with it.

Installing nroam

nroam is still quite young and is not yet available in MELPA. A recipe is waiting for review, but in the meantime you will have to manually install the Elisp files in your .emacs.d from the git repository.

Once installed, simply add the following hook and you should be ready to go.

(add-hook 'org-mode-hook #'nroam-setup-maybe)