To have a more seamless academic reading workflow, I made a script that uses tags to sync Zotero items into a Kanban in Obsidian. When the script is run, it updates the Kanban reading list, merging the changes made in Obsidian and Zotero ๐
My main motivation for developing this was to avoid having to go to Zotero when deciding what to read next.
I still use Zotero tags to indicate reading status, but rather than filtering by tags in Zotero or using Advanced searches, this workflow lets me see all that in a Kanban in Obsidian๐
This way, it's much easier to get an overview of my reading ๐
Here's how it goes:
Use Zotero tags to specify the reading status of items:
Here's what I used, for reference (in the order of my reading workflow): ๐, ๐ต, ๐, ๐, ๐, ๐
These correspond to the following reading stages: Reading stack, Currently reading, Read, Imported (to Obsidian), Incorporated, To re-import (if I have made additional annotations)
Organize, plan and update the reading list using a Kanban board, where each reading stage is a list in the kanban
Import read and annotated papers as literature notes using Zotero Integration
Trigger imports simply by clicking on the file link in the Kanban ๐ฅ
Sync and update your reading list based on the tags in Zotero using the kanban-maker-quickadd.js script.
How does it work?
The Kanban maker script collects the following information from the Kanban board, which is just a markdown file with headings for each list of citekeys:
The properties / YAML
Any citekeys, grouped by Kanban list, which is just a heading in the underlying markdown
The Kanban settings at the bottom of the file
Kanban maker then reads the JSON data from Zotero
It stores all items with the target tags, under sets which correspond to the Kanban lists in your board
Most importantly, Kanban maker merges these reading lists from Obsidian and Zotero, while handling conflicts in reading status according to the workflow you've specified.
The merging assumes a linear workflow similar (but not necessarily identical) to this:
Reading stack โถ Currently reading โถ Ready to import โถ Imported โถ To re-import and so on.
This way, the workflow represents a hierarchy of which reading statuses should overrule which. Further explanation follows in the setup guide below.
Lastly, Kanban Maker writes everything it collected, including the Properties, merged and updated sets of citekeys for each reading stage / kanban list, and the kanban settings back to the kanban file.
It formats the citekeys like so: [[importFolderPath/@citekey|APA formatted alias]].
Using the script settings, you can specify additional info to import from Zotero (see the section on QuickAdd setup)
Install the required plugins (see above), and optionally also the recommended ones
Make a Kanban board with a list for each stage of your reading workflow
Each list should be matched to a corresponding tag in Zotero!
The tag can be anything, so long as it is useful to you!
Here's an example: the tag #read and list heading Read, or #to-read and Reading stack
They match conceptually, not necessarily literally.
Export your Zotero collection in the BetterBibtex JSON format
Enable the "Keep updated" option when exporting to set up an automatic export
Download kanban-maker-quickadd.js from here, and save it to a folder in your Obsidian vault (like "Scripts" or something similar).
Right click Raw and press Save link as:
If you already implemented an earlier version of this workflow, you might be surprised to learn that you shouldn't edit anything in the script itself now!
Most of the setup will be done in QuickAdd from now on, see you below ๐
QuickAdd setup
Open QuickAdd's settings and press:
Name the macro and press Add macro
Press Configure
If you want the script to run on startup of Obsidian, enable Run on plugin load here ๐This way, the Kanban will always be up to date when you start Obsidian.
Under User Scripts, search for "kanban-maker-quickadd", select it and press Add
Now that the user script is added to the macro, we need to configure the script. Press the โ๏ธ icon next to the user script to open the scripts settings:
This is where the magic happens โจ Specify your paths and settings:
The image above ๐ illustrates how the settings affect the kanban cards and lists (open it in a new tab to see it bigger).
The emoji toggle controls whether your List headings have their associated tag prepended. This only makes sense if the tags are emojis.
You can import collections, or not. If you do, they will be formatted as tags with spaces replaced by -. Only bottom level collections (collections without sub-collections) are imported along with their parent collection, if present. This is meant to prevent clutter in the case of deep nesting. The order is #ParentCollection#ChildCollection.
The "favorite" tag setting 1) imports the tag you specify here and 2) places it at the start of the line in the card. This ensures that it is consistently placed as the first of all the tags.
Each item has a backlink to select the item in Zotero. You can set the link text to whatever you like. The default is ๐to save space, but you could replace it with something like "Open in Zotero". These links also work with iOS Zotero app, and likely also with the upcoming Android app.
Tag and list Hierarchy, what does that mean?
The tag hierarchy and list hierarchy are two sides of the same coin.
Each tag: list pair represents a reading or processing stage in your workflow.
The order of these stages is what decides how the Kanban should be updated, when the reading status of an item in the Kanban and Zotero don't match ๐ฅ
To be precise, the workflow order in reverse is the conflict resolution hierarchy.
Hierarchy here means what should overrule what โ
In other words, the first reading stages will be overruled by the later ones in the case of a conflict. So the last reading / processing stages are highest in the conflict resolution hierarchy ๐
Later in the workflow = higher in the hierarchy
Here's an example to illustrate
An item is in the Reading Stack list in your Kanban, but in Zotero, you've tagged it as #read. Read is higher in the hierarchy, so the script will move the item from the Reading stack list to the Read list.
With the above explanation in mind, remember that this presumes a linear hierarchy where you read and process literature in an orderly fashion, like for example:
So the caveat is, no unilateral backtracking. The script won't allow it.
So, for example, if you move an item from the Read list to Currently reading, but Zotero has the item tagged #read, the item will be moved back to Read when you run the script. Hopefully, this limitation will be taken care of when I get two-way syncing back to Zotero implemented ๐ค
Last but not least โ In order to run the script, we need to set the previously created macro as a QuickAdd choice, so that it becomes available in the Command palette:
In QuickAdd's main setting page, find the Add Choice button,
First, name the choice
this name is what you will see in the command palette and the Run Quickadd dropdown
and set the choice type to Macro, then press Add Choice:
Now, you should see the newly created choice just above Add choice โ๏ธ To make the choice functional, you need to specify whichmacro you want this choice to trigger:
Press the โ๏ธnext to the choice
Select the macro you created earlier. Now, the choice is ready!
If you want this choice to be a distinct command that doesn't require you to use the Run QuickAdd command first, then press the little โก icon next to the choice so it turns yellow.
That's it! Now you can update your kanban reading list from the command palette ctrl/cmd + P using one of the following commands:
Update kanban(depending on what you named your choice)
Run Quickadd โถ๏ธ Update Kanban.
In addition, if you enabled Run on plugin load in step 3, your kanban will always be up to date with your Zotero changes when you open Obsidian.
To get the most out of your Kanban, continue reading below, where I cover Kanban settings, one-click Zotero integration imports and Zotero addon settings ๐
Recommended Kanban board settings
With the Kanban open, there is a โ๏ธ in the upper right corner of the tab bar which opens the board's settings:
I recommend using the following settings:
Hide tags in card titles: Enabled
This is to prevent the tags from being displayed twice.
Color code your "favorite" tag and perhaps also some categorical subject tags or category tags:
Specify properties you want to display below the imported Zotero items:
This is how the Properties look in the Imported list with the settings above:
CSS Snippet for Colored lists
If you like the colored lists you see in my screenshots, grab the kanban.css snippet in the Gist. Direct link here: kanban.css
To use it, save the file to your Vault โถ๏ธ .obsidian โถ๏ธ snippets folder, and activated it under Appearance in Obsidian's settings.
This part is not required, but verynice-to-have, because it enables โจone-click imports of literature notes, directly from the Kanban, as well as one-click updating of literature notes ๐ฅ
This takes this workflow to the next level!
Copy this snippet (the copy button is non-functional - select the code manually):
Create a new template in your template folder (make one if you need to), and paste the snippet you copied on the first line of the template.
Give the snippet an informative name like runImport.md
Replace 'Import name' in the snippet with the actual name of your import, which you've specified in Zotero Integration's settings (see screenshot)
In Templater's settings, Enable Folder templates
Set the newly created template as a folder template for your Zotero import folder
This triggers a Zotero Integration import on any new file created in the folder. ๐ฅณ
The filename has to correspond to the citekey of the item for this to work. Kanban Maker takes care of this when importing items from your Zotero bibliography, but when you add stuff to the Kanban manually, use the citekey of the item.
Zotero setup
Colored tags
For ease of tagging, I recommend assigning a color to all your reading workflow tags, and other tags you use commonly. You can assign colors to nine tags at most.
If your tags are text, this adds a color indicator next to each item with the tag in the item. If the tag is an emoji, the emoji is displayed instead of the color indicator:
Here's how to assign colors to tags:
Right click the tag in the tag pane, and press Assign Colour
Choose a color and position
The position determines two things:
The literal position of the tag in the tag panel
The keyboard key you can press to apply the tag
The latter point is probably the most useful aspect of assigning colors to tags. For example, pressing the 1 key on your keyboard will add the tag assigned to position 1, and so on.
MarkDBConnect
To automate tagging of Zotero items with literature notes in Obsidian, install MarkDBConnect.
Then, go to Tools โถ๏ธ MarkDBConnect Preferences:
In the first tab of preferences, specify the path to your literature note folder in the Obsidian vault:
More importantly, make sure that the tag that MarkDBConnect applies matches then one you used in the tag hierarchy when setting up kanban-maker-quickadd.js(step 6). This is done in the Advanced tab:
Another word on workflows
In my case, I import items after I've read and annotated them.
This is the fourth stage in my workflow:
๐ Reading stack โถ๏ธ ๐ต Currently Reading โถ๏ธ ๐ Ready to import โถ๏ธ ๐ Imported [...]
So the tag that I have MarkDBConnect apply to imported notes is ๐.
You might do things differently!
For example, you might create literature notes on items that you are planning to read. In that case, the tag that MarkDBConnect applies should correspond to the first stage of your workflow (I assume).
Reusing my emoji tag system for illustrative purposes, that tag would be ๐.
Actions and Tags
If you are interested in further automation of tagging, you can look into the Actions and Tags addon for Zotero (AKA Zotero Tag). Here's some examples of what it can do:
Tag newly imported items with #unread and remove the tag when you open the PDF
Tag items you open in Zotero's reader with a certain tag like #reading or #read
Since Actions and Tags is not integral to the Zotero Kanban Reading List workflow, I'm not going to cover the setup here, but the docs on Github are helpful. Note that the Zotero 7 version of the addon is especially powerful.
Usage summary
Let's wrap this up with a summary of the workflow.
In Zotero, use the 1-9 keys to quickly tag items and update their reading status:
Better Bibtex will now auto-export your library and update the bibliography.json file, allowing kanban-maker-quickadd.js to update your kanban with the latest Zotero changes.
In Obsidian, run the Update Kanban command in one of the following ways:
cmd / ctrl + P โถ๏ธ Update Kanban,
cmd / ctrl + P โถ๏ธ Run Quickadd โถ๏ธ Update Kanban,
or put the Update Kanban command in a button in the tab bar using the Commander plugin to run it with a click ๐ฑ๏ธ
Click ๐ฑ๏ธ an item's link to create a literature note on the item.
Profit! Do awesome research, a bit more conveniently ๐ป
If you appreciate my work, you can buy me a coffee to show your support:
I really appreciated it ๐งก
Roadmap
Enable two-way syncing of reading statuses back to Zotero as tags
Turn the script into a plugin ๐ (maybe)
Like what you see?
This guide was made in Obsidian and uploaded using the Share note plugin. Shoutout to Alan Grainger for implementing my feature requests and resolving bugs so that the note looks the same online as in Obsidian!