README file from
GithubNative File Copy
Windows-only Obsidian plugin that changes Ctrl+C in the focused File Explorer into a native Windows file copy.
It copies the selected files and folders as a FileDrop clipboard object. Applications that accept file attachments can receive the files directly instead of receiving a text path.
Features
- Activates after clicking inside Obsidian's File Explorer.
- Restores normal text copying when focus moves to an editor or text input.
- Supports one or more selected files and folders.
- Keeps a selected parent folder and ignores selected descendants inside it.
- Does not change
Ctrl+Cbehavior in the editor or other views. - Does not archive folders. The receiving application decides whether it accepts a copied folder.
Requirements
- Obsidian desktop on Windows.
- A local filesystem vault. Remote or read-only vault adapters are not supported.
Install from Community Plugins
After the plugin is published in the Obsidian Community directory, open Settings → Community plugins → Browse, search for Native File Copy, and select Install followed by Enable.
Manual installation
For a local build, run:
npm ci
npm test
npm run build
Copy main.js and manifest.json into:
<Vault>/.obsidian/plugins/native-file-copy/
Then reload Obsidian and enable Native File Copy in Settings → Community plugins.
The development helper can install the current build into any local vault:
npm run install:vault -- "C:\path\to\your\vault"
Privacy and capabilities
The plugin does not use network services or telemetry. When copying, it reads the selected vault paths and invokes the local Windows powershell.exe process to place those paths on the Windows file-drop clipboard. This is why the plugin is desktop-only and Windows-only.
Obsidian does not expose File Explorer selection as a stable public plugin API. This plugin reads the File Explorer's internal selection state, which should be retested after major Obsidian upgrades.
Release checklist
Before publishing a release:
npm ci
npm test
npm run build
Create a GitHub release whose tag exactly matches the version in manifest.json, then upload main.js and manifest.json as individual release assets.