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.
- 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.1.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.1.0.tar.gz | 51.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| obsidian_pdf_exporter-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 120.4 kB
Release files / obsidian_pdf_exporter-0.1.0.tar.gz
| Download URL | obsidian_pdf_exporter-0.1.0.tar.gz |
|---|---|
| Size | 51.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e33d8ff3329aea352aa40491d865e3cddb47fd9ba51722ac49512f38d1bfa9f2
|
|
BLAKE2b-256 checksum How to use checksums |
c8f4ed11c5cc9bbc650dfc759e30ec8e016b18bf150865a69091e698a129f339
|
| 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.1.0-py3-none-any.whl
| Download URL | obsidian_pdf_exporter-0.1.0-py3-none-any.whl |
|---|---|
| Size | 69.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7c4b23db22c1ab2c26e9e6d370b478cb8e14c223b7afbe99d42482542e49015c
|
|
BLAKE2b-256 checksum How to use checksums |
aeff56369eb5e0b0b4fff769a96d8071502ff74014107966559a3531b4abd5d8
|
| 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}
|