Roam and Athens: Boons and Pitfalls

Journal page in Athens
Landing screen for Google Keep
Labelling a note in Google Keep
The Roam-like data model (
Showcasing Athens’s referencing functionality with a page about “toast”. “marmalade” is an example of a page link, while “sweeter is always better” is an example of an embedded text block (part of another page). The “Linked References” section show which external text blocks link to this page.
Edit mode of a block text reference

Pages are like text blocks with less features.

That’s fine, if you always want the power of text blocks, just don’t use pages, right? Not quite; text blocks must exist within a page, so like it or not, you are stuck with at least one. But more importantly, the UI revolves around the page. There is a special list of all pages, automatically created journal entries are pages, searching for text displays the page name most prominently, the graph view only shows pages, and pages have the much more [[user friendly]] syntax for referencing.

  1. Do I want to be able to reference other ideas from inside this note, now or in the future?
  2. Do I want to use the ((text block embedding)) instead of [[page linking]] when referencing this note?
  3. Is there a page I want to put this note in?
  4. Do I want this text to be hidden from the notebooks global page list and graph view?
Original data model (
Simplified data model (
  • Each note in the notebook is capable of referencing any other. No need to consider whether you want referencing when creating the note.
  • There is only one kind of referencing. Gone is the meaningless distinction between ((text block embedding)) and [[page linking]]. For this to work well, text block embedding would need to be more seamless to the user than it is currently, and feel more like page linking.
  • Text blocks do not need to live inside another note entity: they can float directly in the notebook itself, allowing them to be entered without first needing to give a thought to where it should go. It also means text blocks can be dynamically created from within other text blocks, just as you now can with pages in the original model.
  • Text blocks can be easily refactored between whether they should act like a page or not, as simply as a toggling a “page” switch. The default for a child of another text block should be OFF, while the default for a child of the notebook might be ON (or based on user preference).
  • Pages now have the possibility of existing within other pages.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store