I spent the weekend adding speeches and literary texts to my public Roam database. While this is certainly a geeky thing to do, I will say there is something cathartic about adding literary works and sharing them via Roam.

I’m fascinated with the growing movement of people creating public Roam libraries and sharing them with others. This article shares how I added texts to Roam with the goal of encouraging others to do the same.

Rishi Tripathy wrote an article on this site called How I Roamified the Mahabharata (and how you can too!) which is about adding large texts to Roam. I recommend you read it. The article is impressive and the right kind of approach for large texts.

However, this article is about the low-tech approach I used for smaller texts.

The reasons are the same, though. Rishi states in his article why adding significant written works to your personal Roam database is so useful:

When studying a text in your own private database, you can instantly pull in relevant parts to your own notes and see what resonates with you, and use powerful filters and queries to identify where ideas, characters, or themes in the text intertwine.

Referencing texts that have stood the test of time helps you in your own thinking. When you see writing that resonates with you, it helps you to better understand how you think.

Tools I Used

  • Chrome
  • Google Search
  • Online sources of publicly available information like Project Gutenberg
  • Roam

Notice everything is browser-based. Again, this is a low-tech solution and is accessible to anyone who has a Roam database.

How I Added Entries

1. Deciding What to Add

I started basic and used Google to search for lists of the top speeches and copyright free texts. After reading multiple lists, I developed an idea of what texts looked interesting to me as well as what texts showed up on lists repeatedly. I then double checked RoamPublic to make sure the text wasn’t already available.

This step is all personal preference. Some of the texts I added are classics like Machiavelli’s The Prince while others like The Emerald Tablet are more obscure. I even added an entry by P.T Barnum, likely influenced by watching “The Greatest Show” a few nights before.

Project Gutenberg is a great reference for literary texts which are copyright-free. Finding speeches takes a bit more work to find available sources.

2. Creating a Roam page for the text

I created a page for each entry based on the title I was importing. In addition, I added attributes to each page for further detail. Roam attributes are created by following a word or phrase with a double colon “::”.


The goal of adding attributes is to make finding similar works easier as the database grows. Note that I do not add a generic “Tags” attribute as I believe connections lose meaning with non-specific tagging. Here are some of the attributes I used:

  • Author or Orator – All entries had one or the other
  • Date – Some dates are specific, a few are ranges
  • Translated by – If the original text was not English
  • Location – Most commonly for speeches
  • aka – Some pieces were referred to by multiple names
  • Wikipedia – Link to entry where possible
  • Subject or Genre – Added if this was easily identifiable
  • Excerpt from – A few speeches were excerpts from larger texts.

Since every entry included either an Author or Orator, I indented all other attributes under them so they can be collapsed and hidden if needed.

3. Copy / Paste

This step is as basic as it sounds. I copied the text from the source and pasted it into my Roam database. Specifically, I pasted the text indented under a node called “Text” so that formatting was consistent from page to page.

Tip: Avoid plain text sources which use fixed width text as they break lines up based on length, not paragraphs. When using Project Gutenberg sources, I chose the HTML view every time as it provides the best format for Roam. The plain text options often fragment sentences to achieve a consistent line width and make importing more difficult than it needs to be.

4. Formatting

With the raw data pasted into Roam, I then formatted the text by hand.

Speeches were easy and required almost no formatting. The rare instance was indenting text if the orator was quoting someone else or reciting a song or poetry.

Literary texts required a bit more work. I indented chapters under the chapter title and, in a few instances, indented chapters themselves under a “book” or major chapter header. My goal was to mimic how the table of contents formatted the chapter hierarchy.

Example of chapters indented under a larger heading

5. Single Page Text vs. Page Per Chapter

In order for someone else to use a piece in their own database, they need to export the page from one Roam database and import it into another. At the time of writing this, Roam does not have a selective export. Users can either export the page they’re viewing or the entire database.

In an attempt to make sharing texts easier, I created both single text entries and entries broken out by chapters to allow someone to download in whatever manner they prefer.

I formatted the full text version first. Then, using Roam’s right sidebar for each chapter, I copied text from the full version and pasted it into each chapter. If I were doing this for my own private database, I would choose one or the other as creating both adds time to the process, but for public databases this allows greater flexibility in how people use the text.

Making the Database Visitor-Friendly

I wanted to go the “extra mile” and make navigating my public database as easy as possible for people. To do so, I created a separate page for each of the following:

  • Directory – Table of Contents for the following pages
  • About this database – The “About” page for the database with contact info regarding how to reach me for corrections
  • Full List of Titles – All entries in the database
  • List of Speeches – All speeches listed
  • List of Literary Texts – All literary texts
  • List of Authors – All authors and orators
  • Additional Resources – List of websites and Twitter accounts useful for people who want to get more out of Roam
  • New items – (see below).

The Directory is mirrored in the Navigation Panel.

All lists are sorted alphabetically and each page was also “starred” so they appear in the left navigation pane.

I use the Daily Notes and list each entry indented under the attribute “New items”. This allows me to see all titles listed by date added and is helpful for people to see if anything new has been added to the database since a prior visit.

Again, this is not necessary for adding texts to your Roam database. I include this section to encourage others who are creating public pages to think about how a new user would navigate your database. It’s not necessary, but I’ve already received feedback thanking me for the navigation.


I chose a low tech solution because the texts I added were small to medium in length. Since there is no consistency in source material, it’s quicker to copy/paste and format by hand than to write a script for each source. Both are valid approaches but the low-tech approach might be easier for the average Roam user.

Hopefully this has been helpful and will encourage other Roam users to add texts to for their own personal use or for sharing in public databases. If you have any questions, feel free to reach out to me on Twitter.