The Lossless Group275 downloadsA 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.
New in 0.3.0: every citation is visible to the plugin again (98% were being missed); Promote to canonical source keeps key sources (PDF + full text) in your vault; Enrich citations fills in authors, dates, publishers, and logos, with a review before every write; settings are searchable. Requires Obsidian 1.13 or later. Release notes →

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])



Most citations are passing references. A few deserve to live on: the industry report everyone quotes, the book that frames the argument. Promote to canonical source gives those few a complete, reusable record in your Citations folder.
Put the cursor on a footnote marker ([^80nyxu]) or on its definition line, then run the command. Cite Wide:
Citations/<id>.md.citation_* tags, including every author on a multi-author paper. If that leaves the title or authors empty, it asks Jina Reader too. A slow or failed fetch falls back to the footnote.Citations/_files/<id>.<ext>, and the text is imported as markdown to Citations/_text/<id>.md, with a link back to the citation. If Jina Reader is unavailable, the citation is still promoted and the notice tells you the text wasn't imported.The canonical file adds canonical: true, internal_uuid, reference_hexcode, default_slug, subtitle, authors, date_published, publisher, publisher_url, publication_type, first_accessed_at_url, date_added, date_fetched, piece_og_image, publisher_favicon_url, cited_in_files, and, when captured, downloaded_content_path and source_text_path. Promoting again is safe: internal_uuid, first_accessed_at_url, and date_added never change once set, and your edits in the modal always win over fetched values. Filter canonical sources in Dataview with WHERE canonical = true.
Citation files fill in unevenly: whatever the footnote happened to contain, plus whatever an older extraction wrote, junk included. Enrich all citations fills in what's missing across your whole Citations folder, and shows you every change before it writes anything. Enrich this citation does the same for the citation under the cursor, or for the citation file you have open.
[^id] and [^id]: footnote.Citations/_reports/Enrichment-<YYYY-MM-DD-HHmm>.md: what changed (per field), dead or blocked links, citations with no footnote anywhere, and fields still empty.What it will and won't touch:
| Field | Rule |
|---|---|
title, url, date, source, referenceText |
Filled when empty. A junk title ("Page not found | MRU", "Just a moment…") counts as empty; ’-style entities are decoded. A real value is never overwritten. |
author |
Filled when empty, or replaced when it isn't a name ("3 minutes", "Super User", sentence fragments). |
authors |
Added when absent; replaced only when no entry is a name. |
publisher, publisher_url, date_published, piece_og_image, publisher_* brand fields |
Added when absent; a stored value is never blanked. |
filesUsedIn |
Rewritten as [[full/path|Alias]] links to the notes that cite it today, so renames don't strand it. Kept when no note cites it. |
date_fetched |
When the source was last fetched (ISO timestamp). |
canonical, everything else |
Never touched. Promotion stays a deliberate act. |
Running it again is safe: an enriched vault proposes no changes. A citation whose only change would be date_fetched isn't listed or written.
Requires Obsidian 1.13 or later (desktop only).
In Obsidian: Settings → Community plugins → Browse → search "Cite Wide" → Install → Enable.
Prefer to install by hand? Download main.js, manifest.json, and styles.css from the latest release into <your vault>/.obsidian/plugins/cite-wide/. Every release asset is cryptographically attested to the commit and workflow that built it. Verify before enabling:
gh attestation verify main.js --repo lossless-group/cite-wide
The plugin automatically creates citation files for Dataview integration:
Settings search finds every Cite Wide setting: type "Jina", "citations folder", or "auto-save" in Obsidian's settings search box.
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.
0.3.2 — 2026-11-01 · docs only: the citation spec puts the publisher before the title and adds Generated: for tool-made citations. Notes.
0.3.1 — 2026-10-15 · Google AI pastes convert cleanly again
[1] (url), [2] (url) after each sentence and no source list. Paste LLM content and Parse LLM citations turn these into [^hex] footnotes, one per distinct source, and turn • bullets into markdown lists.changelog/releases/0.3.1.md.0.3.0 — 2026-10-06 · requires Obsidian 1.13
filesUsedIn) is stored as [[path|Title]] wikilinks that survive renames; a new date_fetched field records when each source was last fetched.changelog/releases/0.3.0.md.0.2.3 — 2026-05-18 · every release asset cryptographically attested. Notes.
Requires Node.js 22 and pnpm.
git clone https://github.com/lossless-group/cite-wide.git
cd cite-wide
pnpm install
pnpm dev # esbuild watch: rebuilds main.js and styles.css on change
pnpm test # Node's built-in test runner; no network calls
pnpm build # tsc + ESLint (Obsidian's review-bot rules) + production bundle
To use your working copy in a vault, symlink it into the vault's plugins folder. The folder name must be the plugin id, cite-wide:
ln -s /path/to/cite-wide /path/to/your-vault/.obsidian/plugins/cite-wide
Then run pnpm dev. Reload the plugin to pick up new builds: toggle it off and on in Community plugins, or quit and reopen Obsidian.
Releasing. Bump manifest.json, package.json, and versions.json together (three-part semver), write changelog/releases/<version>.md, and push a tag with no v prefix (for example 0.3.0). .github/workflows/release.yml then builds, attests, and publishes the release with those notes.
MIT. See LICENSE. If Cite Wide saves you time, buy us a coffee.