Dominik Lorenz41 downloadsGive your notes a passport to the outside world. Exports documents to polished PDFs, resolving [[wiki-links]] into proper citations so they stand alone without the vault.
Give your Obsidian notes a passport to the outside world.
Obsidian is a powerful knowledge base — but the moment you share a document with someone outside your vault, it falls apart. [[wiki-links]] are meaningless to any reader who does not have your vault. Embedded PDFs become broken references. Citations look like [[Smith 2023]] instead of proper bibliography entries. Look at the showcase document for an example
Vault Passport solves this. It exports any Obsidian document to a polished, self-contained PDF by resolving every [[wiki-link]] into a real citation, building a proper BibTeX bibliography, and running Pandoc to produce output you can hand to a colleague, submit to a journal, or attach to a report — no vault required.
Every [[linked note]] that exists in your vault becomes a [@cite-key] Pandoc citation. Vault Passport collects all citations, builds a .bib file on the fly, and passes everything to Pandoc with --citeproc so the final PDF has a proper reference list.
No note metadata required. If a linked note has a cite-key in its YAML front matter that value is used as-is. If not, a cite key is automatically derived from the note's name (My Study → [@my-study]) and the filename is used as the title. You can start with zero front matter and add proper bibliographic metadata later.
Notes that do not exist in the vault at all are replaced with readable plain text — no broken link is ever left in the output.
Docker. Vault Passport runs Pandoc inside the pandoc/extra container, which ships with XeLaTeX, citeproc, and the Eisvogel template. You do not need to install Pandoc or a TeX distribution separately — only Docker.
Docker Desktop is available for Windows and a works with this plugin. The plugin and its Docker integration have been developed on Linux. Windows and MacOS users — we'd love your feedback. If you encounter any path or permission issues please open an issue.
Today every linked note becomes a citation, including ![[transclusions]]. The plan is to eventually inline-expand transclusions properly so ![[Note]] pulls the linked note's content into the document (with ![[Note#Heading]] and ![[Note#^block-id]] doing the obvious thing for sections and blocks), while plain [[wiki-links]] remain citations. Feedback on this direction is welcome on the GitHub issue tracker.
https://github.com/one-wheeled-driver/obsidian-passportmain.js and manifest.json from the latest release.obsidian/plugins/vault-passport/Ctrl/Cmd + P) and run "Export document (Vault Passport)".| Setting | Default | Description |
|---|---|---|
| Strict mode | off | Abort export if any linked note is missing |
| Open PDF after export | on | Open the generated PDF automatically |
| Table of contents | off | Include a TOC in the PDF |
| Convert callouts to boxes | off | Convert Obsidian callouts to styled LaTeX boxes |
| Template name | (empty) | Pandoc template, e.g. eisvogel |
| Vault template folder | templates |
Folder relative to vault root for shared templates |
| Extra pandoc variables | (empty) | One key=value per line, passed as -V flags |
Any [[linked note]] that resolves to a file in your vault becomes a citation in the output:
| Note has… | Result |
|---|---|
cite-key: smith2024 in front matter |
[@smith2024] |
| No front matter at all | [@my-linked-note] (auto-derived) |
A title field |
Used in the bibliography |
No title field |
Filename stem used as the title |
| Note does not exist in vault | Replaced with readable plain text |
A note intended as a citable reference might look like this:
---
cite-key: methods2023
author: "Johnson, Alice"
title: "Research Methods in Practice"
year: 2023
type: book
publisher: "Academic Press"
---
The type field maps to BibTeX entry types (book, article, misc, etc.). All fields except cite-key are optional. Supported BibTeX fields: author, title, year, journal, publisher, url, note.
All wiki-link variants are handled so the output is readable without the vault:
| Syntax | Behavior |
|---|---|
[[Note]] |
Citation |
[[Note|Display Text]] |
Citation (display text ignored in output) |
[[Note#Heading]] |
Citation |
[[Note#Heading|Text]] |
Citation |
[[Note#^block-id]] |
Citation |
[[Note#^block-id|Text]] |
Citation |
![[Note]] |
Citation |
![[Note#Heading]] |
Citation |
![[Note#^block-id]] |
Citation |
![[Image.png]] |
Standard Markdown image  |
![[file.pdf]] |
Citation via sidecar note, or [Embedded file: file.pdf] |
When a document embeds a non-Markdown file (e.g. ![[paper.pdf]]), Vault Passport checks for a sidecar note with the same base name (paper.md). If found, the embed becomes a citation using that note's metadata. Otherwise it becomes [Embedded file: paper.pdf].
The Template name setting resolves in this order:
<vault>/<vault-template-dir>/<name> — shared vault template; commit here so everyone working on the vault uses the same one..obsidian/plugins/vault-passport/templates/<name> — per-user plugin template.Eisvogel is included in the pandoc/extra Docker image — no separate installation needed. Simply set the template name to eisvogel in the plugin settings.
Pandoc passes --var values to the template. These act as defaults — any matching key in the document's YAML front matter overrides them. Set global defaults in the Extra pandoc variables settings box (one key=value per line):
titlepage=true
titlepage-color=2c3e50
titlepage-text-color=FFFFFF
colorlinks=true
numbersections=true
Or put them directly in the document's front matter for per-document control:
---
title: "Quarterly Review"
author: "Alice Johnson"
date: "2026-01-15"
titlepage: true
titlepage-color: "1a1a2e"
colorlinks: true
geometry: margin=2.5cm
---
Eisvogel-specific variables:
| Variable | Description |
|---|---|
titlepage=true |
Enable the cover page |
titlepage-color |
Cover background colour (hex, no #) |
titlepage-text-color |
Cover text colour |
titlepage-logo |
Path to logo image (relative to vault root) |
logo-width |
Logo width, e.g. 60mm |
header-left / header-right |
Running header content |
footer-center |
Footer content, e.g. \thepage |
listings=true |
Syntax-highlighted code blocks |
numbersections=true |
Numbered section headings |
With Convert callouts to boxes enabled, Obsidian callouts are converted to styled LaTeX boxes in the PDF using the awesomebox package (included in pandoc/extra).
> [!NOTE] Optional title
> Body text here.
> [!WARNING]
> No title — the type name is used automatically.
The +/- fold modifiers are silently stripped. Regular blockquotes without [!TYPE] are left untouched.
| Obsidian type(s) | LaTeX environment | Colour |
|---|---|---|
note, info, todo, abstract, summary, tldr, question, help, faq, example, quote, cite, important |
noteblock |
blue |
tip, hint, success, check, done |
tipblock |
green |
warning, caution, attention |
warningblock |
orange |
danger, error, bug, failure, fail, missing |
cautionblock |
red |
| (anything else) | noteblock |
blue |
By default, links to notes that are missing from the vault are replaced with plain text and a warning is printed in the developer console. With Strict mode enabled, the export aborts on the first missing note. Useful when you want a broken link to be a hard error instead of silent plaintext fallback.
Input: /vault/my-paper.md
Output: /vault/my-paper.pdf ← PDF next to original
.obsidian/plugins/vault-passport/build/my-paper.md ← intermediate markdown
.obsidian/plugins/vault-passport/build/references.bib ← generated bibliography
npm install
npm test # 270+ unit/integration tests with Vitest
npm run test:coverage # coverage report
npm run build # type-check + esbuild → main.js
npm run lint # eslint
Pure logic (src/lib/) is 100% Obsidian-free and tested in plain Node. Services and pipeline modules use a small hand-rolled mock of the Obsidian API in tests/helpers/obsidian-mocks.ts.
A real-Docker smoke test that produces an actual PDF is available via npm run test:manual (gated separately because it spawns Docker and takes ~15s).
Bug reports and pull requests are welcome at github.com/one-wheeled-driver/obsidian-passport.
MIT — see LICENSE.