Alternatives to Denote
What follows is a list of Emacs packages for note-taking. I (Protesilaos) have not used any of them, as I was manually applying my file-naming scheme beforehand and by the time those packages were available I was already hacking on the predecessor of Denote as a means of learning Emacs Lisp (a package which I called “Unassuming Sidenotes of Little Significance”, aka “USLS” which is pronounced as “U-S-L-S” or “useless”). As such, I cannot comment at length on the differences between Denote and each of those packages, beside what I gather from their documentation.
org-roam
The de facto standard in the Emacs milieu—and rightly so! It has a massive community, is featureful, and should be an excellent companion to anyone who is invested in the Org ecosystem and/or knows what “Roam” is (I don’t). It has been explained to me that Org Roam uses a database to store a cache about your notes. It otherwise uses standard Org files. The cache helps refer to the same node through aliases which can provide lots of options. Personally, I follow a single-topic-per-note approach, so anything beyond that is overkill. If the database is only for a cache, then maybe that has no downside, though I am careful with any kind of specialised program as it creates a dependency. If you ask me about database software in particular, I have no idea how to use one, let alone debug it or retrieve data from it if something goes awry (I could learn, but that is beside the point).
zk (or zk.el)
Reading its documentation makes me think that this is Denote’s sibling—the two projects have a lot of things in common, including the preference to rely on plain files and standard tools. The core difference is that Denote has a strict file-naming scheme. Other differences in available features are, in principle, matters of style or circumstance: both packages can have them. As its initials imply, ZK enables a zettelkasten-like workflow. It does not enforce it though, letting the user adapt the method to their needs and requirements.
zettelkasten
This is another one of Denote’s relatives, at least insofar as the goal of simplicity is concerned. The major difference is that according to its documentation “the name of the file that is created is just a unique ID”. This is not consistent with our file-naming scheme which is all about making sense of your files by their name alone and being able to visually parse a listing of them without any kind of specialised tool (e.g. ‘ls -l’ or ‘ls -C’ on the command-line from inside the denote-directory give you a human-readable set of files names, while ‘find * -maxdepth 0 -type f’ is another approach).
zetteldeft
This is a zettelkasten note-taking system built on top of the ‘deft’ package. Deft provides a search interface to a directory, in this case the one holding the user’s ‘zetteldeft’ notes. Denote has no such dependency and is not opinionated about how the user prefers to search/access their notes: use Dired, Grep, the ‘consult’ package, or whatever else you already have set up for all things Emacs, not just your notes.
Searching through ‘M-x list-packages’ for “zettel” brings up more matches. ‘zetteldesk’ is an extension to Org Roam and, as such, I cannot possibly know what Org Roam truly misses and what the added-value of this package is. ‘neuron-mode’ builds on top of an external program called ‘neuron’, which I have never used.
Searching for “note” gives us a few more results. ‘notes-mode’ has precious little documentation and I cannot tell what it actually does (as I said in my presentation for LibrePlanet 2022, inadequate docs are a bug). ‘side-notes’ differs from what we try to do with Denote, as it basically gives you the means to record your thoughts about some other project you are working on and keep them on the side: so it and Denote should not be mutually exclusive.
If I missed something, please let me know.