One of the biggest challenges of academic research is keeping on top of notes and papers. During my undergraduate degree, I experimented with various methods to manage my notes. Initially, I use to have one long document for each essay with notes underneath, and cited with Zotero to Word connection. While this worked, it began to crash when these documents got large (over 15,000 words or around 25+ pages).
I had also experimented with Notion as a reference/note management system. To begin with this was fantastic for my coursework or a small project. I set up custom database of references1 (at the time unconnected to Zotero, but now possible) but it would bottled with just 30 references deep. I loved the custom tagging, scheduling, and Kanban board features, I disliked the lack of local backups, constant requirement to be online and how slow it became with features I did not use. I also began to worry about the security of my data. If I could not locally back it up, and if Notion was ever to go down or get hacked, what would happen to my data?
When I got in to do my PhD, I realised I needed a more effective way to manage notes, ideas, and reading. I came across Obsidian - lightweight note-taking software that uses markdown files. While the base version is simple, its true power lies in the extensive array of plugins available. For those who love Notion, there are plugins that bring Notion-like database features to Obsidian. It’s incredibly space-efficient, with everything stored as local markdown files that I can easily access and customize2. The community support is fantastic, and the software is free without being restrictive.
What truly sold me on Obsidian was its integration with Zotero3, my reference manager. I can import metadata from papers, organize my notes, and link everything seamlessly. With daily notes, Obsidian functions as a giant notebook for both academic and personal use.
I struggled to figured out how to link the two together, so I promised myself I would share a how-to guide with others when I did.
In this article I am going to take you through:
Installation of plugins
Connecting Zotero to Obsidian
Setting up a template
Customizing Bullet Points to Match Zotero Colors
Importing Paper Tags
1 Download Obsidian and Zotero
First step is to download obsidian and to make sure you have desktop Zotero installed and set up.
2 Plugins
To allow these two to talk to each other you need to install plugins for each. Let’s start by setting up Zotero first:
2.1 Zotero - Better Bibtex
Better Bibtex - link here - converts the format Zotero operates with (UTF-8 Unicode,) to HTML/LaTeX of the export of files. In addition it allows neat and tidy citation keys. basically makes it easier and cleaner to understand.
- Go ahead and download it.
- You’ll need to go open up Zotero, go to main menu > Tools > Plugins
- Click the gear and choose ‘Install Plugin From File…’
- Select the
.xpi
file you’ve just downloaded and click install. Make sure it is switched on (blue) - Once completed restart Zotero
If you then go to settings/preferences you now have a BetterBibtex option. Here I change the citekey - this actually changes how the files are named/stored on your computer, so all end up unique - neat and tidy. I want authors et al. year then title so have - “authEtAl + year + title”
There is lots of other options or ways of naming files - see the Better Bibtex for full list.
2.2 Obsidian - Zotero Integration Plugin
To install the plugin in Obsidian go to Settings > community plugins. Make sure restricted mode is turned off.
Community plugins - search for “Zotero Integration” Install, then enable.
On the left-hand side, should now see Zotero integration. Now we need to set it up and give it a template to import the correct Zotero information.
2.2.1 Setting up Zotero Integration
Select a folder to import notes to. I keep this the same as I can update a file with further annotations but only if in the same folder - this excludes sub-folders (I also enable annotation concatenation for this). I originally had different folders for to read/reading/read but gave up on this as easier to use tags! I now use a folder called ‘References’
Now need to set up import, you need to decide what you want to import and how you want to name your files. We will need to set up a template.
3 Importing
3.1 Templates
Create a folder called Templates. Create a new note called something like “ZoteroTemplate”. Lets test run this first before we get deep into customisation. The plug-in runs off nunjacks - so that is the language used below.
## {{title}} ({{date | format("YYYY")}})
**authors:** {{authors}}
{% if abstractNote %}
{{abstractNote}}
{% endif %}
# Notes
{% persist "notes" %} {% endpersist %}
This template takes the title of the reference, the date, the list of authors, and the abstract. The section starting # Notes
then has persist and end section. What you write in there will not be changed every time you reimport aka update the file.
You can see the full set of information you can extract from each reference using Data explorer function in the command palette. Using the data explorer - this reference has over 45 different bits of information:
There are a load of templates which you can customise. I have linked my one below in the advanced section.
3.1.1 Testing Import
Okay lets go back to testing the import settings. Set the name of the import format. You can set up multiple/multiple templates to import. I put a name to it - very originally called “Import from Zotero”. Set the template as the template file you created above.
Next lets test the import. Note You will need Zotero to be open for this to work.
Open the command palette (cmd + P
on mac) and select import from Zotero.
You then get this box pop up.
You now need to click on the red box and enter in the paper(s) you want to import.
And when i click enter on the red box I end up with this:
You can assign Hotkeys aka shortcuts to import. I have a short cut of cmd + option + L
. Enter in the reference. You can import multiple at the same time but I usually do one, once I’ve read it.
And you’ll end up with something like this!
3.2 Conclusions
The Obsidian forums are super helpful for any further problems or diagnostics. I hope this tutorial has been helpful and I may follow up with how I use Projects plugin to overview my references. Let me know what you think!
4 Advanced
4.1 Hotkey - set up a shortcut to import
To set an shortcut to import go to Settings > Hotkeys. In the search, search for Zotero Integration.
Click the +
or the customisation and them press the series of keys you would like. I have this as cmd + option + L
as it is similar to the Microsoft Word insert a citation shortcut.
4.2 Backing up your vault and notes
Quick aside to talk about backing up data. No one wants to suddenly lose all the data mid-way through thesis writing. I myself have had a computer die mid-undergrad thesis writing and nearly lost everything… I’ve learnt my lesson!
As locally saved, can use a traditional hard-drive/usb to back things up. I have one at the office and one at home - to be honest I do this every 6 months or so as I mainly use cloud options now. My institution comes with OneDrive so the vault is “saved” to this area locally anyway. Another free option is to use GitHub. This involves adding a plugin into Obsidian. It works for both Windows and Mac. I found it tedious which lead me to use Obsidian sync.
Obsidian sync allows both a back up and the ability to have the same vault on multiple devices i.e. phone, laptop, desktop, ipad. This is great if you switch devices or want to edit a to-do list on the go. Offers discount for “students, faculty members, and nonprofit employees” (as of writing, 40% discount). You have to send in an application - more details here which can take up to 3 business days as manually reviewed. I used that time to check out obsidian and make sure I wanted to use sync. Full details here!
To recap you have several options for back ups:
Hard-drive
Cloud services (can be dodgy/restrict file names)
Git
Obsidian sync
4.3 My template and plugins
I have based my template off some of FeralFlora work on Obsidian. Here is his up-to date one. To set up the matching colours between Zotero and Obsidian requires the List Callout plugin . It works by changing the colour of a block where there is a bullet then a symbol after it. This determines what the colour is. I have added Magenta in as £
symbol
To install, go on to the community plugin browser, click install and then enable. You will have the option to customise extra in the Style Settings plugin as well.
My template:
Creates Aliases of
The citation I use to refer in notes e.g. Newman et al. 2024 if more than two authors, Jerykll and Hyde 2024 if two, and Newman 2024 if one.
The citekey - I have it set up as Author + Year + Title
Sets up the properties of citekey, title, authors, year, doi, status, bibliography, summary, tags
Introduction section of title, date, authors and tags from the paper. It also has a link to the zotero/local file.
Summary section for my notes on the paper, my TDLR in other words which I put where I have summarise. Can be a callout or quote
Abstract - Notes and thoughts
Annotations from paper.
This uses the List callout plugin and is based on FeralFlora’s code It creates a macro to prefix each annotation with the symbol, which will appear as that colour in Obsidian.
Then it imports each annotation and the annotation colour if text, as well as the link to where it is.
It then takes any comments/notes in bold and adds them afterwards on new line - Imports images as well
---
aliases:
- '{% if creators.length == 1 %} {{ creators[0].lastName }} {{date | format("YYYY")}}{% elseif creators.length == 2 %} {{ creators[0].lastName }} and {{ creators[1].lastName }} {{date | format("YYYY")}}{% else %} {{ creators[0].lastName }} et al. {{date | format("YYYY")}} {% endif %}'
- "{{citekey}}"
citekey: "{{citekey}}"
title: "{{title}}"
authors: "{{ authors }}"
year: '{{date | format("YYYY")}}'
doi: "{{ DOI }}"
status:
bibliography: "{{bibliography}}"
summary:
tags:
- "#paper"
---
## {{title}} ({{date | format("YYYY")}})
**authors:** {{authors}}
**tags::** #paper {% for t in tags %} #{{t.tag | replace( ' ', '_' ) | replace('-', '') | lower }}{% endfor %}
{{pdfZoteroLink}}
---
{% persist "notes" %}## Summary
> summarise
{% endpersist %}## Abstract
{% if abstractNote %}
{{abstractNote}}
{% endif %}
# Notes
{% persist "notes" %}
{% endpersist %}
## Annotations
{% macro calloutCharacter(color) -%}
{%- if color == "#5fb236" -%}
$
{%- endif -%}
{%- if color == "#2ea8e5" -%}
@
{%- endif -%}
{%- if color == "#ffd400" -%}
&
{%- endif -%}
{%- if color == "#a28ae5" -%}
~
{%- endif -%}
{%- if color == "#ff6666" -%}
!
{%- endif -%}
{%- if color == "#e56eee" -%}
£
{%- endif -%}
{%- if color == "#f19837" -%}
?
{%- endif -%}
{%- if color == "#aaaaaa" -%}
%
{%- endif -%}
{%- endmacro -%}
{% for annotation in annotations %} - {% if annotation.annotatedText %}{{calloutCharacter(annotation.color)}} {{annotation.annotatedText | nl2br}} [{{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}&annotation={{annotation.id}}) {%- endif -%} {% if annotation.comment %} **{{annotation.comment}}** {%- endif -%}
[{{annotation.imageRelativePath}}]] {%- endif -%} {%- endfor -%} {% if annotation.imageRelativePath %} ![
4.3.1 Name files to match shorthand citation
I like to refer to my files as Newman et al. 2024 and so I wanted a way that each file would be named. I came up with this code
[0].lastName }} {{date | format("YYYY")}}{% elseif creators.length == 2 %} {{ creators[0].lastName }} and {{ creators[1].lastName }} {{date | format("YYYY")}}{% else %} {{ creators[0].lastName }} et al. {{date | format("YYYY")}} {% endif %} {% if creators.length == 1 %} {{ creators
5 References
- Obsidian Zotero integration: https://github.com/mgmeyers/obsidian-zotero-integration
- Better Bibtex intallation: https://retorque.re/zotero-better-bibtex/installation/
- Step by step guide: https://publish.obsidian.md/history-notes/01+Notetaking+for+Historians
- Templating for Zotero-Obsidian https://github.com/mgmeyers/obsidian-zotero-integration/blob/main/docs/Templating.md
- Template examples: https://forum.obsidian.md/t/zotero-desktop-connector-import-templates/36310
Footnotes
At the time you could not connect Zotero (or Mendeley or Endnote if that is your poison) into Notion. You now can. I have tried it out↩︎
You can even open the files in RStudio or Visual Studio Code if you want to. Or not.↩︎
Why Zotero? Well it is free, which was especially useful when I was outside academia and access to resources can be limited without institutional logins. I also use the Chrome plugin which allows auto-import from a webpage and the Microsoft Word plugin for writing manuscripts.↩︎