Trying Out Prot’s Denote, an Org Roam Alternative?


  • My streaming and video schedule might be disrupted over the next few weeks! I’ll keep you posted.

Renaming Rational Emacs to Crafted Emacs

Today we’re renaming Rational Emacs to Crafted Emacs!

Why? Because this name fits better with the philosophy and “tone” of the community.

Huge thanks to Jeff Bowman for putting together the necessary changes and providing a migration script so that most users can easily get migrated over.

Let’s finalize the rename now!

Denote, a new note-taking package

Today we’re going to try out a new note-taking package by Protesilaos Stavrou (“also known as Prot”) which looks like it could be a promising alternative to other packages like Org Roam!

I’m going to try and build up a note taking workflow from scratch while reading the manual that Prot put together. The goal would be to replicate something similar to what I have with Org Roam while benefitting from the unique features of Denote.

Things to try

  • Creating new notes
  • Linking notes
  • Backlinks?
  • Capture templates
  • Journalling workflow

Comparison to Org Roam


  • Much easier to build your own workflow, especially when you need to use your files across multiple machines
  • Simpler to understand and extend
  • Very easy to filter all of your note files based on filename metadata
  • Meshes well with existing Emacs functionality, you can customize behavior more easily because it’s just plain Emacs Lisp in most cases
  • Note renaming works pretty well, better than Org Roam
  • Note subdirectories and silos are a first-class capability
  • Timestamps are not timezone agnostic?


  • You may not like how the file name convention looks, especially because that’s the way you navigate your notes (though this is also a benefit!)
  • Lack of database means you miss some functionality like backlink context, finding notes by title (especially in completions), generating a graph of all notes. These may matter to you!
  • Generating backlinks buffers is slow because it must be done on the fly by scraping files
  • Could cause problems on systems where long file names aren’t supported
  • Not as clear how to deal with multiple notes bearing the same name

The final configuration

Also check out the Extending Denote section of the manual for more cool ideas!

(package-install 'denote)
(require 'denote)

(setq denote-directory "~/Denotes")
(setq denote-known-keywords '("journal" "projects" "ideas"))
;; (setq denote-prompts '(title subdirectory))

;; Buttonize all denote links in text buffers
(add-hook 'find-file-hook #'denote-link-buttonize-buffer)

;; Fontify file names in Dired
(require 'denote-dired)
(add-hook 'dired-mode-hook #'denote-dired-mode)

(with-eval-after-load 'org-capture
  (require 'denote-org-capture)
  (add-to-list 'org-capture-templates
               '("n" "New note (with Denote)" plain
                 (file denote-last-path)
                 :no-save t
                 :immediate-finish nil
                 :kill-buffer t
                 :jump-to-captured t)))

(defun my-denote-journal ()
  "Create an entry tagged 'journal' with the date as its title."
   (format-time-string "%A %e %B %Y")   ; format like Tuesday 14 June 2022

  (insert "* Thoughts\n\n* Tasks\n\n")) ; multiple keywords are a list of strings: '("one" "two")
Subscribe to the System Crafters Newsletter!
Stay up to date with the latest System Crafters news and updates! Read the Newsletter page for more information.
Name (optional)
Email Address