✅ Overview

Granular addressing is the ability to point a link at a location finer than a whole file or heading, and to have that pointer survive editing. It is inspired by Doug Engelbart's principle that every object in a document should be intrinsically addressable and linkable.

In scimax this is built on three native org-mode constructs, called anchors, plus a database index that resolves them across files and tracks back-links:

  • Dedicated target <<name>> - a point you can link to with [[name]].

  • Radio target <<<name>>> - every occurrence of the phrase auto-links.

  • Named element #+NAME: name - names a block, table, or other element.

Because an anchor lives in the document text, it travels with its content when you move a paragraph and disappears with it when you delete one. There are no hidden identifiers, no UUIDs scattered through your prose, and no sidecar files: the text is the source of truth, and the scimax database is a derived index that is rebuilt whenever a file is saved. For a live example in this very page, see the dedicated-target demo below.

Anchors

Dedicated targets

A dedicated target marks a specific point. Place <<name>> anywhere in the text and link to it with [[name]]:

We chose SQLite for portability <<why-sqlite>> and zero-config embedding.

Later, in another paragraph or file:
See the rationale at [[why-sqlite]].

The anchor name is human-readable (Engelbart's requirement that addresses be interpretable by people). Use a descriptive slug rather than a cryptic code.

This page dogfoods the feature: the code block above is named, so this link jumps to it, and the sentence here carries a live dedicated target that the Overview links to. Put the cursor on the target and press Shift+F12 to see the back-link from the Overview.

Radio targets

A radio target turns every occurrence of a phrase into a link to one definition, with no explicit [[...]] syntax:

A <<<dynamic knowledge repository>>> is a continuously integrated knowledge base.

Elsewhere, any mention of dynamic knowledge repository becomes a live link.

Use radio targets for named things (defined terms, decisions, glossary entries). Because they auto-link every literal occurrence, reserve them for distinctive phrases, not common words.

Named elements

#+NAME: gives a stable name to the element that follows (a source block, table, figure, equation):

#+NAME: results-table
| x | y |
|---+---|
| 1 | 2 |

Refer to it with [[results-table]].

When to use which

ConstructSyntaxLinked byBest for
Dedicated target<<name>>[[name]]An arbitrary location (a passage)
Radio target<<<name>>>any occurrenceA named term, decision, concept
Named element#+NAME: name[[name]]A block, table, figure, equation

How addressing survives editing

This is the core property that makes anchors useful in living documents.

  • Move a paragraph (within a section, to another section, or to another file): the <<anchor>> moves with the text, so the link still resolves.

  • Delete a paragraph: the anchor goes with it. The link does not silently point at the wrong place; it becomes a detectable orphan (see Orphan link diagnostics).

  • Rename or heavily rewrite: if you change the anchor text, links to the old name orphan, again surfaced as a warning rather than a silent error.

You get this for free because the database is rebuilt from the file on every save. There is nothing to keep in sync by hand.

Commands

CommandTitleWhat it does
scimax.org.linkToHereScimax: Link to HereInsert a readable <<anchor>> at point and copy [[anchor]] to the clipboard
scimax.org.showBacklinksScimax: Show Back-links to AnchorList the links that point at the anchor on the current line

Both are available from the Command Palette (C-S-P, search "Scimax").

The anchor index

Anchors are stored in the scimax database (the same database used for search and the link graph), in an anchors table that records the anchor text, its kind (target, radio, or name), its file, line, character offset, and the heading that contains it. The index is:

  • Derived, not authoritative: the org file is the truth; the index is rebuilt on save and can be regenerated at any time with scimax db sync.

  • Cross-file: anchor names resolve across the whole indexed workspace.

  • Collision-aware: Link to Here checks the index to keep new anchor names unique.

Anchors inside #+BEGIN_SRC, #+BEGIN_EXAMPLE, and similar blocks are ignored, so <<...>> in code is not treated as an anchor.

Worked example

# decisions.org
* Architecture decisions
We chose an embedded database <<why-sqlite>> to avoid a server dependency.

# review.org (another file)
* Review notes
The reasoning for the storage choice is at [[why-sqlite]].
  • Following [[why-sqlite]] in review.org jumps to decisions.org (cross-file resolution via the index).

  • Running Show Back-links on the <<why-sqlite>> line in decisions.org lists the link in review.org.

  • If you delete the <<why-sqlite>> anchor and save, the link in review.org is flagged as an orphan.

Limitations

  • Point, not region: an anchor addresses the point where it sits. To address a paragraph you place an anchor in it; arbitrary elements are not addressable until anchored ("intrinsic on demand" rather than "intrinsic always").

  • Uniqueness: anchor names should be unique within their resolution scope. Link to Here disambiguates automatically, but a hand-written duplicate name resolves to the first match.

  • Cross-file fragments: [[file.org::name]] links are followed but are not yet covered by orphan diagnostics.