Using Daily Notes as a convert from Roam

This post discusses the idiomatic workflow translation from Roam to Obsidian. For official instructions on export/import, see the official Roam Research import guide

For the past few weeks and over the next month or so, I’m attempting to transition my work from Roam to Obsidian (mainly due to slow performance when I push it with queries/backlinks). I’ve been using Obsidian for a while and loving it to manage the markdown files on my Jekyll based website, but I’m trying to see if I can really work in Obsidian. I’m not fully convinced yet, but very optimistic. I learned quickly that the design of Obsidian does not support my old “throw everything in the daily notes” approach from Roam. Below is a description of both, and how I’m adjusting to better utilize Obsidian’s strengths while gaining a similar effect to Roam’s approach.

I really think that’s probably the biggest thing Roam expats need to get used to… Roam interprets branches of trees (in filters and queries) in the same way that Obsidian interprets a page (in search and backlinks). I have a description below of what’s essential to this post, but you can see a full writeup of the way indentation trees work in my winning roamgames onboarding submission

So in Obsidian, you make a lot of separate pages, and make sure those pages have all of the information you want available in a search result or backlink search on those pages. These pages won’t necessarily be as atomic or contextualized as having many branches of a tree in Roam would. But in Obsidian, you need to get comfortable with many separate pages that each link to everything you want, and you also need to get comfortable with navigating a few steps - finding a page and then clicking on the atomic pages that it links to, rather than expecting to find everything in your first query.

Here I have an example of the daily notes in Obsidian and Roam. For context, one of my side projects right now is working on Figma plugins to make it better for knowledge management purposes. I’m also in a group of other Roam expats trying to figure out how to make Obsidian work for us.

In Roam, my Daily notes page would look like this:

In Obsidian, equivalent content would look like this:

Okay, now let’s say I want to find my work on Figma plugins.

In Roam, I would filter backlinks to Figma or run a query relating Figma and plugins. That bullet in my daily notes would not show up, because sibling nodes on the same page are viewed as separate. Everything that is either in the same block as Figma or indented under it is related to it, but it’s not related to Obsidian and Plugin on the same page.

In Obsidian, if I search for “Figma plugin” or use the new “search within backlinks” feature to search “plugin” within the backlinks to Figma (as you see in the screenshot), then the daily notes page shows up, even though on that page I was only mentioning plugins in the context of Obsidian.

So in Obsidian, I can’t do the same thing I do in Roam daily notes pages where I talk about a dozen separate topics on the same day and page because then I’ll end up with super noisy search results.

So here’s what I’m doing instead, because I still like organizing things by date:

My daily notes page itself is basically blank. Instead, I make many atomic pages and reference the daily notes page for the days that I work on those atomic pages. Each of these pages is searched separately, so I do not end up with the “figma plugin” false positive I described above.

I can use the backlinks for today’s daily note as a navigational tool to jump around the pages that I’m working on today.

One of the problems with this approach, however, is that if you use the double brackets as a form of autocomplete, then you end up with really noisy results there! This is because you create so many pages that each have their own name that if I’m just trying to pull up a specific page I have to sift through a lot of crap.

I’m unlikely to reference any of these page titles, so having to title them is unhelpful for me:

  • “What I’m thinking about with GuidedTrack on 2021-03-27”
  • “Metamuse podcast with Nikolas Klein”
  • “Meeting notes with Brent on 2021-03-27”

I may want to reference the contents of those pages, but unlikely the titles. I want referencing a page name to be meaningful, with something like an evergreen note title or a keyword. This is where the Zettelkasten prefixer core plugin comes in!

Like, look at this note. Maybe I could break this up into atomic notes, but really there’s no overarching idea from this that I want to show up in my page name autocomplete. I just want it to show up in search results / backlinks when I need it. Honestly I don’t even care what the name is, but going with “untitled 1, 2, 3, etc.” just feels wrong. So I just create a new ZK note and write in there, referencing whatever I want to reference (including today’s daily note!) and I know it will show up in my search results or backlinks when I need it.

It’s like, “ah I just want to get something down without thinking about a name” and I can always add a name after.

No guarantees that my system will stay static in this form, I’m still in my early days, but this approach is feeling good.


I exclude daily notes from search, maybe that helps you too?


Not really, because in Roam I liked to use my daily notes for everything! Some people like to only use it for their fleeting notes, but I see my fleeting notes as valuable bits to build on.


You might want to give a shot to the Note Refactor plugin. As an r-expat, I got used to the Daily Notes behavior and was able to replace it successfully using this plugin. GitHub - lynchjames/note-refactor-obsidian: Allows for text selections to be copied (refactored) into new notes and notes to be split into other notes.


Note Refactor is probably the best plugin honestly. I’m not a Roam user but I’ve used NR for so many things that its probably been used over a thousand times in the past three months. I use it extensively when processing sources to convert rough notes into standalone idea-focused notes, leaving an outline of links in the original source note for reference later.

@roberthaisfield It looks like you are creating what the zettelkasten method calls fleeting notes so your use of the generic ID seems entirely appropriate. I stopped using the plugin long ago because I use different formats for different notes, but this is an interesting idea for fleeting notes. The ID can be recreated easily using a Keyboard Maestro macro or Alfred snippet/workflow. Thanks for the idea.


Roam Convert here as well chiming in.

Robert Haisfield’s awesome writeup of his workflow alluded to this but I think it finally clicked for me this morning. Here’s a poorly drawn illustration of how I see the DNP being used in Obsidian vs Roam.

In Roam, the DNP is where all the writing & linking is done. It’s where you construct and reference different ideas, blocks, and pages. The writing can then be referenced when you visit the backlinks of that page you’ve linked. Hence the outward pointing arrows.

In Obsidian, however, the DNP is the reference point for all the writing you’ve done for that day. Instead of linking to the different pages/blocks on the DNP, you create pages that link back to the DNP. You can then use the backlinks on the DNP to reference what you’ve done for that day. Hence the inward pointing arrows.


Completely agree. This is what I was gathering from reading it as well.

In fact I’d go one step further and say that the dominant working mode in Obsidian is that the user is manually constructing the graph node by node by creating each “from” note first. This is a bit of lower level mechanics that is (presumably) hidden in Roam.

Obsidian is ultimately a graph construction tool masquerading as a note taking app.

Of course, in exchange for manually creating the nodes in Obsidian you get to keep your data locally, which I think is a fair tradeoff. But its good to understand the distinction for someone who is transitioning.


Thanks for the overview, learned a lot here regarding the differences between Roam and Obs.

While I didn’t get too deep into the underlying logic of Roam, the one thing I was always missing in Obs is the streamlined outliner workflow.

Fortunately someone finally made a plugin that does wonders for the outline list UX in Obs…


Please give an example of the structure to achieve this ability to ‘exclude’? What is the text? Thanks in advance!

1 Like

I store my daily notes under a journal folder. And in search I use SEARCH TERM -path:journal. Hope that helps.


Have you posted about your workflow using Note Refactor somewhere?

1 Like

I do what @xavierroy says as well, excluding the folder with -path:foldername. Sometimes I also use -file:part_of_filename if I want to exclude a group of notes that have a common piece in their name.

1 Like

I have reservations about strategies that exclude paths like that. It doesn’t seem that a process requiring exclusion of various paths is scalable. It can lead to quite complicated and increasingly brittle queries as the number of paths to be excluded increases over time, multiplied by the number of queries that must exclude them.

I already experienced this very quickly with tracking tagged tasks for individual people and projects using embedded queries in their notes. Every time I added one note that needed to be excluded it required an update of N notes containing the query, where N was becoming increasingly larger. And since the queries were almost identical except for the person-/project-unique identifier they had to be updated manually, which became tedious fast.

It may work for now in the small scale but I’m not sure this is a great long term strategy.

1 Like

It would be cool if we could have variables in our notes. Like, if I wanted to show someone my notes I would need to exclude all of my clients. My embedded searches would exclude the clients variable, which I just update as needed.

I agree that in general those sorts of ritualistic exclusions generally just make it so you need to type more and more though. This is also why I’m preferring atomic pages to using nested headers and the section/subsection search. I don’t want to have too many different rules governing my notes that would produce false positives in one case and false negatives in another.


yes, you have a point. Which is why next to excluding paths I also use excluding files with common name patterns. w.r.t. @Daveb08 original question, I use [searchterm] -file:Daylog as it excludes all my day logs, regardless of whether they ended up in the same folder. For other types of notes I use -folder as naming conventions can get in the way of things as well.

1 Like

One way you can go about this is using templates that include yaml metadata of your interest (e.g. clients). You can then filter using the dataview plugin. Not so much more typing and in return you can get neat embedded queries :grinning_face_with_smiling_eyes:


Thank you for explaining your process. Do you know if that method is outlined ANYWHERE in the Help documents. I couldn’t find it. Or did you gain the knowledge elsewhere? Again, thank you for taking the time to respond.

1 Like

In the Obsidian Help Vault, the page [[Search]] describes the various ways one can use search, including how to embed it in a note. Search is a core plugin, you can see in your Obsidian settings if it is enabled in your Obsidian instance.

1 Like

I know, but nowhere did it mention ‘-Folder’ as an option. I assumed that was something you picked up elsewhere than in Obsidian Help. I saw the section, but not the option. I just thought the section could have been a little more expansive. Certainly NOT blaming the Devs, I think they are amazing.
Thanks again.

1 Like

I probably picked it up browsing the forum myself, but the Obsidian Help Vault mentions path, file and tag etc under Search operators, and the use of - to negate things and using regex in the section above it.

1 Like