Zetteldeft (2018-2022)

A post-mortem reflection in celebration of Emacs

When I started using Emacs in 2017, I immediately enjoyed the freedom it provides users. After getting my bearings – which took a while, learning Emacs and Vim simultaneously, see Emacs aniversary – I started dreaming about my own note taking system.

I wanted to create a system based on a flat hierarchy of files with IDs, so to easily refer to and link notes. I had heard that Niklas Luhmann, whom I “knew” as a sociologist, had a paper note taking system he called Zettelkasten (which was also much less of a buzzword back in 2017). Luhmann connected, or rather “branched,” his notes by giving them relational identifiers, which gave notes both a place and a reference point.1

After spending about a year in Emacs, I started writing Emacs Lisp. I had no real programming experience, but in Emacs there’s no real distinction between programmers and users. And anyone using Emacs for long enough will pick up some Emacs Lisp along the way. (People who are for whatever reason averse to code-based configuration, will never use Emacs for long anyway.)

I used Deft (an Emacs package to quickly search through a folder of plain text notes), which I built upon. A brief note on GitHub pointed me in the right direction. It allowed me to put together a series of functions to create files with names based on timestamps, giving unique and stable IDs to link notes together in various ways. By adding tags and “automated lists of links”, it evolved into a full package that I named Zetteldeft.

Zetteldeft is written as “literate code” in a single Org-mode file of more than three thousand lines. Having the ability to document the code that I wrote, helped me outline ideas and concepts, and explain some of the code to my future self. At the same time, it meant Zetteldeft was created “incrementally” and not from a singular vision.

Zetteldeft fit my needs (individual notes structured by the links between them), and I used it (and wrote code for it) for many years. I shared my code on GitHub, and I was pleasantly surprised that people made contributions. The repository received 391 stars on Github and Zetteldeft has been installed about 14.000 times via melpa.org. Nothing to boast about, but more than I expected.

After some years, in 2022 (and ironically when I began using Zetteldeft more for writing instead of adding lines to its codebase), I started to contemplate the longevity of my notes. Three points came up: Zetteldeft’s reliance on Deft (which isn’t actively developed as far as I know, and remains an external dependency), my limited skills in Emacs Lisp (even though I do enjoy toying with it), and my limited time due to kids and family.

Which is why, one summer, I decided to interact with my notes via Denote (with some personal functions to meet my needs. Denote’s development is very active and open to contributions, so it felt like a great switch. And, similar to Zetteldeft and many note-taking systems, it has clear core principles that don’t lock in your notes.

I still miss creating my own system. In 2023 I posted a notice on the Zetteldeft GitHub page and sincerely hope that anyone who used (some of) its code is familiar enough with it to take care of their own notes.

That is what happens with Emacs and its Lisp: the endless freedom allows you to mould a computing environment to your liking, but ultimately what happens with that space is the responsibility of “the user”. Luckily, in Emacs users are not so much isolated individuals, but rather cultivators, who through sharing create a whole ecosystem of code and ways to use it in your own user-init-file.

Footnotes:

1

Luhmann being Luhmann, he even wrote an essay about it, in his typical writing style: dense and difficult to “get” because of his unique vocabulary.

Author: EFLS

Date:

Modified: 2026-06-15 Mon 11:24