Excalibrain may give you what you want. It is uses a configurable syntax means to colour code relationships in a graph.
::has_a [[Banana]]
::is_a [[Fruit]]
Excalibrain may give you what you want. It is uses a configurable syntax means to colour code relationships in a graph.
::has_a [[Banana]]
::is_a [[Fruit]]
Thereâs a new plugin that allows to define and view named connections:
Connect nested tags as a hierarchy on the graph please. And allow for ontology to be defined through inline metadata syntax with links example:
(parent:: [[Note_link]]) or [ parent:: [[Note_link]] ] ⌠allow user to define where parent goes (left, right, top, bottom) etc.
Excalibrain Plugin
Juggl plugin
Breadcrumbs plugin
Hi,
examples:
I know, that there are specific plugins that can solve these tasks, but on the one hand they are kind of complicated and on the other hand, Iâm curios, if I can solve that on my own with dataview.
To accomplish that, I want to use inline-metadata, because, if I am in a project-note in Obsidian, during I talk on the phone to some customer or colleague, I think thatâs the easiest and fastest way to track these things.
As far as I know or understand, there are two ways, that work but unfortunately have great disadvantages and one way that doesnât work, which wouldnât have that disadvantage
ToRemember:: Go to the toilet
#ToRemember:: Go to the toilet
The corresponding dataview would look like this in both cases:
```dataview
Table ToRemember
From "notefolder"
```
The problems of both approaches are:
I want to use links!!! ![]()
Links get updated everywhere.
The notation to use links as metadata-fields would have to look somehow like this:
[[ToRemember]]:: Go to the toilet
The dataview would have to look like this:
```dataview
Table [[ToRemember]]
From "notefolder"
```
⌠unfortunately, the dataview doesnât show any valuesâŚ
Thanks in advance,
kind regards,
Silias
This post is both a feature request and a proposal for how three related capabilities might fit together. The request itself â typed links, or semantic links â is not new. Thereâs a thread from 2020 with 177 votes and years of discussion. But the problem remains unsolved, and I want to reframe it as part of something larger: an architectural vision for how Obsidianâs property system could evolve to match the actual structure of knowledge work.
The core request is simple: links should be able to carry semantic information. Not just âNote A links to Note B,â but âNote A contradicts Note B,â or âNote A depends on Note B,â or âNote A follows from Note B.â The relationship has a type, and that type matters.
This matters because knowledge isnât a flat network of associations. Ideas stand in specific relationships to each other: support, contradiction, causation, sequence, instantiation, generalization. A link that can only say ârelated somehowâ loses this information. The graph shows connections but not their nature. Queries can find links but not filter by what they mean. The backlinks pane lists everything that points here, but not why.
The epistemological problem
Consider what happens when you build a body of notes over years. Thousands of links accumulate. The graph becomes a dense web where everything connects to everything else, and the visualization tells you almost nothing. You hover over an edge and learn only that two notes are linked. You canât see which links represent agreement and which represent disagreement. You canât distinguish a causal relationship from a mere association. You canât tell whether one note extends another or contradicts it.
This is not a minor inconvenience. Itâs a fundamental loss of information. When I link two notes, I know why Iâm linking them. That knowledge exists in my head at the moment of linking. But the system captures only the fact of connection, not its meaning. The semantics evaporate. Later, when I return to these notes, I have to reconstruct from context what the link was supposed to signify.
Worse, the loss is invisible. The graph looks rich and interconnected. It suggests that structure exists. But the structure it shows â raw connectivity â isnât the structure that matters. What matters is how things connect, not just that they connect. A web of contradictions looks identical to a web of supporting arguments. A chain of reasoning looks identical to a collection of associations.
This is why many people find Obsidianâs graph view beautiful but useless. It visualizes the wrong thing. Not because the developers made poor choices, but because the underlying data model canât express what would need to be visualized.
Three features, one architecture
Iâve recently posted two other feature requests that turn out to be deeply related:
Property inheritance addresses how properties flow between notes â from folders, tags, and MOCs to their children. When a folder represents a project, notes within that folder should inherit project-level properties without manual duplication. When a tag represents a category, tagged notes should inherit category-level defaults. This extends the property system horizontally, across the note hierarchy.
Block-level properties addresses how properties apply below the note level â to sections, paragraphs, and blocks within a note. A long document might contain sections in different states of completion, passages written from different perspectives, claims with different confidence levels. Currently, properties attach only to the note as a whole; everything below that boundary is invisible to the property system. This extends the property system vertically, into the internal structure of notes.
Typed links addresses how properties apply to relationships between notes â not âwhat is this note?â but âwhat is the connection between these notes?â A link is an entity in its own right, and like any entity, it can have properties. The most fundamental property is its type: what kind of relationship does this link represent? This extends the property system relationally, into the connections between notes.
Together, these three capabilities form a coherent vision: properties that work in all dimensions. Notes have properties. Blocks within notes have properties. Links between notes have properties. And all of these can be inherited, queried, and visualized in consistent ways.
This isnât three separate features awkwardly bundled together. Itâs one architectural principle â that metadata should be attachable at every level of the knowledge structure â applied consistently across the three dimensions that matter: hierarchy (inheritance), granularity (blocks), and relationship (links).
Use cases in depth
The abstract argument matters less than concrete application. Hereâs where typed links would change how I work:
Fiction writing
A novel is a network of elements: scenes, characters, locations, themes, plot points, timeline events, narrative arcs. The relationships between these elements arenât uniform â they have types that determine how the elements function together.
Consider the relationships a single scene might have:
Currently, I can link a scene note to all the relevant character notes, location notes, theme notes. But the links are undifferentiated. The graph shows that the scene connects to many things; it doesnât show how. To understand the structure, I have to open the note and read the prose where Iâve described these relationships in natural language.
With typed links, the structure becomes queryable:
This isnât just convenient; it changes whatâs possible. A novel is too complex to hold entirely in memory. The relationships between hundreds of scenes, dozens of characters, multiple interwoven plot threads â this exceeds what I can track mentally. Typed links would make the narrative structure navigable as structure, not just as a pile of connected documents.
Technical documentation
Software documentation describes systems with explicit, formal relationships. These arenât vague associations; theyâre typed connections that determine how information should be used.
Consider a component in a software system:
When I document a system, these relationships exist and matter. Currently, I can link between component documentation, but the links lose their type. A link from Component A to Component B could mean ârequires,â âreplaces,â âconflicts with,â or âintegrates withâ â fundamentally different relationships with different implications.
The practical consequence: when I update Component B, I need to find everything affected by the change. But âeverything linked to Component Bâ includes notes that require it (definitely affected), notes that it replaced (historical context, not affected), notes that describe how to integrate with it (potentially affected), and notes that document conflicts (need to verify if conflict persists). Without link types, I canât filter. I have to open every linked note and determine the relationship from context.
With typed links:
The documentation becomes a queryable model of the system, not just a pile of interconnected descriptions.
Zettelkasten and argumentation
The Zettelkasten method is fundamentally about ideas developing through relationship. A note doesnât just exist; it exists in conversation with other notes. It responds to, extends, contradicts, synthesizes, or applies other notes. This dialogical structure is the whole point.
Consider the relationships in an evolving argument:
This is the structure of thinking. Itâs not a flat network of ârelated ideas.â Itâs a directed, typed network of intellectual moves. Each link represents a specific argumentative relationship.
Currently, I can gesture at this structure in prose: âThis note contradicts [[Note E]].â But the relationship type is buried in natural language. The graph shows that notes are connected; it doesnât show the argumentative structure. I canât query for all notes that contradict a position. I canât visualize the flow of argument from thesis through counterexample to synthesis.
With typed links:
The Zettelkasten becomes what itâs supposed to be: a thinking partner that shows you the structure of your own thought. Not just âhere are related notes,â but âhereâs how your ideas connect, where they conflict, and where they might develop next.â
Syntax considerations
The 2020 thread contains multiple syntax proposals. Each has trade-offs. Rather than add another proposal to the pile, I want to consolidate whatâs been suggested and analyze the options.
Option 1: Prefix syntax (Semantic MediaWiki style)
[[contradicts::Other Note]]
[[depends-on::Component B]]
[[foreshadows::Climax Scene]]
[[extends::Previous Argument|see this development]]
The link type comes first, then the target, with optional alias. This reads naturally as âcontradicts Other Noteâ â the relationship is primary. Itâs familiar to anyone whoâs used Semantic MediaWiki or Dataview inline fields. The double colon distinguishes it from other uses.
Advantages: Readable, relationship-first, consistent with existing conventions.
Disadvantages: Differs from standard wikilink syntax where the note name comes first. Might require significant parser changes.
Option 2: Suffix syntax (extended alias)
[[Other Note|contradicts]]
[[Component B|depends-on|display text]]
[[Climax Scene||foreshadows]]
This extends the existing alias syntax. The link target comes first, then the relationship type, then optional display text. The empty field in the third example means âuse default display but specify type.â
Advantages: Builds on existing syntax. Note name remains primary.
Disadvantages: Less readable. Relationship type is buried at the end. Order of type and display text might be confusing.
Option 3: Inline property syntax
contradicts:: [[Other Note]]
depends-on:: [[Component B]]
foreshadows:: [[Climax Scene]]
This treats the typed link as a property that happens to contain a link value. Already works with Dataview for querying. The relationship is expressed as a property name.
Advantages: Already functional with existing tools. Clear semantics.
Disadvantages: Doesnât feel like a âlink with a typeâ â it feels like a âproperty with a link value.â The link isnât first-class; itâs subordinate to the property. Multiple relationship types to the same note require multiple lines. Doesnât appear in graph or backlinks in a typed way.
Option 4: Property syntax with extended link
relationship:: [[contradicts::Other Note]]
Combines property and prefix syntax. The property name is generic (ârelationshipâ or similar), and the link itself carries the type.
Advantages: Explicit about whatâs happening. Works with existing property system.
Disadvantages: Verbose. Redundant structure.
My preference
I favor Option 1, the prefix syntax. It makes the relationship type primary, which matches how I think about typed links. When I create a link, the why often matters more than the what. âThis note contradicts somethingâ is the cognitive move; which note it contradicts is the detail.
But the syntax matters less than the capability. Any of these could work. The important thing is that link types become first-class entities that the system understands â recognized by the parser, visible in the graph, queryable in Dataview, preserved in backlinks.
What typed links enable
Beyond the immediate use cases, typed links unlock capabilities that donât currently exist:
Filtered and semantic graph views
The graph could show only specific relationship types. Display only contradicts relationships to see the structure of disagreement in my notes. Display only depends-on relationships to see dependency chains. Display only follows relationships to see temporal or logical sequences.
Edges could be colored by type: red for contradiction, green for support, blue for extension. The graph would become interpretable â not just âhereâs a web of connectionsâ but âhereâs how different kinds of connections distribute across your notes.â
Edge direction could become meaningful. Currently, the graph shows undirected connections (or treats direction as incidental). With typed links, direction matters: A contradicts B is different from B contradicts A. The graph could show directed edges where the relationship is asymmetric.
Semantic queries
Dataview already queries properties; extending this to link types is natural:
LIST FROM [[]] WHERE link-type = "contradicts"
Find all notes that contradict this one.
TABLE file.name, link-target
WHERE link-type = "depends-on" AND link-target.status = "deprecated"
Find all dependency links pointing to deprecated components.
LIST WHERE any(file.outlinks, (l) => l.type = "foreshadows" AND l.target = [[Climax]])
Find all notes that foreshadow the climax.
The query language would need extension to handle link types, but the conceptual model is straightforward: links have properties, properties can be queried.
Bidirectional type inference
If A contradicts B, then B is contradicted-by A. The inverse relationship could be inferred automatically, just as backlinks are inferred now. This is how the 2020 thread discussed symmetric vs. asymmetric relationships.
Some relationships are symmetric: relates-to, co-occurs-with, conflicts-with (in some uses). If A relates to B, then B relates to A. The same link type applies in both directions.
Other relationships are asymmetric with named inverses: extends / extended-by, contradicts / contradicted-by, requires / required-by, causes / caused-by. The relationship type differs depending on which direction youâre looking from.
The system could understand these inverse pairs. When I create a contradicts link from A to B, the backlinks pane in B would show this as a contradicted-by link from A. The semantics would be preserved in both directions.
Link type vocabularies and schemas
Different domains use different relationship types. Fiction writing needs foreshadows, features, echoes. Technical documentation needs requires, implements, deprecates. Zettelkasten work needs contradicts, extends, synthesizes.
Link type vocabularies could be domain-specific. A vocabulary file could define the valid link types for a project, their inverses, whether theyâre symmetric or asymmetric, and perhaps even their visual representation in the graph.
Combined with property inheritance, a project-level MOC could specify which link types are valid for its children. Notes in the fiction project would autocomplete fiction-relevant relationship types. Notes in the technical documentation would autocomplete technical relationship types. The system would guide users toward consistent vocabulary.
Block-to-block typed links
Combined with block-level properties, links could connect not just notes but specific blocks within notes. This paragraph contradicts that paragraph in another note. This section depends-on that section.
This matters because the unit of meaning is often smaller than a note. A long note might contain multiple claims, each with different relationships to other ideas. Currently, I can only link at the note level, which flattens the structure. Block references exist but donât carry types.
With block-level typed links:
[[contradicts::Other Note#^block-id]]
This links to a specific block and specifies the relationship. The granularity matches how thinking actually works: specific claims relate to specific claims, not just documents to documents.
Transitive relationship tracking
Some relationships are transitive: if A requires B, and B requires C, then A transitively requires C. The system could compute transitive closures for relevant relationship types.
This matters for dependency analysis. If I update Component C, I need to know not just what directly requires C, but what transitively requires it through chains of dependencies. Currently, this requires manual traversal. With typed links and transitivity, it becomes a query:
LIST WHERE transitive-closure(file, "requires", [[Component C]])
What exists now
The current workarounds are inadequate:
Inline fields with link values â contradicts:: [[Note]] â work with Dataview but arenât treated as first-class links. They donât appear in the graph. They donât generate proper backlinks. The backlink in the target note doesnât know the relationship type. Theyâre properties that happen to contain links, not links that carry properties. The semantic information exists but isnât integrated into core functionality.
Prose description â writing âThis note contradicts [[Other Note]]â â preserves the semantics for human readers but not for queries or visualization. The relationship type is buried in natural language. I canât filter for all contradiction relationships. I canât visualize them in the graph. The structure is implicit in text, not explicit in data.
Tags on links â hacks like [[Note#:contradicts]] using the heading syntax â sort of work but feel like exploits rather than features. They abuse the heading-link syntax for an unintended purpose. They donât integrate with the property system. Theyâre fragile to syntax changes. Theyâre not semantically meaningful to the system.
Frontmatter lists â putting links in typed property fields in the YAML, like contradicts: [[Note A]], [[Note B]] â works for some purposes but separates the link from its context in the note body. The relationship is declared at the top of the note rather than where itâs relevant in the text. This works for some use cases (listing all dependencies at the top of a component doc) but not for inline argumentation (noting a contradiction in the flow of writing).
Plugins â Breadcrumbs, Juggl, and others have explored this space. Breadcrumbs implements hierarchy relationships (parent, child, sibling) using properties. Juggl visualizes different link types with different edge styles. These are valuable explorations, but theyâre building on top of a system that doesnât natively support what they need. The solutions are partial, donât integrate with core features like the graph and backlinks pane, and require plugin-specific workflows.
The 2024 thread asking âhave we finally figured out semantic links?â received this reply: âIn short; No. A link is still just a link, and you canât automatically attach any information to the link itself.â
Four years of discussion, 177 votes on the original request, and this remains true.
The architectural argument
Obsidianâs power comes from treating notes as data. The introduction of properties was a significant step: notes became queryable, filterable, sortable by their metadata. But the property system stops at the note boundary â it doesnât reach down into blocks or out into relationships.
The three features Iâve described â property inheritance, block-level properties, and typed links â are different expressions of the same architectural principle: metadata should be attachable wherever itâs meaningful. Notes are one unit of meaning, but not the only one. Blocks within notes carry meaning. Relationships between notes carry meaning. A complete property architecture would acknowledge all three.
This isnât about adding complexity for its own sake. Itâs about matching the toolâs capabilities to the structure of knowledge work.
Knowledge has internal structure â claims within arguments within notes. Properties that can only attach to notes miss this structure. Block-level properties recover it.
Knowledge has relational structure â ideas connect in typed ways, not just generic association. Links that can only say âconnectedâ miss this structure. Typed links recover it.
Knowledge has hierarchical structure â individual notes inherit characteristics from their context, their categories, their containing projects. Properties that must be duplicated across notes miss this structure. Property inheritance recovers it.
A tool that canât express these things forces its users to work around them. The workarounds exist â thatâs what the plugins and hacks demonstrate. But workarounds are friction. They require extra effort, they donât integrate cleanly, they break when the underlying system changes. Native support would make explicit what users are already trying to do implicitly.
A vision for the property system
Imagine Obsidian where:
This is the same property system Obsidian already has, extended consistently into the dimensions where itâs currently missing. The conceptual model doesnât change â properties are key-value pairs attached to entities. What changes is which entities can have properties: not just notes, but blocks and links too.
Related requests
The original typed links thread: Add support for link types (2020, 177 votes)
Recent discussion on the state of semantic links: Have we finally figured out semantic links? (2024)
For this particular use case you could go to the ToRemember note, view its backlinks, and filter by the name of the project.
Or you could use an embedded search:
~~~query
Path:"notefolder" "[[ToRemember]]"
~~~
There are now five plugins that offer this:
Six, thereâs also Typed Links by @Querulant