README file from
GithubOne File (Obsidian plugin)
Edit any markdown file on your computer from inside an Obsidian vault, in a distraction-free focus mode.
Instead of copying files into the vault, One File creates a link to the original file on disk. Edits in Obsidian write through to the real file — no duplicates, no sync logic.
Desktop only (macOS / Windows / Linux). The plugin cannot be installed or run on mobile — Obsidian will not show it in the community plugin browser on mobile, and it will not load if installed manually. See the Mobile caveat below for how to work with your files on mobile.
Install
- Copy
main.js,manifest.json, andstyles.cssinto<vault>/.obsidian/plugins/one-file/. - Enable the plugin in Obsidian: Settings → Community plugins.
- Grant Obsidian Full Disk Access (macOS) or the equivalent on your OS if you edit files in protected locations (
~/Desktop,~/Documents,~/Downloads).
Commands
| Command | What it does |
|---|---|
| Open file from computer | Pick an existing markdown file with a native file picker, or pick a folder and enter a filename to create a new one. |
| Open file by path | Type or paste an absolute path. Creates the file if it doesn't exist. |
| Toggle focus mode | Hide/show the ribbon, sidebars, tab bar, and status bar. |
| Clean up links to deleted files | Remove links whose original file was deleted or moved. |
Settings (link folder, cleanup, removing all links) are available under Settings → Community plugins → One File.
How it works
- When you open a file, One File creates a link to it inside a folder in your vault (default:
one-file/mirror/). The link mirrors the original file's path from the root of your disk, e.g./Users/me/notes/idea.md→one-file/mirror/Users/me/notes/idea.md. - This folder is visible in your vault on purpose — you can see exactly what the plugin is doing and where each file comes from.
- Links are remembered, so re-opening a file is instant.
- Opening a file enters focus mode (hides the ribbon, sidebars, tabs, and status bar). Toggle it off with the command.
Caveats
- Links & sync: iCloud, Obsidian Sync, and Dropbox generally do not sync links correctly. If you sync this vault, the links will not travel to other devices. One File is meant for editing on the machine where the files live.
- Original file deleted or moved: the link stops working. One File checks for this automatically when Obsidian starts and removes the broken links. You can also run Clean up links to deleted files at any time.
- Files created directly in the vault are not copied elsewhere — One File only links files you explicitly open through its commands.
- Permissions: editing files in protected locations (like
~/Documentson macOS) requires Full Disk Access for the Obsidian app itself. - Links appear in search and graph: because the link folder is visible, linked files show up in Obsidian search and the graph view. If you'd rather keep them out of search, you can add the link folder to Obsidian's "Excluded files" setting manually — the files remain openable via the plugin's commands.
- Mobile — cloud/shared files: if the file you want to edit lives in a cloud-synced or shared location that is also available on mobile (e.g. an iCloud Drive folder reachable from the mobile Obsidian app), you can open and edit it on mobile as a regular vault file or via an app that can reach that cloud location — but not through this plugin, which is desktop-only.
- Mobile — local-only files: if the file lives on a local disk path not reachable from mobile (e.g.
/Users/...on your Mac, orC:\...on Windows), it is unavailable on mobile. The link created on desktop will not resolve there, and the original file cannot be accessed. Edit these files only on the machine where they live.
Tech notes
- Links are filesystem symlinks, created with Node
fs.symlinkSync. Edits write through to the original file. - Native file dialogs use
@electron/remote, falling back toelectron.remoteon older Obsidian builds. - Focus mode collapses the workspace sidebars via the Obsidian API and hides the ribbon, tab bar, and status bar via injected CSS.
isDesktopOnly: truein the manifest enforces desktop-only installation and loading.- There is no global filesystem watcher — files are linked on demand when you run a command, which keeps the plugin lightweight.
Author
Anand Ramanathan (rcanand) — rcanand.com · @rcanand on X
More from rcanand:
- Maibook — a local-first desktop app for personalized AI agents.
- Pencil - an Obsidian plugin to write with pencil in an infinite whiteboard.
- maiweb — a highly customizable feed of the public web.
- ollamadash — Comparing the latest AI models.
If One File is useful to you, buy me a coffee on Ko-fi.