[Software] Zettelkit

edited February 27

Hi there, I've lurked around here on and off for a few years, and Zettelkasten was always in my head somewhere as a 'will do that someday'. Well more and more I find myself knowing-but-not-quite some fact or info, or knowing that I know it, but not the full details that I knew at one point, or references or sources for looking it up.

So I decided to take the plunge and implement a zettelkasten system for myself. But as I investigated it I became intrigued by the simple yet powerful idea of notes and links, and decided to try to distill (my interpretation of) its essence into a new app. Yes, the cliche of the software dev who discovers zettelkasten and makes an app. However, I think mine has some advantages. For one thing I'm intentionally keeping it quite spartan–no endless customizability, focus is very much on the core concepts: notes, links, tags, and full-text search. Data store is SQLite, with one DB file per user. Taking advantage of SQLite FTS and other nifty features.

However, in this core interface, we can put in certain interesting features, e.g. exploring a graph of links as a tree structure:

I think this enables discovering serendipitous or surprising connections between notes. You may also have noticed that I automatically link new notes to old notes depending on which page they're created on. I find this enables conveniently taking several notes around a single topical note, then linking/tagging/editing them later all on the same page.

I'm finding tagging somewhat less important than linking, but it's enabling some pretty cool emergent features which I hadn't designed for, e.g. using emojis as tags to represent specific meanings e.g. 'starred note'.

All of this is a work in progress, but I have a sense that it's going well so far (have deployed on a free tier cloud host, using minimal resources). I tried out the stress test repo and it worked fairly well (it's clear I need to implement query pagination, but the query times are not horrendous):

If all goes well, the plan is to offer the app as a paid subscription model and see where we go from there.

Cheers,

Yawar

• edited February 27

Moved to software since this is not about you but about your software and edited the title

I am a Zettler

• Well, it's both, which kinda makes the point why zettelkasten focus on linking notes instead of categorizing them 😂

• @yawaramin

Welcome to the forum and thanks for sharing! One item you may find as a roadblock to acceptance in the ZK world is that most people want their data stored in plain text files - they don't want it hidden away in a database. This means the data files are themselves software agnostic. Are you aware of this? Did it come into your decision on how to structure your database?

• edited March 1

Thanks @GeoEng51 for your insight. For one thing, I will say that I'm planning to implement both SQLite DB file and plaintext (Markdown zip file) export. Having said that, I would also like to point out that SQLite is very close to a software-agnostic format; in fact it is a US Library of Congress recommended storage format for long-term data archival.

Re: database structure, it really is quite simple, note, note_link, and note_tag (with some constraints enforced thanks to SQLite). Note content can be any text but it is rendered by running through Markdown-to-HTML conversion. I should be able to pretty easily export into Markdown files which work perfectly with Obsidian [edit: with the added bonus that I'll be able to export notes with bi-directional links automatically].

Post edited by yawaramin on
• Just as an update to this, I just wrote a 70-line Python script that exports the SQLite DB into a set of Markdown files that work perfectly with Obsidian. Lock-in should not be a worry. Users should and will be able to export and take all their notes out into plaintext at
any time.

• @yawaramin Perfect!