Scrivener & Zettelkasten

I have begun the transfer of my physical Zettelkasten to Scrivener; I am pretty confident that Scrivener has everything that one might need to implement a robust digital Zettelkasten.

There was a discussion on the Zettelkasten topic some years ago, while version 2 was the active version, or so it seems.

I would love to hear from others who are using Scrivener to implement a Zettelkasten, or something similar, in the current version 3.3. What has worked for you? What has not worked for you?

I have not yet started to work with #hashtags or keywords; so any tips, suggestions, warnings and such will be nice to hear.

I will be posting some of my own implementation ideas when I come up with something worth sharing.

(ps. I could not find the ‘usage-tips’ tag for making this post; sorry for the mis-tagging.)

1 Like

There have been some more recent discussions as well. Here are a few that may interest you:

  • The merits of different linking methods for ZK style titles. This started out with a fairly specific question, but the discussion went into some various different areas of usage.
  • General usage for note-taking. Here the discussion was not about ZK specifically, but there is a huge area of overlap with general note-taking discussions and that, since most of ZK is about what you do in the note itself rather than around it. It’s the latter part that Scrivener is going to be exceptional, whereas in my experience it’s the other way around for most other tools of this nature. The organisational systems are quite simple and depend almost entirely upon content cues.

I think that’s probably a good starting point, since both of those branch out with links to many other discussions (some overlapping).

As you will read, I am very much in favour of putting the ZK ID into the binder title. If that is all you have to look up a note by (which is how I do things anyway, for brevity) then there are more tools for title look-ups in general, like link completion, or Quick Search which favours matches the start with the text you typed, or even how you can right-click on any text in the editor and it will look up titles that contain the text you clicked on. It will help you build hard hyperlinks better, and also make it so you maybe don’t need quite so many hard links (similar to how some tools have an “Unlinked references” listing).

This is something I did mess with a bit, but as I never really got on board with the proliferation of topical keywords, preferring instead to have a more procedural and compact hierarchical designation, so this feature never helped me out much. But if you’re the sort that gets benefit from putting #topic_a, #topic_b below a title line, then yeah Keywords will work for that. Scrivener’s implementation may leave a little be desired, I’ll warn. It depends on where you come from and what you’ve enjoyed using in other tools, but it is decidedly a bit old-school and in much need for modernisation. The world has moved on with this idea, since its inception (it came from an era when people thought of keywords as a type of database field you query against, not as agile tags that are a construct of both preparation and a reaction to usage as content).

I have begun the transfer of my physical Zettelkasten to Scrivener…

To jump back to this one: if you have a scanner or some other efficient way of making the original card digital, Scrivener’s split view is extremely efficient for getting bulk notes over and transcribed. Some commands and tips that can help you out there:

  • The Navigate ▸ Go To ▸ Next|Prev Document shortcuts. With this you can flip up and down between entries in a folder.
    • However, what I like to do is use that shortcut to very quickly skim through the whole “stack” in the folder. What that does is populate the editor history with each card, one after the other. Hold that thought…
  • In the split you are using to type them up, Ctrl+N / ⌘N makes a new card and keeps the cursor there so you can get straight to typing up the next card.
  • Ctrl+Tab gets you back and forth between splits easily. Close the binder for even more efficiency, as this shortcut by default rotates between binder, editor 1 and editor 2. With the binder closed you get simple alternation.
    • Now back to where I was with the card split having all of the cards in history. Instead of jumping back and forth between splits and using the Next|Prev shortcut, check out Navigate ▸ Editor ▸ Forward|Backward in History. Putting two and two together then, you can be typing up one card, get to the end of it, hit the shortcut to make a new chunk of text to type into, then the shortcut to flip backward in history in the card split, without moving your cursor around, and thus keep typing away.
  • Lastly, in the typing split you may want to quickly get back to a card you already transcribed, if you spot a connection that should be made. The normal history shortcuts can help there, but also remember you can flip to Corkboard view, arrow up to where you want to go, and then use Spacebar to dive back in (if that opens a separate window, you can change that in the Behaviours: Navigation preference pane (on Windows, that’s just how it works, no options, and very weirdly, it does not work from the Outliner). So that can be better for “longer distance” jumps, but of course once you do that a quick Ctrl+[ / ⌘[ gets you right back to the card you were transcribing before going on a tangent.

It may seem like a bit of fluster, but if you’re like me and have hundreds if not thousands upon thousands of bits of paper to transcribe, then every little reduction in the checklist of shortcuts or mouse clicks involved matters! Eventually these shortcuts become second nature and you’ll be flying through cards, thinking of little but the content they contain.

3 Likes

The inventor of the Zettelkasten (Luhmann) wrote about 80,000 notes (Zettel) with cross-references between 1952 and 1996. Let us assume

  • Note A was written in 1963.
  • Note X was written in 1995.

On note X there is a reference to note A.

How did Luhmann remember that there was a note A when he wrote note X 32 years later?

He likely didn’t. I suspect the old note came up by browsing through other “linked” notes regarding a given topic and then he added the reference.

That’s right. Many references are written with a different pen than the note itself. So they were added later. Where there are no references, nobody knows whether this is correct or whether Luhmann only forgot them.

I think the concept of forgetting something you did, and later stumbling across it and documenting that (the “A” on “X”) is part of an overall system that strives to combat that problem, both at the inception of new data and in the discovery of old data through link networks or other binding mechanisms. It’s not going to be perfect, and it will ever be evolving, but that it is capable of “self-healing” and that it optimises itself over time is one of its merits.

Another thing worth considering is that most of the things I wrote even just 25 years ago are garbage. I’m fine with them being in the dark, and so I’m glad I didn’t spend an inordinate amount of time cataloguing them. Does that mean I now and then fail to find a gem? Surely, but we do also have much more powerful tools these day to fall back on, like sophisticated and fast searches. That is where a tool like Scrivener can help, in that it has a lot of architecture established for finding things. That architecture is only a force multiplier if your data has some kind of system embedded in it that aids in finding things more directly, in a human curated sense; again, “A” on “X”.

Or I guess another way of putting it is that adopting these systems designed for finding things you wrote about without sophisticated technology, into a context where that exists, doesn’t hurt anything at all and only makes both systems more effective.

That has been my experience anyway.

Speaking for my own methods, it was designed in the age of this sophistication, and so is very much optimised toward making search even more powerful. So when I speak of falling back to search, it’s not like I’m going from “missing links” to absolutely nothing and using inefficient raw word searches through millions of words of content on everything from Scrivener to recipes for curry, stretching back decades. There are other fail-safes in the system that make searching more useful.

For example: how I dug up the links for this post. I know that using Scrivener for note-taking is a fairly common topic that pops up, and I know it’s something I’ve written a lot about, so even if I don’t have a specific post ID in hand to start following a network of links, I don’t need one. I can run a search that pulls up a list of entries in the archive that exist solely to collate notable data about a topic, beacons if you will. I searched for that, moments later located the right beacon. Now I’ve got an ID—and not only that an incredibly useful ID. By searching for that beacon’s ID, I generated a big list of chronologically sorted writings (never mind the writings the beacon entry itself enumerated), and seconds later had these the two hyperlinks on hand to write the post around (which was of course subsequently archived, and linked to the beacon ID so that it is now part of the super cluster that is using Scrivener for note-taking).

2 Likes

@AmberV Thank you kindly for all this information; I knew that Scrivener would be very well suited for implementing a Zettelkasten, I had no idea how much power there is, not only to address all the needs of a ZK system, but to create and customise solutions to detailed needs. The functionality pointed to in those Posts requires some practice, and I can’t wait to become proficient in it and be able to use it creatively. Will have some questions along the way… in the meantime a huge Thank You!!

1 Like

of course (!) you did the search in your Scrivener not in this forum, right?
… the “big list of chronologically sorted writings” where does it appears, in what form? is a clipboard, a new document…?
thanks

Here is a recent discussion, where I shared how I preserve notes in greater detail (scroll up to the OP if that’s coming too much out of the blue).

Scrivener is a front-line tool for me, a place where writings and notes start, and eventually conclude (or fade away). Once they reach that point they get compiled or exported to Markdown, where the content joins the place where the nearly nine million words of the overall archive is stored. That exists as hundreds of thousands of simple plain text files, that all manner of software can open and work with, including my own—I have written extensive scripts for creating and managing my notes.

It is stated in another thread I think, than the one I linked to, but for a good while I did in fact use Scrivener as a “short-term memory” system of the overall archive. I had the most recent two or three years imported into it, and did all initial writing of notes there, great and small. It’s incredibly good at that, but I don’t use it that way any more because having data solely hosted inside of software is too crippling for how I work.

This system has gone in and out of several programs over the years, some for quite a long time too. One of the nice things about the system is that it was designed specifically to not need software, to even work in notebooks and index cards. It has no technical requirements. So, by extension, it gets along comfortably in most software.

2 Likes

thanks, long reading
then I come back
KISS!

1 Like

could you please be so kind to find that thread? TIA

I never really did put down a single post that described my whole process of using Scrivener as a front-end to this system, in part because for the majority of the time where I was using it like this, version 3 was still in beta builds, prior to its release—so I couldn’t talk about it. :slight_smile: That process helped inform and streamline the design of the software though, to be even better for note-taking.

That is not to say it isn’t described anywhere, though. Almost everything that was developed as a way of using Scrivener like this are things that have ended up being explained in that big annotated list of links, which is the second bulleted link in this post, above. Many of those thoughts and ideas for using Scrivener for this purpose are the result of that multi-year experiment.

1 Like

@AmberV , might you be willing to walk us through this? How is it that you run a search that exclusively pulls upon your ‘beacon’ notes? Is ‘beacon’ another name for your ‘binding notes’?

I don’t know how AmberV does it, but assigning the keyword “beacon” to such notes would be an easy solution.

I don’t know how useful this will be in general given how dependent a lot of this is on the mechanical qualities of how I archive text—but here are three ways you can do this with a system that is set up like mine.

Firstly, yes, I was using the word ‘beacon’ to describe a type of ‘binding note’. The important concept to grasp there is that any note can become a binding note, in a similar way Zettalkasten works (I think), but some notes in my system pretty much exist solely for that function, rather than actually being something else first (like a chat log to tech support) that ends up being so cross-referenced that it binds a bunch of technical resolution stuff together.

It has a formal classification too, rather than my casual use of the word ‘beacon’, which we might as well get into…

Command-line tools

You may have no interest in CLI stuff, but don’t skip it, as this is where I’ll explain the mechanics of the system a little bit.

$ find . -iname "*i1.1.thread*note*"
./ark/22/22334834 I1.1.Thread  using scrivener as a note-taking tool.md
ag -l 22334834
(Many Markdown files are returned...)

We start with the native find tool to look for any titles that contain the phrase “i1.1.thread” and “note”, case-insensitive. Asterisks can be used wherever you are unsure, the more you leave to “globbing” or wildcards, the fuzzier your results, but that might be just what you need if you barely remember anything about what you’re looking for.

The line after that prints the result, the path to the Markdown text document that serves as the ‘beacon’ for this particular thematic cluster of thoughts: ‘Using Scrivener as a Note-Taking Tool’.

“I1.1.Thread” means: “Information.Internal.Meta.Thread”. I1 relates to any form of information I generate for myself, like I1.2 which tracks all productivity notes, tasks, projects, etc. I1.1, or “meta” tracks information about the very archive itself, or its usage, within which we are interested in threads, common ongoing topics that get written about a lot.

If you do this all of the time, and you know your own taxonomy like the back of your hand, at this point you’re about 10 seconds into the look-up (less if you alias ‘find . -iname $1’ to an abbreviation like I do).

And now I have that ‘beacon’ note’s ID number printed to the console, which is the compact date stamp at the beginning of the file name, ‘22334834’.[1] That is not only this note’s date and time of creation, but its unique ID number among all other notes. Thus, if I run a full content search for this ID number across all notes, I will find everything that refers to it somewhere within its text or metadata block.

Now for the third line, which depends upon an excellent multi-platform utility, The Silver Searcher. This is a super fast command-line search tool that, like grep, can trawl through hundreds of thousands of text files in a fraction of a second, and the -l flag makes it return only a list of relative paths to files, rather than including a hit synopsis (like a web search might do). I get a list of note filenames, such as in this excerpt:

ark/22/22240405 M2.1.Usage  building a ticketing system for tracking edits.md
ark/22/22308894 M2.1.Usage  on the benefits of freeform tools for notetaking.md
ark/22/22334800 M2.1.Usage  scrivener and bi-directional linking.md
ark/21/21031547 M2.1.Usage  project template for scratch pad replacement.md

From there I could run gvim ark/21/21031547 (gvim being my text editor of choice for this kind of stuff), hit Tab to auto-complete the rest of the name and open the file for “Project Template for Scratch Pad Replacement”. If I was just looking for that one note out of the list, I’m at maybe 20 or 30 seconds into the search, most of which was spent look through titles, and could be trimmed by adding ‘scratch’ to the search. I’ve gone from nine million words and hundreds of thousands of files to that one thing I wanted in well under a minute.

But I have other tools for other tasks. Say I’m looking for the URL because I want to read it in a browser instead of a text editor, head -10 ark/21/21031547 and Tab will get me that, as this prints the first 10 lines of the file to the console:

$ head -10 ./ark/21/21235531\ M2.1.Usage\ \ setting\ up\ a\ default\ project\ notes\ scratchpad.md
---
Title:       Setting Up a Default Project Notes Scratchpad
Author:      AmberV
Date:        '21235.531'
URL:         'https://forum.literatureandlatte.com/t/way-to-have-notes-stay-open-in-inspector-regardless-of-file-or-folder-chosen/119315/24?u=amberv'
Tags:        '{M2.1.Usage}'
Aliases:     '21235531'
Domain:      LnL
PDSVersion:  v20340
---

But if you’re a nerd like me, system tools like that are good to know and use, but if you do that a lot, you’ll want to write your own scripts that parse Markdown metadata and give you what you want. For example:

ag -l 22334834 | mdmeta -url

This takes the search result list and pipes it to a script that would print the full Markdown metadata block for a list of given files—but with the -url flag only prints the URL values, one per line. I might instead want to use the -seealso flag, which would print the interconnection references between items that make this stuff work, where I would at the least find “m:22334834” among each of them (most likely) which means it’s a meta reference to that ID—the Thread note we started with on note-taking in Scrivener. That line in the Markdown block is how we got to these files in the first place, and might contain other useful cross-references too.

Pipes are super useful, I can throw another one on after the above, and pipe the list of harvested URLs to my browser, having them all open as tabs in one shot. Once you start gathering, formulating and pushing data around between utilities and even into GUI software that supports CLI access, the possibilities are endless.

Markdown Editors

So that’s the nerdy “computer hacker” way of doing things, but that is precisely why I like having my notes as files rather than “inside” of a database or project like in Scrivener, because I can use system tools like this when I want to, when that is most efficient. But loose files can be useful to other things too, like multi-file text editors, such as Visual Studio Code, Sublime Text and Obsidian.

While these programs tend not to be nearly as fast as Silver Searcher, they do offer certain advantages for browsing. Instead of having to gvim or head -10 each file name I’m interested in, I can flip through them one by one in a sidebar or something.

Speed aside, most can usually do the above just about as efficiently (usually with more mouse waving though). For example in Obsidian there is a saved search for “I1.1.Thread”, which I can then add ‘note’ to the search term, that returns the note-taking thread with its text in the main viewer. I double-click its ID to select it, and press CtrlShiftF to search for the selected text… which returns the full listing Silver Searcher gave me, above. With other programs, the route may be slightly different, but you can get there.

Scrivener

With Scrivener you may have a Search Collection (saved search) for stuff like this, which you can right-click in the editor header bar to load, then CtrlF to filter further if you need. Copy the ID from the binder item’s name and drop it into Project Search to get the same list of notes.

(On refresh: Or yes, if you were deep into using Scrivener this way, you might want to use Keywords instead of a text-based classification system, as @kewms notes, those work great with Collections too.)

Scrivener is no slouch at racing through interconnected data like this, in other words. I had no complaints with how agile it was. To go back to my “m:22334834” example above, if I saw that in the SeeAlso metadata area, I could right click on the ID number and Scrivener will pull up the note that contains that ID in its name. Click on it, and I’m off, I don’t even have to search.

It might seem funny that I’ve written so much about using Scrivener for taking notes while this system isn’t in it, but hopefully the above better illustrates why. If I wasn’t a programmer, or I didn’t use Markdown and preferred rich text notes (way more difficult to work with using the above tools), then I would be happier with more containment, or I guess a better way to put it is that I would have fewer reasons for things to not be “in” a software’s GUI and by extension be largely inaccessible from outside of it.


  1. 22-334-823: 2022, 334th day of, 0.834 duration within. Or, 2022-11-30 20:00:58 in long form. ↩︎

3 Likes

A post was merged into an existing topic: Creating both a workflow for note-taking and an organized system for archiving them

I don’t want to spoil anyone’s fun. But if you assume that a Zettelkasten is a database that is constantly growing, then I wouldn’t recommend anyone to do that with Scrivener. Scrivener projects are not made to grow endlessly over the years.

Without going into details, I suspected it, tried anyway and failed.