Skip to main content

Export Obsidian vaults to PDF with plugin support. Runs locally or in CI.

Project description

obsidian-pdf-exporter

Export Obsidian vaults to PDF with plugin support. Runs locally or in CI.

Test, Lint and Build Build and publish to PyPI Package version

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 @page rules). Two ship in the box: default and redline. See TEMPLATING.md.
  • Wide tables auto-rotated to landscape pages.

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:

  1. Space/Space.md exists → used as the root note.
  2. Space/Space/Space.md → the inner folder is the root, its siblings become children.
  3. 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

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

obsidian_pdf_exporter-0.0.2.tar.gz (45.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

obsidian_pdf_exporter-0.0.2-py3-none-any.whl (62.0 kB view details)

Uploaded Python 3

File details

Details for the file obsidian_pdf_exporter-0.0.2.tar.gz.

File metadata

  • Download URL: obsidian_pdf_exporter-0.0.2.tar.gz
  • Upload date:
  • Size: 45.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","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}

File hashes

Hashes for obsidian_pdf_exporter-0.0.2.tar.gz
Algorithm Hash digest
SHA256 9e90c92c739b3125b9b8074ed928b0b0cb3947de13f30e80104f281ca321eb4c
MD5 15985cfd93db1f0f6ecd942c6d6c37a1
BLAKE2b-256 fae674c7fffec0858c661095400a9d01c8625008a613dbe45902286df1ff0dad

See more details on using hashes here.

File details

Details for the file obsidian_pdf_exporter-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: obsidian_pdf_exporter-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 62.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","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}

File hashes

Hashes for obsidian_pdf_exporter-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 69a2a570c77860e3ddc9ee1958eb072cbe0f03e2c47d05c114794fcd53a95041
MD5 af17e1f11b87ff6476d5fcccddb96c84
BLAKE2b-256 c57caaf201c88bac03a63ef4fdcfa651037fc5a12dfd07addf16dfe950dcb9fb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page