Knowledge Management with Zettelkasten and iA Writer

In this post I will talk about my personal knowledge management system, how it developed into a Zettelkasten, what Zettelkasten is, and why I think iA Writer is pretty much perfect for it.

Background

Finding a stable, reliable, and pleasing way to digitally organize personal knowledge has been a pet peeve of mine since I first got a computer. I’m for taking notes while reading, and in general I jot down whatever piece of info I believe warrants doing so. As such, my pile of files quickly started growing.

At first, I didn’t really care much for organization. I’d just place files wherever it seemed fit, without rule or method. Realising the error of my ways, I created a folder structure, trying to fit my notes into neat categories and sub-categories. But what if a note fit into more than one category? What if one category itself belonged to more than one parent category? I quickly figured out that this stuff is not hierarchical, it’s instead a mesh, a latticework so to speak. Apparently, a more holistic approach was necessary, so I just threw everything into the same folder. That was actually an improvement, even though it might not sound like it. Still, it didn’t look like there was any semblance of organization, it looked and felt more like an “everything bin.” Over time, I started using #tags, and that was a band-aid. But we can do better.

Zettelkasten

This is where Zettelkasten came into play for me, and it felt like a rather elegant development over my own haphazard method. The friendly folks over at zettelkasten.de have explained the system much better than I possibly could, but I can give a short overview.

First of all, Zettelkasten1 is a note-taking and knowledge management system. Its fundamental unit is the Zettel, which is a single note. A Zettelkasten is a collection of such notes, so a folder. What separates the Zettelkasten from the “everything bin,” though, is the level of organization and interconnectedness between notes. Each note equals one file, and the filename always contains an “unique identifier,” which is usually the date and time of creation squished together.2 Linking between notes is not only possible but encouraged, through use of these unique IDs. No matter what software you use to manage your zettels, you can always refer to other notes through their IDs, thus ensuring everything you write is “permalinked.” When you want to actually access the linked note, if your software does not allow for interlinking, you can always just run a search for that ID number.3 Zettelkasten-ers are also encouraged to use tags in #this form, so that searching for that tag in the database will pull up all related information. In general, users should try to keep a note limited to one topic only, and if necessary, to go even smaller than that, to then link them together to form a sort of latticework. Sounds like something I needed! However you can see how without a software with fast interlinking support this can be a real chore.

This was only a very brief write-up, more can be found here.

One thing I like about the premise of this method compared to, say, people telling you to just use Evernote is that it’s completely software-agnostic. It’s just a framework for you to then figure out how to do it yourself in the software of your choice. Mine is, as readers of this very young blog might know, iA Writer.

iA Writer

Christian and Sascha, the peeps running zettelkasten.de, have a page outlining all software the Zettelkasten method has been tried and shown to work well with. I’d like to add iA Writer to that list, as I think it ticks pretty much all the boxes.

The Files

Zettelkasten is all about a folder with lots of notes in them. Writer uses the same paradigm to work with files. You get your (collapsible) library in the left-hand side, and the editor covering the rest of the window.

These are some example files I’m using to stress-test the app, if you were wondering.

Note Creation and Retrieval

With the app open in the foreground, a quick shortcut (⌘⇧N) creates a new note, which will have as name the first line you’ll type in. As far as I am aware, there is no way to create a new file when the app is in not in the foreground like the Archive4 does, so that’s something to keep in mind. In my case, the app is always just a Cmd-Tab away, so it’s not really an issue. Overall, a new note is always either two or three keyboard shortcuts away.

With another shortcut, (⌘⇧O) you can perform a quick, full-text search of all of the locations you added to your library. In the short clip below, I perform a number of searches in a 10’000 file library, search speed seems to be satisfactory.

Full-text database search at work on a set of more than 10’000 Markdown files.

Data Export/Import

You can choose to use an already existing folder as your library, and the files you create and manage are good old plain text. No vendor lock-in and ensured longevity. The app can see the file structure on your computer and fully respects it. New notes are simply text files, the extension of which can be changed to whatever you wish from the app’s settings.

Tags

Want tags? It’s got tags. With a click, you can get an alphabetical list of all of your tags. And if you use the pound sign for other purposes as well (maybe you’re a programmer) and don’t want something that’s not a tag but starts with the pound sign to show up in the list, you can just escape it with a slash.

Multimarkdown

iA Writer supports the latest and greatest MultiMarkdown specifications, so that you can create, as I do, a front matter5 which will not be displayed should you choose to print out your Zettel or export it to PDF. It supports inline footnotes with [^this formatting] and the rest of the MMD goodness.

Note Connections

As mentioned before, linking is important for Zettelkasten-ers, and Writer supports x-callback-urls so that each note has its own link, which you can then paste into your notes. In fact, you can use this link to open that specific note not only from Writer but from any other software which allows you to open links, even a web browser for instance. And if you’re a developer, the possibilities are pretty much endless.

It’s not [[WikiLinking]] though, and admittedly it would be great if they made that addition.

Concluding remarks

Writer has a very small footprint on resources as it’s quite minimal and it’s a completely native app. It’s multiplatform so that if you wanted to, you could put your Zettelkasten folder in iCloud and access it from your iPhone or iPad as well. A Windows version of Writer also exists.

The app’s design is, I think, one of its biggest strengths as well. In fact if you’re a user of The Archive, I have made a custom theme for it which makes it look like Writer. You can download it here.

The fact that after creating a new file the first line becomes the filename opens up some venues for automation. I have created a text expansion snippet which automatically gives my zettels the right title and front matter, and allows me to create tags. To create the title, it types it up in the first line, presses enter, then goes back and deletes it. See it in action: (download the snippet here)

I plan to write more about the Zettelkasten method as I get more and more used to it. Thank you for reading.


  1. I will keep capitalizing it because it just feels right for a German noun
  2. Like so: 201901162141
  3. More on that here
  4. Ok, so the app is actually called “The Archive.” When referring to it, should I say “the The Archive?” I don’t think so, but a question for the grammar nerds among us nonetheless.
  5. in YAML too, if you want to.