How DEVONthink’s auto-WikiLink feature changed my Zettelkasten workflow

created: 7 minute read

DEVONthink’s automatic WikiLinks feature in combination with the “Names and Aliases” option really changed how I use DEVONthink. It became an essential part in my Personal Knowledge Management and Zettelkasten workflow. The feature automatically reveals all existing connections between my notes just while writing the notes, including expected connections as well as connections that I haven’t seen before. No a priori knowledge about the notes that relate to each other is required. In this post I will show you the feature in action.


In general, DEVONthink offers several options to reveal connections between notes. E.g. in the inspector, you can view all “mentions” of the current note in other notes. Even more powerful is the inspector’s “See also” tab that makes use of DEVONthink’s AI power and shows relevant associations to the current file. A real game changer for me, however, is the automatic WikiLinks feature:

DEVONthink's WikiLinks settings with the chosen "Names and Aliases" option.

By choosing the option “Names and Aliases”, DEVONthink automatically detects and links words within your document to other files, that have the exact same name or aliases as the words. For example, the left screenshot below shows a file, that is named “Canoe” and contains some aliases (“canoes, canoeist, canoeists, canoe driver, canoe drivers, canoe rider, canoeing”). In the Markdown document on the right I wrote about the topic of canoes. Without inserting the links manually, DEVONthink automatically links all mentions of word “Canoe” and its aliases to the associated file:

A Markdown file named "Canoe" (left). It is associated to the aliases "canoes, canoeist, canoeists, canoe driver, canoe drivers, canoe rider, canoeing". Another Markdown file (right), where DEVONthink has automatically detected and linked all mentions of the word "Canoe" and the aliases.

For sure, this example is very simplified. But imagine having several of such files with associated aliases and imagine writing a more meaningful text. With this powerful feature, all relevant connections to other notes are established automatically without taking action yourself. While writing and depending on the heterogeneity and size of your database, your note gets deeper and deeper contextually integrated into your knowledge network – with DEVONthink doing the whole job for you.

I changed my workflow in that way, that it is now entirely based on the auto-WikiLink feature. Of course, you have to invest some more time in adding meaningful aliases to your files. You also have to ensure that each filename and alias is only used once in order to avoid ambiguity in the linking. But this extra step quickly becomes a habit. From time to time, it also forces me to rethink the legitimacy of a file. E.g., while thinking about valid aliases for a new file, I might find that the topic of this new file is actually a sub-topic of an existing other one. I would have to decide whether to really create the new file or to add the intended content to the existing file. That also applies the other way around. E.g., when I’ve added more and more content to a note over time, it might become necessary to decide whether to keep the note as it is or to split it into several notes and re-associate the aliases correspondingly.

Unfortunately, the auto-WikiLinks feature is not yet implemented in DEVONthink’s mobile app DEVONthink To Go (DTTG, version ≤3.5.1). The automatically detected WikiLinks from the desktop app are per se not available there:

The same Markdown file from above shown in edit (left) and preview mode (right) in DEVONthink To Go (DTTG). The automatic detection of WikiLinks is not yet implemented here (version ≤3.5.1).

DEVONthink already offers a bypass for this problem. Some updates ago, a new script was introduced that converts all auto-WikiLinks into Markdown links (or any other link type for other file formats than Markdown):

The raw Markdown file (left) and its rendered preview (right) after applying DEVONthink's built-in WikiLinks-converter.

However, in its current version the script has two disadvantages. First, it does not preserve the alias-names: it renames alias-WikiLinks to the filename of the according file the aliases link to. This can cause contextual mess when aliases are used within the context of a document (see right screenshot in the figure above). The conversion is irreversible, so you have no chance to get the original content back (unless you made a backup of your files beforehand). Second, the raw Markdown text has become a bit illegible due to the now attached Markdown links.

While DEVONthink’s script already heads into the right direction, it left me a little unsatisfied. I admit that I’m a bit too picky as well. Nevertheless, I couldn’t resist to write my own script. I’m not claiming that it is better than DEVONthink’s implementation. On the contrary, at the moment it only works for auto-WikiLinks with having the “Names and Aliases” option selected. And it is designed for Markdown files only, as I’ve recently switched my entire note-taking process to Markdown. However, it is capable to overcome the two disadvantages mentioned above.

The script that I wrote basically does the same as DEVONthink’s script, except:

  • the alias-names are preserved
  • the WikiLinks and already existing Markdown links ([link text](link)) are converted into Markdown reference links ([link text], ... [link text]: link)
  • all link references ([link text]: link) are collected and placed at the bottom of the document
  • the script works for Markdown files only
  • the script works for the “Names and Aliases” option only1
The raw Markdown file (left) and its rendered preview (right) after applying my custom WikiLinks-converter.
The same Markdown file in DTTG after applying my custom WikiLinks-converter.

The script ignores HTML links as well as other link types and link names, that can be defined within the script. Similar to my custom TOC generator, this script works in combination with some Python scripts, that perform the actual conversion. It is available on GitHub, where you can find further installation instructions and a more detailed description of the script.

I’ve been using the script for a few months now and corrected it for all bugs that I’ve noticed. Of course, I can’t rule out that it still contains some flaws, especially when it is applied to Markdown files using other formatting than I usually use. If you use the script and notice any bug, please feel free to report it in the issue section of the GitHub repository. Also, please backup your files beforehand and first test the script with some Markdown files containing your usual formatting.

  1. I’ve never tested the script for files that contain WikiLinks enclosed by straight brackets ([[WikiLink]]). I do not recommend applying the script to documents, that contain a mixture of “Names and Aliases” and “Straight Brackets” WikiLinks (or “Straight Brackets” only). 


Add a comment: