A plugin for Obsidian that enables rigorous citation and reference management.

An Obsidian plugin for rigorous, vault-wide citation management. Converts numeric footnotes into stable hex identifiers that survive reorderings, logs each citation into a per-citation file for Bases/Dataview queries, dedupes citations that point at the same URL, and parses pasted research output from Perplexity / Google AI / Claude into the same canonical format on the way in.

Cite Wide is part of a suite of plugins designed to help you build a robust, citation-aware knowledge base in Obsidian. Other plugins in the suite include:
Content Farm is a loosely coupled monorepo, open source, and we operate an Open Project Board on GitHub where you can request features, share ideas, track progress, and contribute. If you're not getting into the code, we recommend you install each plugin separately to avoid potential frustrations.
Contributors welcome, just post to the board and we will get going.
Obsidian (in reader mode) (and several other content tools) reorder citations into perfect integer sequence based on their order of appearance.

[1] into unique hex codes [^a1b2c3][^1b34df]: 2016, May. "[Originals, by Adam Grant | Bob's Books](https://bobsbeenreading.com/2016/05/08/originals-by-adam-grant/)" schoultz. [Bob's Books](https://bobsbeenreading.com/).

Two commands for handling pasted research output from device-native LLM tools (Google AI, Perplexity AI, and similar). Both share the same parser;
Recognized inline patterns: comma-multi [1, 2, 3] (Google AI), adjacent-multi [1][2] (Perplexity), space-separated singles [1] [2] [3], and word-or-punctuation-glued text.[1] / changes[2].
Recognized reference-list patterns: [N] [Title](url) (Google AI markdown link) and [N] Title https://url (Perplexity title-then-URL). Both are converted to the Lossless canonical [^hex]: [Title](url) markdown-link shape on the way out.
Spec conformance on output: every converted line gets a final whitespace pass that ensures (a) one space between content and citation (after ., ,, :, ;, !, ?, or any non-whitespace word boundary), and (b) one space between consecutive [^hex] [^hex] markers — per the Lossless inline-citation spec.

[N] numeric citation in the current file with its proposed [^hex] replacement, the reference-def text preview, and clickable line links to every inline occurrence.[1, 2, 3] has a ref def only for [2], the output is [1] [^xxx] [3] — orphan numerics survive untouched and get flagged.[^hex] citations are preserved verbatim — mid-file human conversions never get re-touched.[1]…[N] series corrupt each other in the same file.[^hex] markers already in the file.text[1]. → text. [1])



pnpm install
pnpm add -D esbuild @types/node builtin-modules
pnpm build
pnpm dev
Create a symbolic link into the plugins directory:
Here is my example, but you will need to use your own path structure:
ln -s /Users/<username>/<your/preferred/path/to/cite-wide> /Users/<username>/<your-content-folder>/<your-vault-folder>/.obsidian/plugins/cite-wide
The plugin automatically creates citation files for Dataview integration:
The URL citation extraction feature works without an API key, but adding one can help avoid rate limits:
Note: The feature works perfectly without an API key, but you may encounter rate limits with heavy usage.
[^a1b2c3]Example:
https://bobsbeenreading.com/2016/05/08/originals-by-adam-grant/[^1b34df]: 2016, May. "[Originals, by Adam Grant | Bob's Books](https://bobsbeenreading.com/2016/05/08/originals-by-adam-grant/)" schoultz. [Bob's Books](https://bobsbeenreading.com/).For existing footnotes:
[^028ee3]: @https://bobsbeenreading.com/2016/05/08/originals-by-adam-grant/[^028ee3]: 2016, May. "[Originals, by Adam Grant | Bob's Books](https://bobsbeenreading.com/2016/05/08/originals-by-adam-grant/)" schoultz. [Bob's Books](https://bobsbeenreading.com/).The plugin automatically creates citation files with rich metadata for powerful Dataview queries. Each citation file includes:
---
hexId: "a1b2c3"
title: "Article Title"
author: "Author Name"
url: "https://example.com/article"
date: "2024"
source: "example.com"
tags: []
created: "2024-01-15T10:30:00.000Z"
lastModified: "2024-01-15T10:30:00.000Z"
referenceText: "Full reference text"
usageCount: 1
filesUsedIn: ["path/to/file.md"]
---
Basic citation table:
TABLE title, author, date, usageCount
FROM "Citations"
SORT created DESC
Most used citations:
TABLE title, author, source, filesUsedIn
FROM "Citations"
WHERE usageCount > 1
SORT usageCount DESC
Citations by author:
TABLE title, date, usageCount, url
FROM "Citations"
WHERE author
SORT author ASC, date DESC
See examples/dataview-citations-examples.md for comprehensive Dataview query examples.