Update: I think Org-roam is the right answer for most people, but I could not resist the simplicity and lack of dependencies of Denote, so I am back in Denote as of June, 2023.
I went with Org-roam.
This is a bit disappointing because I prefer the philosophy of Denote. I like that Denote is agnostic about file types (I can mix and match Markdown and Org-mode files, for example). I like that it forces a consistent file naming scheme. I like that it doesn’t depend on Org-mode features or any other complex dependencies. I like that it doesn’t try to do too much, but is easily extensible. Plus, I’m not trying to build some sort of zettelkasten or anything, so simple is preferable.
But, I keep finding things in Org-roam that I “need”. I use aliases all the time. I like to use several tags on a file, but don’t want them all in the file name. I like the full-featured daily notes functions. I like the ability to extract a heading out to a new roam file. Or I can use org-roam-refile to move a heading to another file in the Org-roam directory. I’m sure I could find ways to handle some of these things in Denote, but with Org-roam I get them out of the box.
What I really like in Org-roam, and have come to rely on, is the ability to have individual Org headings become their own independent roam nodes. For a while, I thought this added unnecessary complexity, but it turns out to be super useful. For example, I have a books.org file, with each book as its own heading. (See Book logging in Emacs). Since moving this file into Org-roam, I’ve turned each book’s heading into its own node, making it easier to search for a book or to link between the book and its author note or a concept note. And I can still create summary tables within the books.org file.
Then there’s the Graph. I make fun of the Graph because it really is mostly useless, but dammit it’s fun to poke around in.