CopyKit - Copy and Export Toolkit for Obsidian
A plugin for all your copying and exporting needs. Allows copy/export of selected texts, headings, tables, images, and more.
Export Selection
Export Heading
Export Table
Copy Image to Clipboard
The command palette exposes a single CopyKit command. The same modal is opened from the editor context menu and the experimental Outline action.
Choose a content source:
- Selected text — the current editor selection.
- Choose a heading — choose a heading level, then a heading from the active note. The selected section includes nested headings and ends before the next heading of equal or higher level.
Choose an action and format:
| Action | Formats | Result |
|---|---|---|
| Copy | Markdown | Markdown source on the clipboard |
| Copy | Plain text | Markdown syntax stripped for ordinary text |
| Copy | Formatted text | HTML clipboard data with a plain-text fallback; supported apps such as Word can paste formatted content |
| Export | PDF file generated from rendered HTML | |
| Export | Markdown | .md file |
| Export | Plain text | .txt file |
| Export | Formatted text | .html file |
PDF and HTML conversion use marked, DOMPurify, html2canvas, and pdf-lib. Exported HTML is sanitized before it is copied or rendered for PDF generation. PDF pages are rendered as images, so text in PDF files is not selectable. Remote images may not appear in PDF output because cross-origin image access is restricted. PDF generation does not use runtime script injection.
- Rendered tables have a Copy / Export action button with Markdown, HTML, CSV, and TSV copy options.
- Obsidian does not currently expose a stable public API for appending plugin actions to the rendered-preview table context menu. The table action button is used instead. In the editor context menu, the plugin adds one CopyKit… item.
The optional Outline integration is disabled by default. When enabled, it adds a small action button to Outline rows; clicking it opens the same Copy and export modal with that heading preselected when the Outline DOM exposes a usable line number. If a line number is unavailable, the integration resolves the heading by its displayed text.
This uses Obsidian's internal Outline DOM because there is no supported public API for extending its native context menu. It may need maintenance after Obsidian updates and can be removed independently by deleting src/experimental/outline-integration.ts and its registration in src/main.ts.
- Node.js 20 or newer (LTS recommended)
- npm
- Git
- Obsidian desktop for local plugin testing
- A separate, disposable Obsidian vault for development
npm install
npm run typecheck
npm run devThe development build writes main.js into the project root. The runtime files are main.js, manifest.json, and styles.css. The source project itself is not directly loadable by Obsidian.
- Create a separate empty Obsidian vault. Do not use your main vault.
- Create
.obsidian/plugins/copykit/in that vault. - Copy
manifest.json, generatedmain.js, andstyles.cssinto that directory. - Enable Community plugins and CopyKit in Obsidian.
- Keep
npm run devrunning while editing; reload the plugin to test rebuilt output. - Inspect the Developer Tools console for errors.
| Command | Purpose |
|---|---|
npm run dev |
Watch and rebuild during development |
npm run build |
Type-check and create a minified bundle |
npm run typecheck |
Run strict TypeScript checks |
npm run lint |
Run ESLint |
npm run format |
Format project files |
npm run format:check |
Verify formatting |
npm test |
Run unit tests |
- Open Obsidian → Settings → Community Plugins.
- Browse/Search for “CopyKit”.
- Install and enable.
- Download the latest release assets.
- Create a folder in the vault:
- Vault/.obsidian/plugins/copykit
- Copy the files into that folder.
- Reload Obsidian and enable CopyKit in Community Plugins.
- Open Settings → Community Plugins → CopyKit.
- Open the desired note.
- Open the context menu for the item that you want to copy/export.
- Use the plugin options for copying or exporting.
Recommended branch names:
feature/selection-exportfeature/heading-exportfeature/table-actionsfeature/image-actionsexperiment/outline-integrationfix/<short-description>
Use conventional commit prefixes: feat, fix, refactor, test, docs, build, and chore.
- No telemetry or third-party network calls are included by plugin code.
- HTML conversion sanitizes generated HTML before clipboard use and PDF rendering.
- Clipboard writes require a supported clipboard API and a user gesture.
- Table conversion preserves displayed cell text, not necessarily every original Markdown formatting detail.
- PDF rendering is asynchronous and may differ slightly from Word or Obsidian's native rendering. Test large notes, tables, and images in your target Obsidian version.
- The Outline adapter relies on private DOM structure and is experimental.
Update the version in package.json and manifest.json together. Use semantic versioning:
0.x.ywhile the feature set and public behavior are evolving.1.0.0when the core feature set is stable and tested across supported Obsidian versions.
If you find issues or have feature requests, open an issue in the repository.
Apache License 2.0
Licensed under the Apache License, Version 2.0 (the “License”); may not use this file except in compliance with the License.
CopyKit - Copy and Export Toolkit for Obsidian Copyright (c) 2026 MEET VEKARIA
Required attribution:
- "CopyKit" by MEET VEKARIA.
- Please retain this NOTICE file in redistributions, and display attribution in documentation or “About/credits” screens where third‑party notices normally appear.
Additional notices:
- Portions may include third‑party components; see their respective licenses in the distribution (if any).
- The contents of this NOTICE file are for informational purposes only and do not modify the License.
Created with ❤️ Meet Vekaria.
If you found this useful, I invite you to:
Buy Me a Coffee: "https://buymeacoffee.com/meet.v",
Be a GitHub Sponsor: "https://github.com/sponsors/meet-v"



