Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Pubcopy

canartuccanartuc55 downloads

Copy notes as platform-optimized HTML for Medium and Substack.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates8

Obsidian plugin that copies your notes as platform-optimized HTML to clipboard for pasting into Medium and Substack without formatting loss.

Install

From Obsidian (recommended)

Settings > Community plugins > Browse > Search "Pubcopy" > Install > Enable

Manual

  1. Download main.js, manifest.json, styles.css from the latest release
  2. Create folder: <your-vault>/.obsidian/plugins/pubcopy/
  3. Copy the 3 files into that folder
  4. Restart Obsidian
  5. Settings > Community plugins > Enable "Pubcopy"

Usage

Three ways to trigger:

Method Behavior
Command Palette (Cmd/Ctrl+P) > "Pubcopy" Copies entire note
Right-click in editor > Pubcopy submenu Copies selected text (or entire note if no selection)
Three-dot menu (top-right of note) > Pubcopy submenu Copies entire note

Each method offers two options:

  • Copy for Medium
  • Copy for Substack

After copying, paste (Cmd/Ctrl+V) into the Medium or Substack editor.

What gets converted

56 Obsidian markdown elements are handled:

Element Medium Substack
Bold, italic, strikethrough, inline code Yes Yes
Highlights ==text== Converted to bold Converted to bold
Headers H1-H4 Yes Yes
Headers H5-H6 Flattened to H4 Yes
Lists (ordered, unordered, nested) Max 2 levels Unlimited
Task lists - [ ] Unicode checkboxes Unicode checkboxes
Callouts > [!note] Styled blockquote with label Styled blockquote with label
Code blocks (with language) <pre><code> <pre>
Tables HTML table HTML table
Images (local) Base64 embedded Base64 embedded
Images (remote URL) URL passthrough URL passthrough
Image captions Italic text below image <figcaption>
Footnotes Superscript + Notes section Native
Math (LaTeX) Rendered via KaTeX Rendered via KaTeX
Mermaid diagrams Stripped (not supported) Stripped (not supported)
Wikilinks, tags, comments, frontmatter Stripped Stripped
Embeds ![[note]] Resolved and inlined Resolved and inlined

Settings

Settings > Community plugins > Pubcopy > Settings

Setting Default Description
Strip frontmatter On Remove YAML frontmatter
Strip tags On Remove #tag references
Strip wikilinks On Convert [[links]] to plain text
Mermaid format SVG SVG or PNG (for future use)
Image handling Auto Auto: base64 for local, URL for remote
Show notification On Display notice after copying

Development

Prerequisites

  • Node.js 18+
  • npm

Setup

git clone https://github.com/canartuc/pubcopy.git
cd pubcopy
npm install

Build

# Development (watch mode, rebuilds on file change)
npm run dev

# Production build
npm run build

Test

# Run all tests
npm test

# Watch mode
npm run test:watch

Deploy to your vault

First run asks for your vault path and saves it to .deploy.json (gitignored):

npm run deploy
# > Obsidian vault path: /path/to/your/vault
# > Saved to .deploy.json
# > Deployed to .../plugins/pubcopy

Every subsequent run just builds and copies:

npm run deploy

After deploying, restart Obsidian or reload the plugin.

Project structure

src/
├── main.ts                    # Plugin entry, commands, menus
├── settings.ts                # Settings interface and tab
├── converter/
│   ├── index.ts               # Conversion pipeline orchestrator
│   ├── preprocessor.ts        # Strip frontmatter, tags, wikilinks, etc.
│   ├── html-converter.ts      # Markdown to HTML via remark/rehype
│   ├── image-handler.ts       # Local base64, remote URL, captions
│   ├── embed-resolver.ts      # Resolve ![[note]] embeds
│   ├── footnote-processor.ts  # Platform-specific footnotes
│   └── math-renderer.ts       # LaTeX via KaTeX
├── platforms/
│   ├── index.ts               # PlatformProfile interface
│   ├── medium.ts              # Medium-specific rules
│   └── substack.ts            # Substack-specific rules
├── clipboard/
│   └── writer.ts              # Clipboard API (text/html + text/plain)
└── utils/
    ├── errors.ts              # PubcopyError, WarningCollector
    └── notifications.ts       # Obsidian Notice wrappers

Release

Push a tag to trigger a GitHub Actions release:

# Update version in manifest.json and package.json first
git tag X.Y.Z
git push origin X.Y.Z

GitHub Actions runs tests, builds, and creates a release with main.js, manifest.json, and styles.css.

License

MIT

90%
HealthExcellent
ReviewSatisfactory
About
Copy notes as platform-optimized HTML for Medium and Substack, preserving formatting and converting 56 Markdown elements — headers, lists, code blocks, tables, images, footnotes and KaTeX. Paste converted HTML directly into Medium or Substack from whole notes or selected text.
ExportHTMLMarkdown
Details
Current version
1.3.3
Last updated
2 months ago
Created
2 months ago
Updates
8 releases
Downloads
55
Compatible with
Obsidian 1.5.0+
Platforms
Desktop, Mobile
License
MIT
Report bugRequest featureReport plugin
Sponsor
Support
Author
canartuccanartuc
www.canartuc.com
GitHubcanartuc
  1. Community
  2. Plugins
  3. Export
  4. Pubcopy

Related plugins

markdown export

Export Markdown to a package, including images.

Marp Slides

Create Marp presentations.

Importer

Import data from Notion, Evernote, Apple Notes, Microsoft OneNote, Google Keep, Bear, Roam, and HTML files.

Outliner

Work with your lists like in Workflowy or Roam Research.

Various Complements

Complete words similar to auto-completion in an IDE.

Linter

Format and style your notes. Linter can be used to format YAML tags, aliases, arrays, and metadata; footnotes; headings; spacing; math blocks; regular Markdown contents like list, italics, and bold styles; and more with the use of custom rule options.

Fantasy Statblocks

Create, manage and view a Fantasy Bestiary with Dungeons and Dragons style statblocks.

Custom Frames

Turn web apps into panes using iframes with custom styling. Also comes with presets for Google Keep, Todoist and more.

Auto Link Title

Automatically fetches the titles of links from the web.

Chronos Timeline

Render interactive timelines inline in your notes from simple markdown