Building A Zettelkasten In Typora
A ‘system of knowledge’ based on an infinity of markdown files
[Note: originally published in Jan 2020, now significantly updated to reflect how I am currently using Typora (once again!) as my system of knowledge.]
I stumbled across a reference to a note-taking system — or a system of knowledge, perhaps — I had not heard of: zettelkasten.
In Zettelkasten — How One German Scholar Was So Freakishly Productive, David Clear writes about the note box (zettelkasten) system of Niklas Luhmann. I leave out the long preamble — perhaps helpful, but to me tedious — and simply repost his description of the principles underlying zettelkasten:
The Zettelkasten principles
A Zettelkasten is a phenomenal tool for storing and organizing your knowledge, extending your memory, generating new connections between ideas, and increasing your writing output. However, to make the most of a Zettelkasten, you should follow some key principles.
1 | The principle of atomicity: The term was coined by Christian Tietze. It means that each note should contain one idea and one idea only. This makes it possible to link ideas with a laser focus.
2 | The principle of autonomy: Each note should be autonomous, meaning it should be self-contained and comprehensible on its own. This allows notes to be moved, processed, separated, and concatenated independently of its neighbors. It also ensures that notes remain useful even if the original source of information disappears.
3 | Always link your notes: Whenever you add a note, make sure to link it to already existing notes. Avoid notes that are disconnected from other notes. As Luhmann himself put it, “each note is just an element that derives its quality from the network of links in the system. A note that is not connected to the network will be lost, will be forgotten by the Zettelkasten” ( original in German).
4 | Explain why you’re linking notes: Whenever you are connecting two notes by a link, make sure to briefly explain why you are linking them. Otherwise, years down the road when you revisit your notes, you may have no idea why you connected them.
5 | Use your own words: Don’t copy and paste. If you come across an interesting idea and want to add it to your Zettelkasten, you must express that idea with your own words, in a way that you’ll be sure to understand years later. Don’t turn your Zettelkasten into a dump of copy-and-pasted information.
5 | Keep references: Always add references to your notes so that you know where you got an idea from. This prevents plagiarism and makes it easy for you to revisit the original source later on.
6 | Add your own thoughts to the Zettelkasten: If you have thoughts of your own, add them to the Zettelkasten as notes while keeping in mind the principle of atomicity, autonomy, and the need for linking.
7 | Don’t worry about structure: Don’t worry about putting notes in neat folders or into unique preconceived categories. As Schmidt put it, in a Zettelkasten “there are no privileged positions” and “there is no top and no bottom.” The organization develops organically.
8 | Add connection notes: As you begin to see connections among seemingly random notes, create connection notes, that is, specific notes whose purpose is to link together other notes and explain their relationship.
9 | Add outline notes: As ideas begin to coalesce into themes, create outline notes. An outline note is a note that simply contains a sequence of links to other notes, putting those other notes into a particular order to create a story, narrative, or argument.
10 | Never delete: Don’t delete old notes. Instead, link to new notes that explain what’s wrong with the old ones. In that way, your Zettelkasten will reflect how your thinking has evolved over time, which will prevent hindsight bias. Moreover, if you don’t delete, you might revisit old ideas that may turn out to be correct after all.
11 | Add notes without fear: You can never have too much information in your Zettelkasten. At worst, you’ll add notes that won’t be of immediate use. But adding more notes will never break your Zettelkasten or interfere with its proper operation. Remember, Luhmann had 90,000 notes in his Zettelkasten!
I disagree in part with point 5. Often I want to simply save what others have written, with some small commentary and a link. I am not going to always do a Feynman and recapitulate everything. I often just cut and paste. Fine.
Clear goes on to show how he has implemented a digital note box in markdown-formatted text files, like this:
# 201912161352 Zettelkasten is amazing #notetaking #writing #productivity The Zettelkasten notetaking system is the best notetaking system ever. ## Links - [[201912070830-Zettelkasten-principles]] - [[201912080935-Niklas-Luhmann-short-biography]]
From the top: a title, a series of tags, the actual content which is a single sentence in this example, and a list of links to related notes.
The double-bracket notation is a feature for bi-directional linking supported by 1Writer for iPad. The rest is plain vanilla markdown, although tags are not supported in markdown, per se.
Dropbox Paper Fail
I tried to build a note box in Dropbox Paper. Dropbox Paper supposedly supports tags, but Paper’s search simply ignores the special characters. So a search on ‘#platform-capitalism’ finds all files that have either ‘platform’ or ‘capitalism’ in the contents. Not good.
I hadn’t been using tags in Paper, and now I know why. They don’t work as they should. Just take my word for it.
Typora to the Rescue
But my favorite markdown tool — Typora — works pretty well for zettelkasten. Typora starts as a great markdown editor so that covers the note side of things.
There are numerous aspects of Zettelkastening, but I will focus on just two: tags and bi-directional links.
Tags are not a core aspect of markdown, and not an extension built into Typora. However, the two sides of tags — tagging and finding tags — work fine.
I use the common ‘hash’ to denote tags. [Note: in earlier versions of this piece I used markdown footnotes, and then later the ‘+’. But I have returned to the more conventional ‘#’.] For example, see this:
Here’s the markdown text of the file:
Originally I worried that Typora would treat the ‘#’ as an indicator of a heading, but markdown requires a blank after the ‘#’ to denote a heading, so no real problem.
All of this relies on Typora’s strong search capabilities. Typora’s search for ‘#platform-capitalism’ leads to this:
There are four files with ‘#platform-capitalism’: two where I have written about tags and used ‘#platform-capitalism’ as an example, and two where I have citations to Sascha Lobo and Nick Srinek’s writing about the subject of platform capitalism.
In all cases, Typora’s search highlights the found items. Clicking on either opens the document and centers on the location where the search result is located. This works really well. I just wish that Typora would allow me to create a new file with search results, which, alas, it does not. I also cannot copy the entire search results, either.
One of the best features of tags in other systems is that they can act as the equivalent of a search: clicking on ‘#platform-capitalism’ in a file could initiate a search for that tag. In Typora, I must actually open the search window and type the tag there.
Many of today’s work journaling solutions — such as Roam and Obsidian — support bi-directional links. The idea is to capture the connection between two files, where file A references file B there would be a forward link in A to B (more or less a standard hyperlink), as well as a ‘backlink’ in B referencing A.
In many of these tools typing two square brackets — ‘[[‘ — leads to an inline search for file references. So in such a tool, I would type ‘[[platform’, and be presented with a pop-up list of possible files. If I selected the ‘2020-01-24 platform capitalism by sascha lobo’ both a front and backlink would be created in the corresponding files. The frontline would look like this — ‘[[2020-01-24 platform capitalism by sascha lobo]]’ — and act as a hyperlink. The backlink would be added to a backlinks section at the foot of the target file.
Bidirectional links aren’t available directly in Typora. It’s relatively easy to make cross-links across files, though. A control-shift while hovering over a file name in a search result or a folder list brings up an option to copy the file path to the selected file, and this can be then pasted into a file. See the reference in the first screenshot to 2020-01-24 platform capitalism by nick srinek review by Sin Yee Koh, which creates such a forelink. A backlink could be created manually in the second file, but in general, I don’t take the time to do that.
I guess my hope is that Typora might adopt the convention someday. Or I could migrate to a more rich work journaling tool. In the meantime, I simply rely on search to do the heavy lifting.
The Bottom Line
Typora can implement a basic zettelkasten in markdown, without too much overhead.
My organizational model involves three sorts of files in one folder: my daily journal files (like ‘2020-02-07 journal’), notes files (like ‘2020-01-24 platform capitalism by sascha lobo’), and project files (like ‘work futures | writing’). These are different in format and use but share their reliance on tags and links. I’ve found the system straightforward and practical, principally because of the power of Typora search.
Dropbox Paper’s search is problematically weak so I turned to work journaling in Typora, since I need to remember things, not just capture them. I also dropped Notion as a journal and zettelkasten, although for quite different reasons (see A [Wonkish] Cautionary Tale: Notion, for more information).
I guess my zettelkasten and my journal will coalesce into an infinity of markdown files, neatly time-stamped and richly tagged.