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, and Meta Bind; 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.2.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.2.0.tar.gz | 65.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| obsidian_pdf_exporter-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 151.8 kB
Release files / obsidian_pdf_exporter-0.2.0.tar.gz
| Download URL | obsidian_pdf_exporter-0.2.0.tar.gz |
|---|---|
| Size | 65.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0b9680701c2b5ba4a549fb9432004cd203b61af6f1e702163b1541fb6354ba0f
|
|
BLAKE2b-256 checksum How to use checksums |
65ec09a80dbf4a3209faf5fdc76bf592c01efe4cc18256c43c20041ca7edc664
|
| 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.2.0-py3-none-any.whl
| Download URL | obsidian_pdf_exporter-0.2.0-py3-none-any.whl |
|---|---|
| Size | 86.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
adb6ee05d029bb06c42f9058f80641822aad2655ecfd9cccf58670614d96d023
|
|
BLAKE2b-256 checksum How to use checksums |
188abca49e7fce3abbe24bf92aa5b0f4519f693d7c5a1f60f7730f1f75665f43
|
| 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}
|