Meet Vekaria34 downloadsCopy and export selected text, headings, tables, and images.
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:
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.
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.
npm install
npm run typecheck
npm run dev
The 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.
.obsidian/plugins/copykit/ in that vault.manifest.json, generated main.js, and styles.css into that directory.npm run dev running while editing; reload the plugin to test rebuilt output.| 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 |
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.
Update the version in package.json and manifest.json together. Use semantic versioning:
0.x.y while the feature set and public behavior are evolving.1.0.0 when 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:
Additional notices:
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"