Link-tags! What are they?
I don’t love the term, but it’s functional and apropos for comparison to the much-more-common note-/file-tags (or just… ‘tag’). If you have a better term, please chime in! The basic idea is while a ‘note-tag’ acts as a broad, categorical label for an entire note, a ‘link-tag’ acts as a broad, categorical label for a single link within notes – they live at the level of individual links, while note-tags exist at the level of entire notes.
A note-tag allows a note to belong to multiple collections of notes, and ideally (but anecdotally, rarely) helps resurface the note when you want to find it later within a specific, categorical context.
A link-tag, on the other hand, categorizes the link (duh) between two individual notes. The link-tag’s purpose is double: To resurface targeted, specific links when you want to find them later (rather than an entire note), and also to provide a formalized context for why that particular link exists.
Link-tags, or something like them, have come up a few times in different discussions on Slack, github, or here (see #572, #627 and this post). I’m a huge fan! So I made something I plan on using. In #627 bdarcus challenged new feature requests to present 1) Concrete use-cases, and 2) Some kind of grounding in zettelkasten, or at least the spirit of org-roam, to show why it may be a good idea.
I accept the challenge! If you are already mind-linked with me, skip to the bottom to see a demo (feedback, please!). Otherwise this is a bit of a long post, since tags generally have a bad connotation in places like https://zettelkasten.de/, and community discussions on ‘link-tags’ have not generally been focused or formalized.
Spirit of Note-taking
Personally I identify three inter-related key components of using org-roam (or any other note-taking method) for personal knowledge management:
- Notes are stored with a mindset of, “in what context do I want to see this again?”
- Notes are written with an emphasis on synthesis and content creation
- Notes avoid the ‘collector’s fallacy’.
The digital zettelkasten method addresses component 1 by linking notes together and providing a retrieval system. I think including link-tags doubles-down on this component and as a bonus includes component 2 (avoiding collection habits is just up to the user).
With a link-tag you form an intentional, meaningful relationship between two notes at the time of link creation (or mark up an existing, tag-less link). While the default modus operandi is vanilla references (an implicit, universal link-tag), when it is warranted you can make the extra connection to conceptually link two topics together. A vanilla reference alone only collects the relationship, but does nothing to add synthesis of ideas.
You could do your synthesizing in the text surrounding links – this must be done when you have no other options – but this has disadvantages compared to a simple link-tag. The context is not formalized, and otherwise similar types of context will likely be inconsistent with each other over time and across notes/links. This makes search and review difficult. The note is not easily resurfacing when you want it to.
To be clear I am not suggesting you don’t write around links. However, many paragraphs of text boil down to describing certain types of relationships between the current topic and a reference you link to. When scanning for notes/links, a wall of descriptive text obscures the context in which links appear, adding friction to writing and comprehension. A link-tag cuts through the noise!
A key benefit of the note-graph is that it is, generally, flat, and any note can connect to any other note. Folder and note hierarchies are toxic! Hiss, boo!
Inevitably a note-graph accumulates a lot of notes over sets of topics, and it can be advantageous to create ‘structure’ or ‘index’ notes. These curate links over a subject area, permitting top-down navigation of a topic.
Structure notes certainly have a place in the zettel-style system, but they also have potential issues (YMMV). Their purpose is to curate links to notes, and can therefore encourage a collector’s mentality as well as drive creation of pseudo-hierarchies (a structure note for structure notes. Boo!). Once you’ve collected all of the links, you then have … a lot of links. The index doesn’t spur coherence or synthesis (some posts on https://zettelkasten.de lament curating a structure note with a broad view of their research subject, but having no actionable connections between the notes when it came time to write).
Additionally, the manual curation process is an interruption to reading/writing. You must stop, switch context, add a link to an index note, then return. This emphasizes an anti-pattern of collection, not creation. Finally, although an index/structure note in theory is just like any other note and may be linked to/from, in practice it is treated as special – it may even get a fancy file-naming scheme. Boo, hiss! Notes should be flat!
Alternatively, using link-tags as the entry point for introducing structure within your note graph can help alleviate some of these problems. It is trivial to tag a link as ‘index’ or ‘concept’. There is no interruption to workflow, and structure can be curated as easily as writing any note. A note you link to as ‘index’ is not preemptively bestowed with special status; its content and links grow organically as you write.
This also allows any note to have many different relationships, and not simply ‘index’ or ‘structure’. This brings me to the next section:
A fun word! It describes things that are so recursive and inter-relating that nothing can be said to be the bottom or the top (a heavily connected network of relationships), although a hierarchy of relationships can (and often do) emerge naturally.
The important distinction contrasting it to a hierarchy is that in the heterarchy the organically derived relationship is the key property; not the node itself. Something like a structure note implies hierarchy (even if it doesn’t necessarily prescribe it), because the node is considered special.
The motivation of the note system is to achieve a heterarchy, though – a flat network of links between thoughts. The structure note is necessary only to wrangle the tangled mess of links into something navigable. Using link-tags to define relationships between nodes is not only an alternative way to craft structure, but it may be better (TBD something something personal preference…).
A strict hierarchy potentially loses information, certainly restricts the flow of information, and inevitably promotes further division and categorization. A heterarchy on the other hand allows hierarchies to grow within itself organically with relationships: The nodes are flat, and one node is not greater than the others.
Personally this is something I plan on using myself. Using a link-tag, ‘index’, to indicate that I want a different note to serve as the ‘index note’ for my current note. I can link to as many ‘index’ notes as I feel are appropriate. Even better, the decision and curation is done within the note itself.
This gives me more freedom, and less friction! Additionally, while reviewing the note I can quickly see what note(s) serve as an index. You could also do this with file-naming schemes like #index and ##index but boo, hiss! I don’t like naming schemes, and this works against my heterarchy.
I haven’t yet made use of daily notes or org-journal, but I have seen people lamenting that they are potentially polluting their note space (especially in graph view) with lots of links to/from daily notes.
With link-tags, any/all links in a daily note could be labeled as ‘daily’ in order to add links where you want them, but filter the same connections out of the graph/buffer when you don’t want to see them. You could already hypothetically filter out dailies with a naming scheme or note-tags, but a link-tag gives you more precision (in case you want some, but not all links to show up. You could also apply the ‘daily’ tag outside of the daily note if you wanted to without fear).
A link-tag could help with inbox-style aggregation of things you want to only temporarily connect, or plan to later follow up on (marking things as ‘read’ or ‘todo’ or belonging to ‘projectA’).
Other aggregation methods work just fine (note-tags, linking to a specific aggregation note), but a link-tags gives you more context, specificity, and flexibility. And, since the link-tag communicates across two notes (the one the link-tag points to, and the one where it is written), it is easy to stumble across a note you flagged for some kind of follow-up but subsequently forgot about. In comparison, a central aggregation note requires you to visit it and parse the entries, and a note-tag approach is generally non-contextual, non-specific, and only touches a single note.
Of course, both styles can happily thrive together with no interference!
Link-tags may help to distinguish between your own thoughts and other simple, factual notes/references. If you only have a single link relationship to work with (the link itself in org-roam and basically every other zettel system), you must structure the way you use the link to encourage forming new thoughts, and not simply the collection of links. Link-tags help encourage synthesis of your personal thoughts as you take notes. When you re-visit notes, you already have context for a connection (rather than only seeing that a connection, any connection, exists period).
A bit like structure, a bit like context, a link-tag lets you add formalized breadcrumbs for your thinking process. When writing a new concept-level note built from several research papers, you could use link-tags like ‘hypothesis_of’, ‘conclusion_of’, ‘refuted_by’, ‘derived_from’, etc. This type of usage is ‘derived_from’ learning about neo4j (and other graph database) schemas.
This is again a personal use case for me. I have a lot of notes I take over papers and methods that involve references to other papers. When I’m trying to synthesize new ideas from all of these notes, it is very helpful to classify exactly what relationship a paper has to an idea.
Rather than wading through paragraphs of explanations just to get a snapshot, I can see a list of papers/notes-about-those-papers that expound key ideas, critiques of those ideas, where I might find free-form open-ended discussions, which papers reach which conclusions, and which papers prescribe novel methods.
As a bonus, when reviewing a paper I’ve used in my notes I can immediately see where I’ve referenced its hypotheses, its methods, its conclusions. This makes it easy to link/discover different review/concept notes that both reference the paper, but don’t have a link to each other. With some additional tag-types, I can immediately get snapshots of both where the paper is applied and where it is discussed (eg. ‘refutes’ and ‘refuted_by’).
Of course you can manage around all of this without link-tags. I think link-tags make this process much more sublime, though.
You could use link-tags for literally any graphic relationship you wanted – PersonA is ‘friend_of’ PersonB and ‘enemy_of’ PersonC. If I need to interact with PersonA next week, I can go quickly look up a list of their enemies! Muahah! While there are obviously alternative solutions for this type of scenario, it is something you can’t formally and consistently achieve with file-naming schemes or general note-tags alone.
A comment on this post brings up an interesting use case:
You have a note on a prolific author. You have other notes that discuss the author’s work, some more notes that discuss things written about the author, and still more notes that detail interactions the author has with his contemporaries. Now when you link to the author note, you don’t know what the link is for without re-reading notes over and over.
The commenter solved the issue with multiple highly specific note-tags. A link-tag is much easier. Just link to the author like you normally would, and add a tag defining what the context of the link is: [link:author-name::about].
Good vs. Bad tags
The consensus in posts like this is that prospective note-tags (guessing the topics your note will belong to when you want to find it in the future) tend to end up being noise, and are generally unhelpful. What can be useful, however, is tagging a note when you actually use it for something.
In my opinion, a link-tag is even better, because by definition it is assigned on use! There is nothing prospective about it. The link-tag is also more specific and constrained than the similarly used note-tag.
Another post discusses the difference between ‘object’ tags (good) and ‘topic’ tags (bad). Topic tags tend to be tooooo broad, and aren’t helpful on search/filter – hundreds of notes under a vague topic with no relation or connection to each other.
‘Object’ tags are, “… specific to the objects I use and mention … The connection in itself should be a piece of knowledge that adds to the value of my archive. A precise, lucid, and insightful connection should be placed.”
Topic vs. object also suffer from the fact that they are both note-tags and the styles shouldn’t be mixed or you can muffle the effect of your good, useful tags. A link-tag however has no conflicts, and happily lives alongside any style of note-tags. They are their own entity. Best of both worlds!
Inspired by a Conor White-Sullivan twitter rant:
“…writing is a tool for thinking, it is a way of expressing our thoughts to ourselves.” Any time I add a link, I should be able to aswer ‘Why am I linking to this note?’. A link-tag helps express my thoughts in the moment for my future self. They empower me to think, and not simply to blindly link
Each article/book/etc. will fit into multiple places in your notes. This is why hierarchies are boo-hiss-bad! and zettel is hooray-good-confetti! But even zettel falls a little bit into the hierarchy trap with its structure notes and topic tags. A link-tag lets an article/note about a subject be what it needs to be in the moment without changing the core content of the note/article itself.
In the future you might read something that invalidates a past line of thinking. There is no way to simply fit this into a structure note, and the two (or more) conflicting notes are otherwise living isolated lives. You might have a paragraph around a link indicating the conflict, but this is not enough – there is no ‘pop-out’ of the conflict or the context. Even if you review the paragraph later to understand the context in which the link was made, the criticality of the notes’ intersection is not made clear enough.
A strategic link tag like ‘refutes’ makes the connection and context immediately clear.
Questions / follow-up
What do you do if you want to link to something, but the context is in the form of a question? Something you’d like to follow-up on, or think about later?
You can stop writing and add something to a todo list, but this is an interruption (and maybe you don’t really want it on a todo; you just want to leave a reminder). You can leave the question in writing as context, but gross! Now you have to read it, and you have no filters or reminders.
It’s much easier to just add a link-tag! The whole note is not a question, after all, but now you can immediately see a specific question you came up with while writing. The interruption is minimal to none. You can leave it for a day or a year.
Long bib notes
There are a few different styles and preferences I’ve seen about long-form notes over eg. textbooks. I won’t prescribe general solutions since this is mostly personal preference, but link-tags open up possibilities in style for longer notes.
You’ve got a book about birbs . It’s long and you take a plethora of notes on it in a single document. You know some sections relate to other birb concept notes you have, and want to link them.
Rather than having to write out what/why you’re linking, such as, “This section is a criticism of theory X”, you can simply note, “Birbs are only okay, overall [link:birb-theory::criticism]”. Org-noter would keep that note synced with the section of your birb book. Months fly by, and now when you are writing a hipster blog post about birbs , you can pull up your birb-theory conceptual note and immediately locate links that hold criticism of the theory (and with org-noter a direct link to the original source/inspiration of the criticism).
The note reappears in the context you want it, when you want it!
Notes should be ‘evergreen’ – written to organically grow, evolve, and accumulate over time across projects. They help to develop insight and encourage thinking. They should be concept-oriented, densely linked, and use associative ontologies (explicit, labeled connections) rather than hierarchical taxonomies. I argue all of these requirements point to using link-tags!
Note-tags are generally ineffective associations because they jumble disparate ideas all together without contextual reference. A link-tag also jumbles if you just search generally for a link-tags over all notes, but the attachment to a specific link helps keep their context highly-specific and associative. It helps to answer, “in which context will I want to stumble upon it again?”.
- “The process of thinking about the relationships between items is part of how you can ‘Do your own thinking’.”
- “You want your associations to be high-signal so that you don’t have to try to evaluate some unordered list of links. Being able to quickly evaluate such a list without navigating among the items requires that you remember what all those items contain. Tightly-curated associations will be higher-signal.”
Implementation of link-tags
- Extremely low threshold for writing (easy to just keep writing on a link)
- Completely optional (zero effort to NOT use them, just like normal tags)
- Able to use multiple tags on a single link
- Co-exist with note-tags (they serve different purposes)
- User-intention agnostic – do whatever you want!
Usage / Demo
I’m showing link-tag use with the custom roam-link I made (see #592 and my post if you haven’t). They can definitely be used with standard org
file: links, but that requires adding a little complexity. If link-tags end up in org-roam then the exact implementation should be discussed, so I didn’t spend much time with the
file: link component.
The key implementation detail is to have a tag separator to identify which part of the link is the ‘note’ compoenent, and which (if any) is a link tag(s). I chose double colons
:: since they’re simple and it seems unlikely that any notes will use them in a title (they can be escaped in the title if it does happen), but it’s trivial to change that detail.
A few added functions parse the TITLE from link-tags, so all the normal link functions work. The ‘links’ table in the database gets a new column ‘tags’ (null permitted) where tags get saved along with the corresponding link itself.
The tags get a separate face for visual pop, but the specs can be set to look like the link face generally if a user prefers uniform font-locking on links.
Inserting links and link-tags
Basic usage while writing notes
Organically create structure/index/concept hubs
Identify source materials, use multiple tags on a single link, add a reminder to read something
Browse link-tags in backlinks buffer
I added a section to the top of the backlinks buffer to display all of the link-tags (and corresponding links) associated with a note. These start folded, so that it is easier to get an overview of the tags (and still see the regular backlinks/citelinks, unless you just add a hundred link-tags everywhere… which you shouldn’t. Focus!). The links under the link-tags are redundant with the regular backlinks (that have link-tags), so you can find them in either heading – the link-tag heading just provides easy aggregation for the different types of tags in the case that you wanted to find eg. your ‘index’ links.
Query / aggregation
Just a demo, but you have imagination-power Basic aggregation across all notes. Here the query grabs anything that has been tagged with the ‘read’ link-tag. The query/aggregation is of course extendable to any combination of include/exclude specific link-tags or whatever other modifier someone wanted to add.
What world is complete without completions now? Not my world. There is optional link-tag completion/insertion with a prefix
C-u when calling normal link insertion. Another function provides a completion prompt for adding a link-tag on to an existing link.
Also company completion! You can even get crazy and use a (single) leading special character with company if you want to compartmentalize types of tags (#index, #super-index, as opposed to @method, @refutes, as opposed to !read, !todo. You do you.).
It should also be possible to insert multiple link-tags at once with completion support, but I have not gone that far. Best practice is likely to limit the number of tags used on any given link, anyway.
Your feedback is appreciated!