Zettelkasten Updates...

zettelkasten icon

I’m exploring zettelkasten-esque Creativity Systems. I am attempting to “own” my own data by building out the networked notes in markdown. I’m a vim fan, but I’m looking at other tools too.

Since I wrote my last post… there has been so much motion in the knowledge-management / note-taking space, largely due to the exploding popularity of Roam Research. Many apps have adopted Roam-like features like linking to blocks, wiki links, or graph views.

This has greatly excited me to learn and code more tooling for this kind of thinking … but it has also had a paralyzing effect. There’s so many more options out there for creating this kind of networked knowledge management, whether you call it a wiki, a zettelkasten, or whatever. Like many I don’t know exactly where to turn.

For the (three of you) that read this and care, here’s what I’m looking for as I watch this next wave of note-taking apps. I’m attempting to balance convenient accessibility and complete ownership… on a budget. :P

I still want to own my content.

This is the main reason that Roam (however wonderful!) is not an option for me. I want to be able to own, export, transfer, and transform my content however I wish. Part of this is because I’m persnickety, part of it is because I’m a programmer. It would be foolish to give up my ability to program/script against the notes that I plan to spend a life on.

I also want the file format to “work” as a Zettelkasten independent of a particular app. A helpful thought: my system should still be usable when printed.

Markdown

Markdown continues to be the way I write and store content. While it is frustrating how many standards there are, markdown still is the best option for writing that I know of (unless you are a LaTeX fan, I suppose. Latechie? Latexan?)

Being a bare text file, Markdown does present the problem of “where do the images/files go?” But that doesn’t worry me too much… as long as I have a service or server that supports URLs. Anything is automatable.

Metadata within the content of the file.

I still believe in having a stable ZK style ID. If there is unique ID (or UID) we can rename/retitle the file with low risk of irrevocably broken links.

For example: I started a zettel thought around a particular Bible verse, but over time the thought changed from simply this one verse to a discussion of the “fear of the Lord.” If the title of the thought changes, does the file name? If the file name changes, what happens to all the links?

Most knowledge management software solutions handle this using their internal database to update all the links in all the other files if the linked-to title/file name changes.

I also am in favor of all metadata existing within the body of the file. This way if I were to print my knowledge base it would still work.

This is the sticky point for most of the solutions and applications that we are going to look at today.

Trying to consider maximum future compatibility, there are the two changes from my original recommendation:

  1. Use YAML style frontmatter instead of the multimarkdown spec.
  2. Use keywords instead of tags to respect Pandoc.

(Optionally, you can change the filename structure to use spaces instead of kebab-case.)

Filename:

202011182014 Title of the note.md

Content:

---
id: 202011182014
title: Title of the note
keywords:
  - #still
  - #use
  - #hashtags
---

Body of the note should be a single thought, complete and fully formed… but not too big.

References and links can come below.

- [baseline Zettelkasten](https://zettelkasten.de/posts/baseline-zettelkasten-software-reviews/)

Apps and projects I’m watching…

For a bit there, I was trying to write my own system using shell scripts and vim. I’m still messing with that, but I’m paying attention to a couple readily available projects that seem to align with my goals:

Obsidian

This is been a favorite of many, and I really really like it. It checks nearly all of the boxes: It’s got a nice interface, graph view, ongoing development, and markdown… and a growing plugin community that is very strong. The discord is active and really helpful.

Obsidian does have support for both markdown and YAML front-matter. It works for 100% of the things I need, but not 100% of its feature-set works for file names that include the ZK ID.

This really shouldn’t stop me from using it… it supports everything I could hope to implement myself. I mostly have been holding out to see if a convention supporting stable Zettelkasten-style IDs will be settled on… but if you don’t really care about this, you should probably just start using Obsidian.

Neuron

I really like what I see in Neuron. It’s philosophy matches up with what I would like and its shell-script approach allows there to be multiple editors like emacs, vim, and VS Code.

I would really like to try it out (it seems nearly perfect for me!), but it has a really strange install method that is prohibitively hard on OS X. It looks like there is some recent motion on it though, so maybe I’ll get to test-drive it soon.

Foam

Foam is the most popular (that I can see) of the multitude of plugins for VS Code.

If you use VS Code daily as your editor, something like this makes a lot of sense. I still am hoping for something cross-form, but whatever. It’s an impressive plugin.

Logseq

Logseq is an interesting option… it’s entirely web-based, but connects to your GitHub. This means you could interact with it using any desktop editor of your choice… but you could also work on it on a mobile device or iPad natively in the browser, as long as you have an internet connection.

Basically, logseq is a roam research clone that stores the data as markdown files on your github. Pretty cool.

Even if you don’t use it as your primary editor, you could use this to work on a Simple Markdown Zettelkasten from mobile.

Vanilla Vim / Emacs

There’s nothing stopping you from doing this all by scratch. I’ve started down this path a little bit with the help of much smarter people. At the moment I’m not actively pursuing it… I want to make sure my file format / data structure is more finalized. There are folks with similar but much more mature solutions. I fear I may not have the time to learn lua/vimscript fast enough. :P

Where does that leave me?

I’m in the middle of writing a transition script to transform my existing plaintext notes, book notes, and baby zettelkasten (V1!) into the “new” format with YAML metadata. I haven’t given it the attention it deserves, so now I have the old zettelkasten, new notes, old untransformed plaintext notes… I put myself in a place where I have notes everywhere in at least six formats. It’s a problem.

Over the next few days, I’m probably going to resume the Sisyphean effort of working on my notes… (I last time I counted there’s about 2k files in my untransformed folder!) but I thought I’d post what I’m thinking heading into it all.

If anyone is further down this path, I’d love to hear about it. It’s a great time to be refactoring and rethinking your note taking options… just don’t get stuck mid-transition. 🤮