Engineering 23 min read

One Note, Two Homes: A Symlink That Lives in Projects/ and Areas/

MMNMNOTE
symlinkplain-textPARAfile-managementmarkdownnotes
Updated July 6, 2026

PARA says a project note belongs in Projects/ and a reference belongs in Areas/. Sometimes a note is both. The plain-file answer is older than every note app: ln -s /path/to/note linkname creates a symbolic link — a tiny file whose contents are a path — so the same note appears at two locations without a second copy 1 2.

Symbolic links were introduced in 4.1a BSD Unix in 1982 and later standardised by POSIX 1. Forty-four years later, every current Unix descendant — macOS, Linux, WSL, FreeBSD — still ships them, along with a Windows equivalent Microsoft calls mklink 3. They are transparent to ls, to stat, to your text editor, to git commit, and to rsync -a. They are less friendly to some cloud-sync clients. That honest trade is what this tutorial teaches.

A symbolic link is a small file whose contents are the path to another file. The Linux symlink(2) manual page states it in one sentence: "symlink() creates a symbolic link named linkpath which contains the string target." 2 When any tool opens the link, the kernel reads that stored path and redirects the operation to the target.

There is no duplication, no re-render, no synchronisation lag; there is one file, reachable through two names.

Wikipedia's editors put the same idea in plain English: "a symbolic link (a.k.a. symlink or soft link) is a special computer file that refers to another file or directory by storing a path to it, thus providing an alternative access path without duplicating the target's content." 4 The primitive is that plain. It is not clever. It is not a plugin. It is a filesystem feature the operating system has enforced for four decades.

Because the link is a file, readlink(2) returns its stored path as an ordinary string 5. Because it is a file, git commit can serialise it. Because it is a file, deleting the link does not touch the target; deleting the target leaves the link dangling. Everything the rest of this tutorial teaches is a consequence of that one property.

The one command

On macOS, Linux, WSL, or any BSD, the whole tutorial is one line. The POSIX ln(1) specification defines -s as the flag that "Create[s] symbolic links instead of hard links." 6 Point it at the file you already have, then name where you want the link to appear:

# You already keep the meeting note here (a Project note).
Projects/2026-q3-website-relaunch/kickoff-2026-07-01.md

# You also want it visible under Areas/ as a durable reference.
ln -s "$PWD/Projects/2026-q3-website-relaunch/kickoff-2026-07-01.md" \
      "Areas/website/kickoff-2026-07-01.md"

Verify with ls -l. A symlink shows as l in the mode column, with an arrow pointing at its target:

$ ls -l Areas/website/kickoff-2026-07-01.md
lrwxr-xr-x  1 you  staff  73 Jul  4 09:41 kickoff-2026-07-01.md ->
    /Users/you/Vault/Projects/2026-q3-website-relaunch/kickoff-2026-07-01.md

Open the note through either path. Edit through either path. Save. stat reports the same inode; sha256sum reports the same hash. There is one file. The name in Projects/ says this note belongs to that project. The name in Areas/ says this note is also a permanent reference. Both are true. Neither has to lie.

Absolute versus relative targets. The example above uses an absolute path ($PWD/…). That is the safest default for a symlink you might move later. If you keep the whole vault together and might rename its root, use a relative target so the link survives the rename: ln -s ../../Projects/2026-q3-website-relaunch/kickoff-2026-07-01.md Areas/website/kickoff-2026-07-01.md.

The Windows equivalent

Windows has three flavours of link, all created with mklink. Microsoft's own reference is short enough to quote in full: /d"Creates a directory symbolic link. By default, this command creates a file symbolic link." /h"Creates a hard link instead of a symbolic link." /j"Creates a Directory Junction." 3

For a single note file, the syntax is:

:: Run cmd.exe as Administrator (or enable Developer Mode).
mklink "C:\Vault\Areas\website\kickoff-2026-07-01.md" ^
       "C:\Vault\Projects\2026-q3-website-relaunch\kickoff-2026-07-01.md"

For a whole folder, use /D for a directory symbolic link, or /J for a directory junction. They look similar; they resolve differently and behave differently across drives.

According to Wikipedia's Symbolic link article, which traces the citation chain back to Microsoft's own primaries, creating a symbolic link on Windows requires an elevated Command Prompt — a restriction relaxed in Windows 10 v1703 for accounts with Developer Mode enabled 4. Junctions (/J) do not require elevation, which is why teams stuck with an unelevated login often reach for mklink /J first for the "one folder, two places" case.

Once the link exists, most of your toolchain does the right thing because a symlink is a file with a well-known type. The readlink(2) syscall proves this at the OS level: "readlink() places the contents of the symbolic link path in the [buffer bufsiz]." 5 Tools that care to look can read the stored target as a string; tools that do not care follow the redirect and think they opened one file.

Tool / readerSees a symlink?Preserves on copy?
Any Unix shell (ls -l, stat, readlink, cat)Yes — transparent
Any text editor (Vim, VS Code, Sublime, nvim)Yes — opens through the link, edits the target
git commitYes — stored as file mode 120000 with the target path as content 7Yes — clones and checks out as a working symlink on same-OS
rsync -aYesYes-a implies -l, symlinks are copied as symlinks 8
tar -c (default)YesYes — writes the target path into the archive 9
cp -R (default)Follows throughNo — de-references by default; use cp -RP or cp -a
macOS Finder aliasDifferent mechanism — resolves after target moves 10

Git's behaviour is worth its own sentence. Pro Git, in the Git Internals chapter, states that a tree entry for a symlink uses "120000, which specifies a symbolic link." 7 The blob content is the target path itself, stored literally. That is why a symlink you commit on one machine shows up as a working symlink after git clone on another (subject to core.symlinks on Windows). Your vault's symlinks are version-controlled the same way your notes are.

Yes for the tools most people use to move a vault around — if you use them at their defaults. The trap is the tool that does not preserve them at its default, and reading the flag first is cheaper than restoring the wrong archive later.

rsync preserves. The verbatim archive flag is: "--archive, -a — archive mode is -rlptgoD", where "-l — copy symlinks as symlinks." 8 So rsync -a copies your symlinks as symlinks, not as full copies of the target. The opt-in to de-reference — to convert each link into its referent — is -L / --copy-links. If you did not type -L, you are fine.

tar preserves. The GNU tar manual is equally direct: "Normally, when tar archives a symbolic link, it writes a block to the archive naming the target of the link. In that way, the tar archive is a faithful record of the file system contents. When '--dereference' ('-h') is used with '--create' ('-c'), tar archives the files symbolic links point to, instead of the links themselves." 9 Default preserves; -h opts you into following.

cp -R does the opposite. GNU coreutils cp(1) resolves symlinks by default under -R and writes a full copy at the destination. The flag that preserves them as links is -P ("never follow symbolic links in SOURCE") or the archive shortcut -a. The single most common vault-migration surprise starts with cp -R Vault/ NewVault/ and ends with two copies of every symlinked note. Use cp -RP Vault/ NewVault/ or cp -a Vault/ NewVault/.

Does it survive cross-device sync?

This is where the answer stops being "yes, unconditionally." Cross-device sync engines were built to synchronise files; a symlink is a file whose contents are a path — and behaviour varies by vendor, by operating system, and by client version. Read your sync engine's docs before you rely on a symlink to survive them. Dropbox is a useful illustration because Dropbox itself documents what its client does.

Dropbox's help page Can Dropbox sync symlinks? is a verbatim guide to the boundary: "On computers running macOS or Linux, the path of the file or folder the symlink points to can be synced to Dropbox." On Windows, "The Dropbox desktop app for Windows doesn't support or sync these links." And in the FAQ: "Aliases (macOS), shortcuts (Windows), and symlinks (macOS or Linux) are like labels that point to a file or folder. For this reason, aliases, shortcuts, and symlinks shared on or uploaded to Dropbox may not open on devices that don't have the original file or folder." 11

Read that carefully. Dropbox on macOS or Linux syncs the path the link stores, not the referenced file — so a collaborator without the target locally sees a broken redirect. Dropbox on Windows does not sync symlinks at all.

For iCloud Drive and OneDrive the honest answer is: consult each vendor's current documentation before shipping a workflow that assumes their client preserves symlinks. Community reports for both vary by client version and by whether the target lives inside the synced tree; a single tutorial cannot promise behaviour on a stack it has not verified. The safe rule: keep the target of a symlink inside the synced folder, and expect the symlink itself to be treated as data, not as a live redirect, on the far end.

The version-controlled path around this is quieter. git clone reconstructs a symlink as a working symlink on the same OS (mode 120000, target path as blob content), so a vault you commit and pull between two Macs or two Linux boxes carries its links intact 7. If your sync story is "I push my vault to a private repo and pull it on the other machine," the symlink is preserved by definition. If your sync story is "a proprietary desktop client watches a folder," verify first.

Does it work in Obsidian?

Obsidian's own help page is the answer, and it is honest. From help.obsidian.md/symlinks: "We strongly advise against using symbolic links. By using symbolic links and junctions in your vault, you risk losing or corrupting your data, or crashing Obsidian. Make sure you perform regular back-ups of your vault and settings." 12

The same page continues: "Symlinks may not play well with Obsidian sync, or any other kind of sync. If the target of a symlink is itself a folder that's synced by a different Obsidian vault, you could (potentially) end up with sync conflicts or data loss. Some sync tools, such as Git, don't follow symlinks, but rather sync the path the symlink points to." 12

Take that at face value. Obsidian's team ships an entire documentation page on symlinks precisely because their community keeps asking. The safer pattern inside a vault is a folder-level symlink whose target sits fully outside the vault root; the risky pattern is a file-level symlink whose target is inside the same vault.

Every plain text editor — Vim, VS Code, Sublime, nvim, plain cat — opens through a symlink without fanfare, because they trust the OS to resolve it. Vault engines add their own indexer on top; that indexer is where the caution lives. If the vault engine of your choice publishes similar guidance, follow it.

Common mistakes

  1. rm -r Areas/website/kickoff-2026-07-01.md/ — a trailing slash on a directory symlink can descend into the target and delete it. Use rm linkname (or unlink linkname) to remove just the link. Deleting the symlink is safe; deleting the target destroys the note.
  2. cp -R Vault/ NewVault/ without -P. The default de-references, so you copy full targets into every link's slot and lose the "one file" property. Use cp -RP, cp -a, or (for whole-vault moves) rsync -a Vault/ NewVault/.
  3. Assuming a Finder alias equals a symlink. They do not. Wikipedia's Alias (Mac OS) article documents the difference: an alias "is similar to the Unix symbolic link, but with the distinction of working even if the target file moves to another location on the same disk." 10 A POSIX symlink stores a path; a Mac alias stores a reference to the file itself. Same intent, different mechanism, different failure mode: move the target, and the alias still resolves while the symlink dangles.
  4. Assuming cross-device sync preserves symlinks like rsync -a does. Sync engines differ — Dropbox syncs the stored path on macOS and Linux and ignores symlinks entirely on Windows 11; iCloud Drive and OneDrive behaviour varies by client and version. Verify with your vendor's current docs, or keep symlinks inside a git-tracked vault and let the repo carry them.
  5. Using mklink /D when you needed mklink /J. On Windows without Administrator or Developer Mode, mklink /D fails; mklink /J (junction) does not require elevation and is often the more forgiving default for "put a folder in two places" on Windows. Directory symbolic links follow the POSIX-style redirect rules Microsoft ports; junctions resolve locally on the same volume. If your workflow lives entirely on one Windows drive, /J is usually enough.

Reach for a symlink when a single note file has two legitimate homes and you want a filesystem-level answer that survives every reader from ls -l to git status to your editor. The classic PARA case — this meeting note is both a Project note and a permanent Area reference — is exactly that.

The taxonomy answer to "which folder does this note belong to?" is tags vs folders; the filesystem answer to "what if it belongs to two folders at once?" is ln -s. Different jobs.

Reach for something else when the note lives inside a proprietary database (there is nothing at a path to point at), or when your workflow depends on a sync client whose symlink handling you have not verified, or when what you actually want is one note's content to appear inside another note. That last case is content-reuse, not location-reuse; use the transclusion pattern (![[note]]) supported by most Markdown vault engines, and keep the symlink for the file-at-two-paths case.

Frequently Asked Questions

How do I put the same note in two folders without duplicating it?

Create a symbolic link with ln -s /absolute/path/to/note.md /some/other/folder/note.md (macOS, Linux, WSL, BSD) or mklink linkname target from an elevated Command Prompt on Windows 3 6. The link is a small file whose contents are the target path 2; every tool that opens it is transparently redirected to the same underlying file. Editing through either path edits the one note.

A hard link creates a second directory entry that points to the same inode; the two names are the same file, sharing all metadata, and neither can cross to a different filesystem. A symbolic link is its own file whose contents are a path to another file 2; symlinks can cross filesystems and can point at files that do not exist yet. POSIX ln(1) uses -s explicitly to distinguish the two: "Create symbolic links instead of hard links." 6

Open Command Prompt as Administrator (or enable Developer Mode) and run mklink linkname target for a file symbolic link, mklink /D linkname target for a directory symbolic link, or mklink /J linkname target for a directory junction 3. Windows requires elevated privileges for mklink /D; mklink /J does not require elevation, which is why junctions are often the everyday choice for "put a folder in two places" on a single Windows drive.

No. Wikipedia's Alias (Mac OS) article documents the distinction: an alias "is similar to the Unix symbolic link, but with the distinction of working even if the target file moves to another location on the same disk." 10 A POSIX symlink stores a path and breaks if the target moves; a Mac alias stores a bookmark to the file itself and can resurvive a rename. Same intent, different mechanism, different failure mode.

Yes. Git stores a symlink as a tree entry with file mode 120000; the blob content is the target path stored literally, per Pro Git's Git Internals chapter 7. A committed symlink is reconstructed as a working symlink after git clone on a same-OS machine. Windows behaviour depends on the core.symlinks config; on many Windows configurations the link materialises as a text file containing the target path rather than a native symbolic link.

Partially, and asymmetrically. Dropbox's help page states: "On computers running macOS or Linux, the path of the file or folder the symlink points to can be synced to Dropbox." On Windows: "The Dropbox desktop app for Windows doesn't support or sync these links." 11 Recipients on machines that lack the target file locally will see broken redirects. Keep the target inside the synced folder or version-control the vault instead.

Obsidian's own docs say: "We strongly advise against using symbolic links. By using symbolic links and junctions in your vault, you risk losing or corrupting your data, or crashing Obsidian." 12 Every plain text editor opens through a symlink without incident; vault engines add an indexer whose interaction with symlinks is the caution. Folder-level symlinks whose targets sit fully outside the vault root are the safer pattern; file-level symlinks and cross-vault targets are the risky one.

Use rm linkname or unlink linkname — both operate on the link itself and leave the target untouched. Never run rm -r linkname/ on a directory symlink; the trailing slash asks the shell to descend into the target and remove its contents. When in doubt, run ls -l linkname first: if the mode column starts with l, you are looking at a symlink.


The filesystem is already a graph. You do not need a plugin, a database, or a "smart folder" to make one note live in two places — you need one shell command, three flag defaults you know, and honesty about the sync engine you rely on. Files, as Steph Ango puts it in File over app, "are more important than the tools you use to create them. Apps are ephemeral, but your files have a chance to last." 13 A symbolic link is a file that outlives whichever app opens it. Learn it once; it works everywhere.

MNMNOTE stores each note as a plain Markdown file on your device; a symbolic link you create in your operating system points at that file the same way it would point at any other file in your folder. If that vault lives in your browser but syncs down to disk, mnmnote.com is one such folder — and every command in this tutorial applies to it unchanged.

Footnotes

  1. Wikipedia editors. Symbolic link. https://en.wikipedia.org/wiki/Symbolic_link"Symbolic links were introduced in 1982 in 4.1a BSD Unix. The POSIX standard defines the symbolic link as found in most Unix-like operating systems…" Accessed 2026-07-04. 2

  2. Kerrisk, M. symlink(2) — Linux man-pages 6.10. https://man7.org/linux/man-pages/man2/symlink.2.html"symlink() creates a symbolic link named linkpath which contains the string target." Accessed 2026-07-04. 2 3 4

  3. Microsoft Learn / Windows Server. mklink. https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/mklink — verbatim /d, /h, /j descriptions and the mklink [[/d] | [/h] | [/j]] <link> <target> syntax. Accessed 2026-07-04. 2 3 4

  4. Wikipedia editors. Symbolic link — lede + Windows section. https://en.wikipedia.org/wiki/Symbolic_link"a symbolic link (a.k.a. symlink or soft link) is a special computer file that refers to another file or directory by storing a path to it, thus providing an alternative access path without duplicating the target's content." Accessed 2026-07-04. 2

  5. Kerrisk, M. readlink(2) — Linux man-pages 6.10. https://man7.org/linux/man-pages/man2/readlink.2.html"readlink() places the contents of the symbolic link path in the [buffer bufsiz]." Accessed 2026-07-04. 2

  6. The Open Group / IEEE Std 1003.1-2017. ln(1) — Single UNIX Specification. https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ln.html — §OPTIONS: "Create symbolic links instead of hard links." Accessed 2026-07-04. 2 3

  7. Chacon, S. & Straub, B. Pro Git, 2nd edition, Ch. 10 §10.2 Git Internals — Git Objects. https://git-scm.com/book/en/v2/Git-Internals-Git-Objects"and 120000, which specifies a symbolic link." Accessed 2026-07-04. 2 3 4

  8. Tridgell, A. & Davison, W. rsync(1) man page. https://download.samba.org/pub/rsync/rsync.1"--archive, -a — archive mode is -rlptgoD (no -A,-X,-U,-N,-H)" + "--links, -l — copy symlinks as symlinks." Accessed 2026-07-04. 2

  9. GNU tar manual — §Symbolic Links. https://www.gnu.org/software/tar/manual/html_node/dereference.html"Normally, when tar archives a symbolic link, it writes a block to the archive naming the target of the link. In that way, the tar archive is a faithful record of the file system contents. When '--dereference' ('-h') is used with '--create' ('-c'), tar archives the files symbolic links point to, instead of the links themselves." Accessed 2026-07-04. 2

  10. Wikipedia editors. Alias (Mac OS). https://en.wikipedia.org/wiki/Alias_(Mac_OS)"It is similar to the Unix symbolic link, but with the distinction of working even if the target file moves to another location on the same disk." Accessed 2026-07-04. 2 3

  11. Dropbox Help Center. Can Dropbox sync symlinks?. https://help.dropbox.com/sync/symlinks"On computers running macOS or Linux, the path of the file or folder the symlink points to can be synced to Dropbox." + "The Dropbox desktop app for Windows doesn't support or sync these links." Accessed 2026-07-04. 2 3

  12. Obsidian help maintainers. Symbolic links and junctions. https://help.obsidian.md/symlinks"We strongly advise against using symbolic links. By using symbolic links and junctions in your vault, you risk losing or corrupting your data, or crashing Obsidian." Accessed 2026-07-04. 2 3

  13. Ango, S. File over app. https://stephango.com/file-over-app"Apps are ephemeral, but your files have a chance to last." Accessed 2026-07-04.