Vault Passport

by Dominik Lorenz
5
4
3
2
1
Score: 35/100

Description

This plugin has not been manually reviewed by Obsidian staff. Give 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.

Reviews

No reviews yet.

Stats

stars
downloads
0
forks
1
days
NaN
days
NaN
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
0
commits

Latest Version

Invalid date

Changelog

README file from

Github

Vault Passport

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.

How it works

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.

Requirements

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 on Windows

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.

Roadmap

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.

Installation

Via the community plugins browser (once approved)

  1. In Obsidian: Settings → Community plugins → Browse
  2. Search for Vault Passport, install, then enable
  3. Make sure Docker is running

Via BRAT (before approval)

  1. Install BRAT from the community plugins browser
  2. BRAT settings → Add Beta Pluginhttps://github.com/one-wheeled-driver/obsidian-passport
  3. Enable Vault Passport under Settings → Community plugins

Manual installation

  1. Download main.js and manifest.json from the latest release
  2. Place them in your vault's .obsidian/plugins/vault-passport/
  3. Enable the plugin in Obsidian

Quick start

  1. Open any Markdown note in Obsidian.
  2. Open the command palette (Ctrl/Cmd + P) and run "Export document (Vault Passport)".
  3. The PDF appears next to the original file.

Plugin settings

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

How notes become citations

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 ![](https://raw.githubusercontent.com/one-wheeled-driver/obsidian-passport/HEAD/Image.png)
![[file.pdf]] Citation via sidecar note, or [Embedded file: file.pdf]

Sidecar notes for embedded files

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

Templates

The Template name setting resolves in this order:

  1. <vault>/<vault-template-dir>/<name> — shared vault template; commit here so everyone working on the vault uses the same one.
  2. .obsidian/plugins/vault-passport/templates/<name> — per-user plugin template.
  3. The bare name passed to Pandoc for resolution from its data directory (or the container's built-in templates).

Eisvogel

Eisvogel is included in the pandoc/extra Docker image — no separate installation needed. Simply set the template name to eisvogel in the plugin settings.

Template variables

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

Callout conversion

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.

Callout type mapping

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

Strict mode

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.

Output

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

Development

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

Contributing

Bug reports and pull requests are welcome at github.com/one-wheeled-driver/obsidian-passport.

License

MIT — see LICENSE.