# Copy Linked File Copy Linked File is a Windows desktop plugin for Obsidian. It adds a right-click action that copies the real file behind an internal link, local file URL, embed, or file menu item to the Windows clipboard. Use it when a note contains a file link such as: ```markdown [[paper.pdf]] ![[data.xlsx]] [[attachments/report.docx|report]] [spreadsheet](attachments/book.xlsx) [slides]() ``` After choosing **Copy linked file**, paste into File Explorer, email, chat apps, or browser upload controls as if you had copied the file from Explorer. ## Requirements - Obsidian desktop - Windows - PowerShell available as `powershell.exe` The plugin is marked `isDesktopOnly` because it uses Node.js and Windows clipboard APIs. macOS, Linux, iOS, and Android are not supported. ## Usage Right-click one of these targets and choose **Copy linked file**: - A vault file in Obsidian's file explorer - An internal wikilink or embed in the editor - A Markdown link that points to a local `file:///` URL - A rendered internal file link or embed when Obsidian provides the linked file menu The plugin resolves vault targets using Obsidian's link resolver, resolves local `file:///` URLs directly, then writes the target file into the Windows clipboard as a file drop list. ## Privacy and security - No network requests - No telemetry - No account required - No note or attachment modifications - Reads only the target vault file path needed for the copy action - Invokes Windows PowerShell locally to write the file path into the system clipboard The plugin encodes file paths as UTF-16LE base64 before passing them to PowerShell. This preserves paths containing spaces, commas, non-ASCII characters, and punctuation such as em dashes. ## Development Install dependencies: ```bash npm install ``` Run checks: ```bash npm test npm run typecheck ``` Build the release asset: ```bash npm run build ``` The release asset `main.js` is generated at the repository root and is intentionally ignored by git. Upload `main.js` and `manifest.json` to the GitHub release whose tag matches the manifest version. ## Release checklist 1. Update `manifest.json` and `versions.json`. 2. Run `npm test` and `npm run typecheck`. 3. Run `npm run build`. 4. Create a GitHub release with a tag matching `manifest.json` `version`. 5. Attach `main.js` and `manifest.json` to the release. 6. Submit the plugin to `obsidianmd/obsidian-releases`. Community plugin entry template: ```json { "id": "copy-linked-file", "name": "Copy Linked File", "author": "Ximkool", "description": "Copy the vault file behind an internal link or file menu item to the Windows clipboard.", "repo": "YOUR_GITHUB_USERNAME/obsidian-copy-linked-file" } ``` ## License MIT