Scrivener and Bidirectional Links (Obsidian/Roam/Logseq)

I haven’t posted here in a while (though a very long-time user, probably from about 0.8 or 1.1 or something), but I’m wondering whether there are any plans to introduce Obsidian/Roam/Logseq-type bidirectional links – e.g., [[link]] – into Scrivener at some point?

I’ve recently been using the new-style PKMs, though you’ll notice I’m back to good ol’ Scrivener owing to its superb, unique organization/structure apparatus (the PKMs, I find, are good for taking notes and surfacing connected material but not at all suited to major structuring for chapters/books). That said, the bidirectional links they’ve pioneered are fantastic for note-taking at so-called “atomic” levels, and my own view is that Scrivener could outplay them by integrating these type of links, either as a replacement for or complement to the existing internal-links facility, which is not the same thing.

I know that for some people they would be overkill (but you could say that about a lot of stuff Scrivener can do), but for others (like researchers/nonfiction writers) they would remarkably useful, while at the same time being simple to use. You might not have to go all the way that Obsidian/Roam/Logseq has, but something along the lines of what Craft has done would be amazing.

Anyway, I hope someone in the aery realm of Scrivener HQ is reading this.

Could you be more precise? When you create links within Scrivener, it already creates a backlink in the bookmarks of the linked note. Is not that the same thing?

It’s a little hard to describe these kinds of bidirectional links without a lot of explanation. I would look it up on YouTube for instructional videos, if you’re curious.

Very, very quickly, if I typed “New York harbor during World War Two was the largest port in the world, and contained within it seven bays, four rivers, and four estuaries, as well as encompassing Long Island,” then if I added [[XXX]] around certain words I would create a wiki-like page containing all identical (or aliased) hyperlinked instances of those bracketed words, no matter where they were located in my thousands of cards of notes at the atomic level (that is, within a sentence). So, “[[New York]] harbor during [[World War Two]] was the largest [[port]] in the world, and contained within it seven bays, four [[rivers]], and four estuaries, as well as encompassing [[Long Island]].”

What would happen here is that pages (or cards) would be generated for New York, World War Two, port/s, river/s, and Long Island. There would be a list of linked and unlinked references at the bottom where I could see what else was potentially related and I could quickly link those to the given page. Ultimately, I would be able to see every reference to New York no matter where it was written, even if I had written a note about New York in 1657 in a completely different context from NY in World War Two.

This probably sounds more complicated than it actually is. For many, these are a marginal and kind of weird add-on, but to Those Who Understand These Dark Arts they’re a major revolution in notetaking.

To summarize, the Scrivener version is nice and for many people’s purposes it works well, but it’s not bidirectional and it lacks the simplicity, swiftness, and ease of the implementation in the new generation of PKMs like Obsidian, Roam, or Craft. Put another way, if the existing Scrivener implementation could be tweaked or supplemented it would be Obsidian/Logseq-like without all the extra bells and whistles (that not that many people use, anyway). Finally, my view is that these types of notetaking innovations have only been around for a few years and I think it’d be great if Scrivener could integrate them.

I am familiar with the concept and have used all the apps you mentioned. I don’t understand what you wish for that is not already there.

This happens automatically. It is bidirectional.

I’ve explained above.

Scrivener already does a lot of this! It’s worth noting that it does things differently than a tool that has no actual formatting in the editor, and is doing everything dynamically based upon the construction of markup syntax around text. Delete a bracket accidentally and your hyperlink vanishes, as does the back-link. Not a fatal problem of course, but it could be disruptive if you fail to notice. While I suppose some of the concepts you are referring to are not mutually exclusive with a formatting-based writing environment, there are some things about it that make it different enough to expect a different sort of toolset.

For example, you absolutely can type in “[[something]]” and get a section called “something” created elsewhere, and with that “something” item linking back to the item that referred to it. What’s different is that the brackets are stripped out and the word “something” is hyperlinked persistently, in a way where you could go on to change the text of it, without the link pointing to something else, or having to go in and add additional syntax (often much more cluttered) so that doesn’t happen. I would argue that for a writing tool, having link text that is naturally unbound to the target is a more natural and seamless approach.

The other main difference is that Scrivener’s back-linking system is much more permanent—perhaps even to a fault, some might say, in that historically referring to something is a recorded event that stays recorded even if the link is removed, until you delete the back-link directly. But this philosophy of providing automatically generated back-links as a permanent and mutable structure is something not often found in other tools. This provides the following characteristics:

  • The back-link list is fully editable. You can organise them in the list in a way that suits their purpose. I’ll push topical connectivity to the top of the list, and workflow related links (such as editing notes) to the bottom, for example.
  • Unlike a typical dynamic back-link list, the list itself can be added to freely, and in doing so, this of course generates back-links to the targets. Scrivener thus has an area within each section of the outline where general connectivity can be established, rather than textual.
  • Bookmarks are “objects” in the sense that they have more to them than being simply a list of links. They can be individually selected as objects, and things can then be done with them. I can for example select all of the back-links for something, drop them into a Collection, and then compile that collection as a focussed list of pertinent information about a thing. It would take quite a lot of clicking around and temporarily tagging—maybe you can’t even do it at all, in some tools. In this same way, bookmarks operate as saved selections. They respond to the Reveal in Binder command, which once invoked means you can now do stuff with that selection—such as run a search constrained to them, or tag (keywords) them all with a single action. As proxies for the item itself, they have a plethora of functional drag-and-drop interaction worth exploring.
  • Noted briefly, above, but you can delete them. Not every back-link is meaningful, and in fact that’s one of the things I find myself working against in tools like Logseq, where the reference lists build up chaff that require manual adjustment to fine tune, or filtering to get around.
  • While it has less to do with the list’s characteristics themselves, I feel it is worth mentioning: I have yet to see any tool that combines a back-link list with a sidebar editor. The power of that cannot be underestimated in that quite often you don’t even have to activate a back-link in order to view or edit what it refers to.

I don’t mean to suggest Scrivener’s approach is superior in every way. Far from it! There is much we could learn from Logseq and similar, though I also agree with you that a lot of it would be overkill. We have to remember that a back-link in Logseq is equivalent to the concept of compiling in Scrivener. It’s a core, fundamental component of its whole design. We would expect there to be a lot of embellishment around its usage of the back-link, because without that it would be like removing the compiler’s breadth in Scrivener. But there are still some good ideas, like contextual awareness around the link’s point of origination, and maybe even a better active detection (though I would hate to see the mutable idea go away, and these two concepts compete rather strongly with one another).

Here is a list of additional topics on the forum that might help:

  • Using Scrivener like a wiki: not all directly applicable to what you’re speaking of, but it does touch upon some of where Scrivener addresses areas not easily accomplished in other tools. Also note that further on up that thread is another post with a list of links that might be useful to you.

    Also note post #4 in that thread, which describes where to turn on bracket linking, if that’s not something you have encountered before.

  • Building a ticketing system for tracking edits: the use case is entirely different from what you are talking about, but the mechanics of what are being done to achieve this are heavily based upon the sorts of things you’re looking to do.

  • Linking to specific text: while you didn’t bring it up specifically, one of the things that makes Logseq so great at what it does is that every outline item is a link target. Scrivener of course works that way as well, but as a tool more oriented toward writing long works rather than gathering notes, thoughts and things to do, it does bias more toward longer notes per outline item. So having a good way of jumping between “blocks” can be essential if you are accustomed to such a fine-grained approach. Scrivener’s concept of a block is more akin to Obsidian’s in that it doesn’t really exist as a formal feature, but rather a capability built into other features that work with a textual marking on the line itself that is to be considered a block. This post goes into what those features are, and how to make them efficient.

1 Like

Yes, it’s in the current version.

Check out page 209 of the Scrivener manual – here’s an imporant bit:

To enable this method, visit the Corrections tab of Scrivener’s 
preferences, and turn on Automatically detect [[document links]] 
in the Data-Detection section.

Scrivener puts the back links into the bookmarks panel, so if you want a more Roam-like experience, you should make sure the bookmarks panel is open and available.

I find this to be a very useful feature, but it’s not as fluid as Obsidian or HyperNotes. Scrivener does so much more than those apps, the interface is by necessity more cluttered. It still works well, though.

I have to say, this is an astounding answer. Incredibly useful and detailed. It just proves, yet again, what an extraordinary piece of software Scrivener is. Every time I begin writing/researching a new book, I discover something new and unexpected about Scrivener. What usually happens is that I think, “Oh, you know what would be really useful to be able to do in Scrivener? Such-and-such,” and then I look around and almost invariably discover that Keith Blount and the team have already thought of that and it’s been sitting right there. This is of a piece. Thanks, Amber, I’ll look more deeply into all of this.

1 Like

Many thanks for this useful tip. I had no idea that you could do this. (Guess I must have skipped p. 209 of the manual . . . ) I see what you mean about it not being quite as fluid: What would be helpful would be an auto-complete option so that if you highlighted a word/phrase and prefixed it with [[ then it would add ]] to the end.

I missed what OS you’re on, but Windows Scriv will somewhat help with this when you’re trying to link to existing documents.

Assume you have an existing document you’d like to link to, called My Great Existing Document.

In the editor of the ‘linking from’ document, type part of the name, say [[My Great Exist.

Then press Alt+Shift+= (or from the menu Edit > Completions > Complete Document Title).

You’ll get a list of matching document titles. Select the one you want and press Tab to pull in the name. You’ll still have to type ]] yourself. :frowning_face:


You could use a tool like Keyboard Maestro to add brackets around the selected text, but given the goal, you can achieve this already using the ⌘L (Ctrl+L on Windows) default shortcut to create a link of the selected text. This brings up the panel exactly as the wiki-link style typing does for new items, and for cases where the link text matches an existing document name it will bring up the link panel with that matching item selected, so all you need to do is hit Return to create the link to it.

I made a Keyboard Maestro macro to do that. You highlight a word or phrase, hit a shortcut, and it adds the brackets.

I made another one that activates when you type [[ and then waits for you to type a space, and adds the ]] and a space at the end. Both come in handy.

1 Like

Wow. Learning of the week if not month!

The keyboard shortcut on Windows is different than on macOS. On the macOS version, the Menu → Edit → Completions shows a keyboard action of a circle with a little arrow. I do not recall ever seeing that icon nor find a key on my Apple keyboard. What is it? I’ll probably slap my head in recognition when I hear the answer, but right now I’m stumped.

1 Like

represents the Escape key.

Ah. Now I get it. Takes a bit of creative thinking! Head slapped.

Flee the circle! Get out while you still can!

I’m intrigued by this one:
Apparently Apple uses it to mean the fn key, but it looks a lot like the disabled Network & Internet settings icon in the Windows task tray… :face_with_raised_eyebrow:

1 Like

This is fantastic stuff – many thanks for tipping me off about it.

Incredibly useful, thanks. I don’t have K Maestro, but I’m going to look into it. Or I may not need if I can use the Cmd.-L shortcut to quickly make a link.

On the iPad glass keyboard, the globe switches between keyboard languages. (Emojis are a language for this purpose.)

Indeed, that’s a weird decision, not “illustrating” a key used in shortcuts. Apple isn’t shy when it comes to messing around with keyboard layouts, so I guess this one is just late to the party and Tim is already preparing a video for the macOS 15 keynote. Probably a paid upgrade (“Magic Keyboard with nicer Escape key, hand-painted using 100% recycled ink by happy child slaves”).

1 Like