With regard to a syntax for linking to other notes, @tessus previously suggested an approach where the editor would help create links by offering an auto-complete/search popup when you type [[. This approach is also implemented by the Quick Links plugin, but using @@ instead of [[. In both cases, the link that is actually inserted into the note still uses the regular [note title](:hash) link, so no dedicated syntax is introduced.
While this approach is a great step forward and offers a large part of the usability of the [[another-note]] syntax used by similar apps, it is not a complete substitute. In particular:
- The dedicated syntax is a lot more concise. When using links in running text, the markdown source is significantly more readable when it contains
[[another-note]] than when it contains [another-note](:/ca58c582bf03455881cd9f292dfe2e88).
- With a dedicated syntax, you can also link to notes that do not exist yet. This allows a workflow where you just write one note first, already putting in link to other to-be-written notes without having to break your writing flow to create these notes first (or remembering where you wanted to add links and remember to add them later). After completing the first note, you can just click the "broken" links to create the other notes next. If I understand it correctly, this kind of workflow is part of the Zettelkasten method. In addition, you can even postpone writing these linked notes further, keeping the links as a reminder that you would like to write about these subjects, or just to ensure that if you ever do decide to write about them, they are already linked (this is the wiki workflow, I guess).
Node identity
Note that having a syntax on the Markdown side is not necessarily enough, since this also heavily impacts the concept of note identity. In Joplin, notes are identified by using some immutable opaque id/hash, which are also used as filenames in storage. Looking at other apps that use this [[note]] syntax (I've briefly looked at Obsidian and Logseq), I suspect that they all use human-readable note ids/filenames. This means that a syntax like [[foo]] is essentially just a shorthand for linking to the file called foo (which works well if filenames are in a flat namespace, if directories are used for structure, the links might not be directly resolvable).
Translating this to Joplin, if a [[foo]] syntax would be introduced by itself, using e.g. the target note's title (or a slug derived from it maybe) to link, this would require some lookup from node id to filename to resolve these links, making the resulting markdown more closely tied to the Joplin app than if it would just point to a filename directly.
I am not sure if these other systems interchange the node id and title, or that the the node id is derived from the initial title and then becomes immutable, or maybe can be changed updating all backlinks, but any of these approaches seem possible and reasonable. As for updating backlinks, that is of course a little fragile, but could be manageable if backlinks are tracked in a separate metadata database table as suggested elsewhere in this thread (for displaying backlinks automatically).
Syntax
With regard to syntax, it seems the [[node-id]] syntax is quite commonly used in similar apps. The original post already mentioned NVAlt , Roam Research and Zettler , and I've also seen Obsidian and Logseq to do the same. The origin of this syntax is probably various wiki markups that also use it to create links to named pages.
I've looked to see if this syntax is somehow standardized in CommonMark, but it seems it is not in the core spec and CommonMark (probably intentionally) does not specify any extensions. I did find a very old discussion/proposal about such a syntax, that essentially suggests that [[foo]] should be a shorthand for [foo](foo).
One other thing to consider is that markdown allows "reference links", e.g.:
This paragraph contains a [link][target] with the target defined out-of-line.
[target]: httpshttps://example.org
There is also a collapsed version of this ([link][] as as shorthand for [link][link]) and reading the spec I found that CommonMark also added a shortcut version ([link] as a shorthand for [link][link]).
Possibly this syntax could also be used. For example, when you insert a link using the "Quick Links plugin method", it does not insert [another-note](:/ca58c582bf03455881cd9f292dfe2e88), but inserts:
Some running text linking to [another-note].
[another-note]: :/ca58c582bf03455881cd9f292dfe2e88
The reference definition (link target) could be maybe inserted at the end of the note, to keep them out of the way. This would solve the readability consideration above, though still not allow linking to non-existing notes.
Another approach could be to omit the "reference definition" clauses and automatically resolve reference links without a definition to other notes (based on the note title, or the filename/id if moving away from the hash as note id). i.e. just use [foo] in the running text, and if no [foo]: ... line is found, resolve that as a link to the foo page. This would allow links to non-existing pages as well (but would maybe be less suited to auto-completing links, since [ could also start the link text of a regular link...)