March 7, 2023
How I Store Quotes in Obsidian
I found no satisfying solution for storing my favorite quotes in Obsidian, so I developed my own…

By Matt Lee
5 min read
Storing my favorite quotes in Obsidian was one of my early hurdles, and I found no preexisting satisfying solutions. I've since developed my own system and, although it's still a work in progress, I am going to share it in case it helps anyone or provides some ideas.
Quote Storage
I've previously stored quotes in specialized apps, or dumped them all in notes in various notes apps. For Obsidian, I decided to put each quote in its own note, in order to easily link to and embed individual quotes in other notes.
My first hurdle was what to name the notes. I started out using the first sentence of the quote, or the most unique or impactful part of the quote. It never felt quite right.
After some experimentation, I settled on a naming scheme akin to claim-based notes (where the title is a claim that is then substantiated in the note). It looks like this for quotes:
Howard Thurman says to do what makes you come alive, because the world needs people who have come alive
I like this naming scheme, since it implies that it's a quote, conveys the author, and expresses the essence of the quote, all without being overly formulaic. When these notes show up in search results, they fit in with my other notes just the right amount.
The actual quote that I'm storing in that note is:
"Don't ask yourself what the world needs. Ask yourself what makes you come alive, and go do that, because what the world needs is people who have come alive." ― Howard Thurman
When writing the title, I like to express the quote in my own words, which has the benefit of giving more thought to the quote. Anytime you can put something into your own words, you're more likely to remember and receive value from it than if you simply save it and file it away.
Quote Importing
As I added more metadata and structure to my quote notes, they became laborious to create, so I began relying on the Drafts app to process them. I was already saving interesting quotes there until I had time to process and move them into Obsidian.
I created an action in Drafts that puts the quote, author, and source into metadata, formats the quote, and creates a new note in the Quotes folder inside my Obsidian vault. It also gets the title started with the name of the author, so it's ready for me to provide my summarization.
It's still a bit finicky and doesn't handle many cases well, so I will let you create your own. It's fairly easy to create your own. The crux of it is a URL step that sends a request via the Obsidian URI protocol:
obsidian://new?vault=[[vaultName]]&file=[[fileName]]&content=[[content]]obsidian://new?vault=[[vaultName]]&file=[[fileName]]&content=[[content]]In prior steps, the vaultName, fileName, and content variables are defined.
My content variable uses this template:
---
tags: [[[tags]]]
author: [[author]]
source: [[source]]
quote: |-
[[quote]]
---
[[draft]]---
tags: [[[tags]]]
author: [[author]]
source: [[source]]
quote: |-
[[quote]]
---
[[draft]]The |- before the quote is YAML block scalar header syntax, which allows the quote to occupy multiple lines without becoming invalid YAML.
Quote Viewing
Having all the quote data in the metadata of the quote notes allows you to use the Dataview plugin to create a table showing all of your saved quotes.
Here is my Dataview query that generates a table of quotes:
```dataview
TABLE WITHOUT ID
(link(file.link, "\"")+quote+"\"") AS "Quote",
join(filter(list(author, source), (x) => x != null), ", ") AS "Source",
join(replace(filter(tags, (x) => x != "quote"), "topic/", ""), ", ") AS "Topics"
FROM "Quotes"
SORT file.ctime DESC```dataview
TABLE WITHOUT ID
(link(file.link, "\"")+quote+"\"") AS "Quote",
join(filter(list(author, source), (x) => x != null), ", ") AS "Source",
join(replace(filter(tags, (x) => x != "quote"), "topic/", ""), ", ") AS "Topics"
FROM "Quotes"
SORT file.ctime DESC
I simply added that code to its own note called "Quotes", which now produces a list of all of my stored quotes.
<picture>
<source media="(max-width: 768px)" srcset="/img/medium/700/1*TnbIQio-OGNibPwvN1YuuA.png 1x">
<source media="(min-width: 769px)" srcset="/img/medium/2000/1*TnbIQio-OGNibPwvN1YuuA.png 1x">
<img src="/img/medium/700/1*TnbIQio-OGNibPwvN1YuuA.png" alt="None" width="1520" height="1220" loading="lazy" data-zoom-src="/img/medium/4000/1*TnbIQio-OGNibPwvN1YuuA.png" class="prose-image"/>
</picture>
Note that the Dataview query expects quote notes to be in a folder named "Quotes". Replacing `FROM "Quotes"` with `FROM #quote` will pull them from any note tagged `#quote` instead.
The query also handles presentational niceties, such as combining the author and source into one field, and removing the `#quote` tag from the list of tags before displaying the rest.
I prefix my topic-oriented tags in Obsidian with `#topic/` to keep my tag list organized. In the Dataview query that prefix gets removed, and then the array of tags gets combined into a single string separated by commas, to make the presentation even tidier.
I sort the quotes by the date they were added to Obsidian, with most recently added at the top, since they are likely to be more relevant to current explorations, and I want to increase my odds of seeing them again soon to kick off some spaced repetition!
I also made the first quotation mark a link back to the original note. I didn't like the look of having the whole quote be linked, or having a column or separate icon to provide a link. So I hid it away. You may want to move it elsewhere. 🙂
There's a lot of personal choices included in that query, but I wanted to provide it as an example. Figuring out how to build a query can be much harder than tweaking an existing one.
Note: if you try this query and only the beginnings of quotes are showing, you are probably using an Obsidian theme that truncates content displayed in Dataview tables. Minimal is one such theme.
### Hiding Embedded Quote Titles
<picture>
<source media="(max-width: 768px)" srcset="/img/medium/700/1*lLRt_bnhwIomtlKjQHwC7w.png 1x">
<source media="(min-width: 769px)" srcset="/img/medium/2000/1*lLRt_bnhwIomtlKjQHwC7w.png 1x">
<img src="/img/medium/700/1*lLRt_bnhwIomtlKjQHwC7w.png" alt="None" width="1482" height="310" loading="lazy" data-zoom-src="/img/medium/4000/1*lLRt_bnhwIomtlKjQHwC7w.png" class="prose-image" data-caption="An embedded quote, before the CSS snippet was enabled."/>
</picture>
I didn't want to have my summarized title (e.g. "Laozi says…") included whenever I embedded a quote in another note, so I added a CSS snippet to tweak the Obsidian appearance and hide embedded note titles.
Note that this tweak hides titles from all note embeds, not just quotes, which might not be your desired behavior. Here's the CSS:
```css
.markdown-embed-title {
display: none;
}
I simply added that code to its own note called "Quotes", which now produces a list of all of my stored quotes.
<picture>
<source media="(max-width: 768px)" srcset="/img/medium/700/1*TnbIQio-OGNibPwvN1YuuA.png 1x">
<source media="(min-width: 769px)" srcset="/img/medium/2000/1*TnbIQio-OGNibPwvN1YuuA.png 1x">
<img src="/img/medium/700/1*TnbIQio-OGNibPwvN1YuuA.png" alt="None" width="1520" height="1220" loading="lazy" data-zoom-src="/img/medium/4000/1*TnbIQio-OGNibPwvN1YuuA.png" class="prose-image"/>
</picture>
Note that the Dataview query expects quote notes to be in a folder named "Quotes". Replacing `FROM "Quotes"` with `FROM #quote` will pull them from any note tagged `#quote` instead.
The query also handles presentational niceties, such as combining the author and source into one field, and removing the `#quote` tag from the list of tags before displaying the rest.
I prefix my topic-oriented tags in Obsidian with `#topic/` to keep my tag list organized. In the Dataview query that prefix gets removed, and then the array of tags gets combined into a single string separated by commas, to make the presentation even tidier.
I sort the quotes by the date they were added to Obsidian, with most recently added at the top, since they are likely to be more relevant to current explorations, and I want to increase my odds of seeing them again soon to kick off some spaced repetition!
I also made the first quotation mark a link back to the original note. I didn't like the look of having the whole quote be linked, or having a column or separate icon to provide a link. So I hid it away. You may want to move it elsewhere. 🙂
There's a lot of personal choices included in that query, but I wanted to provide it as an example. Figuring out how to build a query can be much harder than tweaking an existing one.
Note: if you try this query and only the beginnings of quotes are showing, you are probably using an Obsidian theme that truncates content displayed in Dataview tables. Minimal is one such theme.
### Hiding Embedded Quote Titles
<picture>
<source media="(max-width: 768px)" srcset="/img/medium/700/1*lLRt_bnhwIomtlKjQHwC7w.png 1x">
<source media="(min-width: 769px)" srcset="/img/medium/2000/1*lLRt_bnhwIomtlKjQHwC7w.png 1x">
<img src="/img/medium/700/1*lLRt_bnhwIomtlKjQHwC7w.png" alt="None" width="1482" height="310" loading="lazy" data-zoom-src="/img/medium/4000/1*lLRt_bnhwIomtlKjQHwC7w.png" class="prose-image" data-caption="An embedded quote, before the CSS snippet was enabled."/>
</picture>
I didn't want to have my summarized title (e.g. "Laozi says…") included whenever I embedded a quote in another note, so I added a CSS snippet to tweak the Obsidian appearance and hide embedded note titles.
Note that this tweak hides titles from all note embeds, not just quotes, which might not be your desired behavior. Here's the CSS:
```css
.markdown-embed-title {
display: none;
}To add this tweak, go to the "Appearance" section within your Obsidian vault settings and scroll down to the "CSS snippets" section at the bottom. Click on the folder icon to open the location to place .css files on your filesystem. Create a new .css file (named perhaps hide-embedded-title.css) with the above CSS style and save it to that folder. Then refresh the "CSS snippets" section and you will see a toggle to enable that snippet.
Once enabled, it works across any theme.
Conclusion
This is where I've arrived with my quote storage system, but I'm not entirely satisfied.
My ideal would be a dynamic template that could be added to other notes, which would pull in a selected quote and format it according to the template. That would centralize the formatting of the quotes, allowing for formatting changes to be made without needing to adjust hundreds of individual quote notes.
I am going to explore options for storing quotes in a database format. While I like the flexibility of having quotes stored individually, and being able to add more information about some quotes to their notes, the vast majority of my quote notes are nothing more than quotes, so they feel ripe for a data structure.
How do you store your quotes, and have you found any systems that work well?