Export Obsidian vaults to PDF with plugin support. Runs locally or in CI.
Features
- Folder-tree → single PDF, preserving Obsidian's folder-note convention.
- Wiki links and embedded images resolved against a one-pass vault index.
- Embedded notes, headings, blocks and Block Link Plus ranges (
![[Note#^id]]) are transcluded. - Obsidian callouts styled per type, YAML frontmatter parsed and stripped.
- Built-in support for Folder Notes, Dataview, Meta Bind, Block Link Plus, Excalidraw drawings and draw.io SVG exports; third-party plugin support is pip-installable. See PLUGINS.md.
- Redline PDFs: tracked-changes diff between two git commits.
- Pluggable PDF templates (CSS + running header/footer + paged-media
@pagerules). Two ship in the box:defaultandredline. See TEMPLATING.md. - Wide tables auto-rotated to landscape pages.
- Mermaid diagrams rendered to SVG or PNG with mermaid-cli. See MARKDOWN.md.
Install
macOS / Linux
curl -LsSf uvx.sh/obsidian-pdf-exporter/install.sh | sh && obsidian-pdf-exporter setup --yes
Windows
powershell -ExecutionPolicy ByPass -c "irm https://uvx.sh/obsidian-pdf-exporter/install.ps1 | iex; obsidian-pdf-exporter setup --yes"
The chained setup --yes installs the native runtime dependencies (Pango/HarfBuzz/Fontconfig and pandoc) through your OS package manager. For per-OS commands, pinned versions, and CI usage see INSTALLATION.md.
The shorter alias ope is identical to obsidian-pdf-exporter.
Quick start
# Standard export
ope export ./MyVault/SpaceA
# Custom title, version, output path
ope export ./MyVault/SpaceA \
--title "Quality Manual" --version 3.1.0 \
--output ./out/quality-manual.pdf
# Redline between two commits (must run inside a git repo)
ope redline ./MyVault/SpaceA \
--from-commit v3.0.0 --to-commit HEAD
# Discovery
ope list-templates
ope list-plugins
ope --help
Full flag reference: COMMANDS.md.
Vault layout
The exporter walks a space folder (the ROOT argument) and turns every subfolder into a section. A folder note named after its folder is the section's body:
SpaceA/
├── SpaceA.md ← root note (becomes the document's intro page)
├── images/ ← attachments folder name is irrelevant
│ └── logo.png
├── Chapter A/
│ ├── Chapter A.md ← folder note for "Chapter A"
│ ├── img/ ← scoped attachments — picked over top-level on ties
│ │ └── logo.png
│ └── Section 1/
│ └── Section 1.md
└── Chapter B/
└── Chapter B.md
Three roots are recognised:
Space/Space.mdexists → used as the root note.Space/Space/Space.md→ the inner folder is the root, its siblings become children.- Neither → an anonymous root, immediate child folders are sections.
Folders without markdown are pruned automatically. .git, .obsidian, .vscode and other dotfile folders are skipped.
Documentation
| Topic | Where |
|---|---|
| Installing the CLI and native deps; per-OS package commands | INSTALLATION.md |
| Every command, flag, env var, and exit code | COMMANDS.md |
| Obsidian-specific markdown features the exporter handles | MARKDOWN.md |
| Built-in plugins, options, authoring third-party plugins | PLUGINS.md |
| Custom PDF templates (no-Python recipes + full Python spec) | TEMPLATING.md |
| Development setup, testing, PR guidelines | CONTRIBUTING.md |
License
Metadata
Release files for obsidian-pdf-exporter 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| obsidian_pdf_exporter-0.6.0.tar.gz | 99.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| obsidian_pdf_exporter-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 236.9 kB
Release files / obsidian_pdf_exporter-0.6.0.tar.gz
| Download URL | obsidian_pdf_exporter-0.6.0.tar.gz |
|---|---|
| Size | 99.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8d37fa5826b0fa019e70adc7e59629056be24872b7c3ea7499eaed9771c7fed6
|
|
BLAKE2b-256 checksum How to use checksums |
dbe1ce5d82129b174e125b9c82ef09fabe1e1fffb4f1c638536ead206e7ab6c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / obsidian_pdf_exporter-0.6.0-py3-none-any.whl
| Download URL | obsidian_pdf_exporter-0.6.0-py3-none-any.whl |
|---|---|
| Size | 137.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ad66fd49fa7acad9e2ffc6211e6c04cb2b7e0cee4fd99355fe6bd5ff2a151466
|
|
BLAKE2b-256 checksum How to use checksums |
873eaea7cbc28115b1c41ad5441650552a9f4565943471a260aad824af618eeb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|