Kirsley CHENNEN90 downloadsTurn a PMID, PMCID, DOI, arXiv ID or article URL into a metadata card with title, authors, journal, abstract, image and identifiers.
Created by Kirsley Chennen
📄 Turn a PMID, PMCID, DOI, arXiv ID or scientific article URL into a rich metadata card in your notes: title, authors, journal, year/volume/issue/pages, abstract, preview image, DOI, PMID, PMCID and keywords.
💡 Think Auto Card Link, but for papers: instead of a generic web preview, metadata comes from scholarly databases.
```paper
url: "https://pubmed.ncbi.nlm.nih.gov/34265844/"
title: "Highly accurate protein structure prediction with AlphaFold"
authors: "Jumper J, Evans R, Pritzel A, Green T, Figurnov M, Ronneberger O, Tunyasuvunakool K, Bates R, Žídek A, Potapenko A, et al."
journal: "Nature"
year: "2021"
volume: "596"
issue: "7873"
pages: "583-589"
doi: "10.1038/s41586-021-03819-2"
pmid: "34265844"
pmcid: "PMC8371605"
type: "Journal Article"
host: "pubmed.ncbi.nlm.nih.gov"
abstract: "Proteins are essential to life, and understanding their structure can facilitate…"
```
The block is rendered as a card with a preview image on the left (the article's first figure when available), the site icon, publication type, linked title, authors, citation, clickable DOI / PMID / PMC / arXiv links, keyword chips (the author keywords, or the MeSH terms when there are none) and a collapsible abstract (structured abstracts keep their Background / Methods / Results sections). The card is styled after Mantine's Card component and follows Obsidian's light or dark theme. Because it is plain YAML, you can edit any field by hand.
| Input | Examples |
|---|---|
| PMID | PMID: 34265844, 34265844 (commands), https://pubmed.ncbi.nlm.nih.gov/34265844/ |
| PMCID | PMC8371605, https://pmc.ncbi.nlm.nih.gov/articles/PMC8371605/, Europe PMC links |
| DOI | 10.1038/s41586-021-03819-2, doi:…, https://doi.org/… |
| arXiv | arXiv:1706.03762, https://arxiv.org/abs/1706.03762, …/pdf/1706.03762v7 |
| Publisher URL | any URL containing a DOI (Science, Wiley, PLOS, Frontiers, bioRxiv/medRxiv, PNAS…), nature.com/articles/… |
| Any article page | pages exposing citation_* / Dublin Core / OpenGraph meta tags |
Markdown links ([text](url)) and <url> are accepted too. Trailing /full, .pdf, v2 and similar suffixes are stripped from DOIs.
PMID: …, or a URL from a listed publisher domain turns it into a card once it lands in your note. Other URLs are left untouched.🃏 Card (default): a paper code block rendered by the plugin.
📝 Markdown template: plain Markdown that stays readable without the plugin. The default template is a collapsible callout; customize it with placeholders:
{{title}} {{authors}} {{firstAuthor}} {{journal}} {{journalAbbr}} {{year}} {{date}} {{volume}} {{issue}} {{pages}} {{citation}} {{doi}} {{pmid}} {{pmcid}} {{arxiv}} {{ids}} {{url}} {{host}} {{image}} {{type}} {{publisher}} {{keywords}} {{abstract}}
Wrap text in {{#key}}…{{/key}} to include it only when key has a value.
Add your own reading status, rating, tags and a note to any card: select the ✏️ button in the card's header, fill in the form and save. (Once a card has a paper note, these live in the paper note instead.) They appear in a separate Your notes section, so what you wrote stays apart from the fetched metadata.
They are stored as extra fields in the card, which you can also edit by hand:
status: "to-read" # to-read, reading or read
rating: 4 # 1 to 5
tags: ["impatient2", "methods"]
note: "Compare with ESMFold on our cohort."
Tags in Obsidian. Obsidian doesn't index tags inside code blocks. With Add card tags to the note's tags on (the default), saving notes also adds the card's tags to the note's tags property, so the tag pane, search, Dataview and Bases find the note. Removing a tag from a card doesn't remove it from the property, since you may use it elsewhere in the note.
For papers you work with, create one note per paper with the Create note button in the card's header. The paper's metadata becomes the note's properties, so each paper has its own tags, status and rating in Obsidian's tag pane, search, Dataview and Bases.
FirstAuthor_JournalAbbreviation_Year, e.g. Jumper_Nature_2021, Zucca_HumGenet_2025. A different paper with the same name gets …2025a, …2025b, and so on. If a paper note with the same DOI or PMID already exists in the papers folder (or is linked from the reading list), it is reused.type: paper, title, authors, journal, year, doi, pmid, pmcid, url, image, publication-type, keywords, status, rating, summary, tags, created, reading-lists), the abstract, and a Notes section for your writing.summary property. The paper note is then the single place for your notes: write longer notes in its Notes section.paper-note link, its button becomes Open note, and its Your notes section shows the paper note's status, rating, tags and summary (labelled in Meyer_JNeuromusculDis_2024). Edit the summary property (or use ✏️) to change the text shown on the card; it is rendered as Markdown (lists, links, emphasis…). If the card's link is missing or broken, the card finds its paper note by DOI or PMID among the notes linked from the reading list's papers property and in the papers folder, and Open note repairs the link.status, rating, tags or note (for example added by hand), Open note and ✏️ first move them into the paper note — without overwriting: the paper note's values win, tags are combined, and a note that differs from the summary is added to Notes.reading-lists: ["[[Biblios]]"] in the paper note and papers: ["[[Zucca_HumGenet_2025]]"] in the reading list — so each shows in the other's backlinks and on the graph, and Obsidian updates them when you rename a note. For cards linked before version 1.8, run Link cards and paper notes in this note (backlinks) in the reading list.Refresh paper metadata: in a paper note, run the Refresh paper metadata command to fetch the paper again (for example after a preprint is published, or when a figure becomes available). It updates only the fetched properties — title, authors, journal, year, volume, issue, pages, identifiers, URL, image, publication type and keywords — and never your status, rating, tags, created, other properties or the note's text. An empty result keeps the old value.
Papers base: the Create Papers base command creates Papers.base in the papers folder (or opens it if it exists), listing the paper notes in that folder with four views:
| View | Shows |
|---|---|
| All papers | table of title, year, journal, status, rating and tags, newest first |
| To read | papers with status: to-read, oldest first |
| By status | the table grouped by status |
| Shelf | cards with each paper's figure as the cover |
It's a regular Bases file, so you can change its filters, columns and views in Obsidian.
Example properties:
type: paper
title: Highly accurate protein structure prediction with AlphaFold
authors: [Jumper J, Evans R, Pritzel A, …]
journal: Nature
year: 2021
doi: 10.1038/s41586-021-03819-2
pmid: "34265844"
status: to-read
rating: 4
summary: Compare with ESMFold on our cohort.
tags: [impatient2, methods]
Main link target (what you pasted / DOI / PubMed), author format (Smith JA or John A. Smith), maximum authors before et al., include abstract / keywords / MeSH terms, fetch preview image, expand abstract by default, add card tags to the note's tags, publisher domains for paste, contact email and NCBI API key.
This plugin makes network requests only when you convert an identifier into a card. It sends the identifier (PMID, PMCID, DOI, arXiv ID or URL) to:
pmc-oa-opendata.s3.amazonaws.com) — the first figure of articles available in PubMed Central, used as the preview imagedoi.org landing page) — to read citation meta tags, and the preview image when the article is not in PMCcdn.ncbi.nlm.nih.gov) — PubMed's preview image, shown when no figure is available for a PubMed articlewww.google.com/s2/favicons) — the site icon displayed on the card, loaded when the card is renderedIf you enter a contact email or NCBI API key in the settings, they are sent to NCBI (and the email to Crossref) as recommended by their usage policies. No other data is collected or transmitted, and there is no telemetry.
The plugin does not access the system clipboard: it never reads or writes it.
Paste-to-card works on your note, not the clipboard. When you paste, Obsidian inserts the text as usual; the plugin then looks at that newly inserted text and, if it is a PMID, PMCID, DOI, arXiv ID or supported article URL, replaces it with a card (⌘Z brings back what you pasted). Turn Enhance default paste off to disable this.
Using Auto Card Link too? If its Enhance Default Paste option is on, it takes over pasted URLs before they reach the note, so PubMed/DOI links become generic link cards. Turn that option off, or paste the bare DOI /
PMID: …, or use Convert selection to article card on the link.
Release files (main.js, styles.css, manifest.json) are built by GitHub Actions and carry artifact attestations, so you can check that they came from this repository:
gh attestation verify main.js --repo kchennen/obsidian-scientific-article-card
The plugin is plain JavaScript (main.js, styles.css) with no build step. Tests use Node's built-in test runner:
npm install
npm test
They run offline: API answers (PubMed, Europe PMC, Crossref, arXiv, PMC figures) are recorded in tests/fixtures and replayed, and Obsidian is replaced by an in-memory vault (tests/helpers). What they cover:
| File | Behaviour |
|---|---|
identifiers.test.js |
PMID, PMCID, DOI, arXiv and URL parsing, DOI clean-up |
text.test.js |
abstracts: super/subscripts, section labels, JATS |
format.test.js |
authors, citation, code block YAML, Markdown template |
fields.test.js |
card notes fields, tags, finding and rewriting a card, merging notes |
paper-notes.test.js |
file names, properties, body, refresh rules, Papers.base |
render.test.js |
the card: sections, buttons, linked cards, warning strip, colors |
styles.test.js |
CSS variables and color classes defined, image on the left, no uppercase keywords |
resolver.test.js |
every lookup path, preview images, keyword fallback, main link |
paste.test.js |
paste detection on real CodeMirror transactions, no clipboard access |
flows.test.js |
inserting cards, your notes, Create/Open note, backlinks, duplicates, renames, refresh, commands |
Tests run on every push, and a release is only published if they pass. When an API changes its format, re-record the fixtures with npm run record-fixtures. Add a test with each new feature or bug fix.
🧩 From Obsidian: Settings → Community plugins → Browse, search for Scientific Article Card.
🛠️ Manually: download main.js, manifest.json and styles.css from the latest release into <vault>/.obsidian/plugins/scientific-article-card/, then enable the plugin.
paper-note link sits inside a code block, which Obsidian doesn't track. The papers / reading-lists properties provide the backlinks; if the card's link breaks after a rename, the card finds the note by its DOI or PMID.papers links and the papers folder. In the default location (next to each reading list), a paper note kept in another project's folder isn't found by DOI, so Create note makes one for this project; use a dedicated papers folder to share paper notes across projects.Kirsley Chennen — @kchennen
Issues and suggestions are welcome on the issue tracker. ⭐ Star the repo if you find it useful!
MIT © 2026 Kirsley Chennen