Ontomark

by DreamLab AI
5
4
3
2
1
Score: 30/100

Description

Category: Learning & Knowledge Management

The Ontomark plugin builds an ontology from typed frontmatter while keeping notes as plain Markdown. Its graph distinguishes stated relationships from inferred edges, with search, zoom and neighbourhood focus. An ontology panel lists classes, individuals and properties alongside reasoning diagnostics. A local OWL 2 EL reasoner updates as notes change and reports unsupported constructs rather than approximating them. SPARQL queries can use stated facts, inferred facts or both, including live results rendered inside notes. Changes to entity types and parents appear as diffs for review before being applied. Optional assisted ingest sends a note to a chosen model endpoint, then checks suggested facts against existing vocabulary and quoted evidence. It runs offline until an endpoint is configured. The plugin is desktop only, reads assertions from frontmatter rather than inline fields and implements only part of OWL 2 EL.

Reviews

No reviews yet.

Stats

7
stars
321
downloads
0
forks
6
days
1
days
1
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
1
total issues
1
open issues
0
closed issues
39
commits

Latest Version

2 days ago

Changelog

Engine repinned to ontomark v0.4.0. No feature changes since 0.3.5.

SHA-256 ontomark-obsidian-0.3.6.zip: 1d6415c263e004ef0a723caa8f1694c87032aaf063c262b3187711f764a47a27

README file from

Github

Ontomark for Obsidian

Make your vault mean something to a machine, without changing how you write. Add a type and a parent link to a note's frontmatter and Ontomark turns your vault into an ontology: it draws the hierarchy, works out what follows from it, answers precise questions about it, and shows every proposed change as a diff before anything is written. Notes stay plain Markdown. Nothing leaves your computer unless you choose to connect a model.

https://github.com/user-attachments/assets/5a129220-975a-4ac9-b501-d2b0365022cb

Quick tour (2:09): graph, ontology panel, SPARQL queries and reviewed edits. Open the video issue.

Why bother?

Backlinks tell you two notes are related. They cannot tell you how. An ontology can: Rex is a Dog, Dog is a kind of Animal, so Rex is an Animal, and anyone, human or agent, asking "which animals are in this vault?" gets Rex without you ever writing that down.

That matters most when a vault grows past what you can hold in your head, and when you start pointing AI tools at it. A model reading prose sees words that happen to sit together. A model reading a typed graph gets facts it can follow, check and cite. Ontomark gives your vault that layer, locally.

Three notes is enough to start

# Animal.md
---
type: class
---
# Dog.md
---
type: class
subclass-of: ["[[Animal]]"]
---
# Rex.md
---
type: individual
instance-of: ["[[Dog]]"]
---

Open Ontology graph. Solid edges are what you wrote; the dashed Rex → Animal edge is what the reasoner worked out. No folder layout, no special syntax beyond three frontmatter keys.

What you get

Ontology graph Explore typed notes and their hierarchy. Search, zoom, focus a neighbourhood, open the note. Inferred edges are dashed.
Ontology panel Browse classes, individuals and properties; see stated and inferred parents, and anything the reasoner could not handle.
Local reasoning An OWL 2 EL reasoner runs inside Obsidian and keeps up as you edit. Nothing is approximated: if a construct is unsupported, it says so.
SPARQL Ask structured questions (SELECT, ASK, CONSTRUCT) over what you stated, what was inferred, or both. A working example is loaded for you.
SPARQL in a note Put a query in an ontomark-sparql code block and it renders its result there, live. __THIS__ is the note it sits in and [[Note]] is any entity note; # dataset: combined includes what was inferred. After Dot Triples.
Reviewed edits Commands to make a note a class, individual or property, or add a parent. Every change is a diff you apply, and is refused if the file changed underneath it.
Assisted ingest Point the plugin at a model endpoint of your choosing, enter a key for the session, and run Extract facts from this note. The model suggests; the engine checks every suggestion against your vault and the note's own text; you see a diff with each quote beside its fact, and the refusals with their reasons, and decide. Off by default: nothing is sent until you set an endpoint, and then only to that one URL, only when you run the command.

How the plugin works, as a bench of nine stations: notes in, a typed-frontmatter gate, indexer, reasoner, graph, panel, SPARQL, reviewed diff, and the optional ingest bolt-on, drawn plugged in

The ingest modal in Obsidian: a diff adding one grounded fact, its quote, and two refusals with their reasons

Every count in the drawing comes from one six-note example vault (docs/figures/anatomy-src/model.mjs); the build fails if the drawing stops matching it. Ingest is drawn switched on; it is off by default and does nothing until you set an endpoint. The figure follows your system's light or dark setting.

About assisted ingest

Language models are good at reading a note and bad at being trusted with your ontology: they invent identifiers, merge things that share a name, and quote text that is not there. Ontomark's ingest lets the model do only the reading.

  • The model receives the note's text, its label and the keys it may fill. Never other notes, never your vault path, never your API key.
  • The engine grounds every proposed name against the labels and aliases already in your vault; the model's own identifiers are ignored. A name that fits two notes is withheld as ambiguous, not guessed.
  • Every value needs a verbatim quote from the note, and the quote has to mention the value. Literals are checked against their types (3,5 is not a decimal; 2023-02-29 is not a date).
  • Everything accepted becomes one patch, shown as the usual diff with the evidence highlighted. Everything refused is listed with the reason. Apply is the normal reviewed-edit path; undo is Obsidian's undo.

One endpoint, the one you type in, is the only place the plugin can send anything, and only when you run the command. Type the final URL: Obsidian's request layer follows redirects on its own, so the plugin refuses a 3xx answer rather than letting a hop choose the destination for you. ADR-OBS-003 is the full decision.

SPARQL in a note

A query that is about a note belongs in that note. In reading view, this block shows every type Rex has, stated or inferred:

```ontomark-sparql
# dataset: combined
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?type WHERE { __THIS__ rdf:type ?type } ORDER BY ?type
```

An ontomark-sparql block rendered in reading view: a table of the five types Rex has, stated or inferred

__THIS__ is the note the block sits in; [[Dog]] or [[Dog|the dog]] is that note's entity; the first comment may pick the dataset. The query is plain SPARQL otherwise, so it pastes into the SPARQL view or any other engine unchanged. A reference that does not resolve stops the block with a reason, and nothing runs. The in-note surface and its two tokens follow Cristian Vasquez's Dot Triples, with one difference: references inside string literals and comments are left alone (ADR-OBS-004).

Why it works

A few numbers from the research this rests on:

  • Asking a model questions over a knowledge graph instead of the raw database schema took GPT-4's accuracy on enterprise questions from 16% to 54% (Sequeda, Allemang & Jacob, 2023, arXiv:2311.07509).
  • Letting the model propose names and grounding them against a real vocabulary afterwards returned the correct ontology identifier for 98 of 100 terms; asking the model for identifiers directly got 3 of 100 (SPIRES, Caufield et al., Bioinformatics 2024, arXiv:2304.02711). That is the pattern Ontomark's ingest follows.
  • Left to their own devices, models fabricate: 55% of GPT-3.5's and 18% of GPT-4's literature citations in one study did not exist (Walters & Wilder, Scientific Reports 2023, doi:10.1038/s41598-023-41032-5). Hence a diff you review, not an edit you discover.
  • The reasoning is cheap by design. OWL 2 EL keeps classification polynomial even with general axioms (Baader, Brandt & Lutz, IJCAI 2005), which is how an EL reasoner classifies SNOMED CT's ~300,000 concepts in under ten seconds (Kazakov, Krötzsch & Simančík, J. Automated Reasoning 2014). A vault is a great deal smaller.

Two things make the approach sound rather than hopeful. OWL 2 EL is the fragment of the Web Ontology Language built for large class hierarchies: classification is polynomial, which is why terminologies with hundreds of thousands of classes use it and why it can run inside an editor. And grounding is a separate, deterministic step: following the SPIRES pattern (Caufield et al., OntoGPT), the model proposes names and the engine resolves them against your real vocabulary, so a model error becomes a withheld suggestion rather than a wrong fact.

Under the hood

Under the plugin sits Ontomark, a Rust workspace (parser, typed model, whelk-el reasoner, RDF/SPARQL compiler, ingest) compiled to WebAssembly and embedded in the plugin, running in a background worker. The graph view is the shared ontomark-graph package. The plugin itself is TypeScript, built with esbuild against the Obsidian API, and its release gate runs the built plugin in a Docker container with networking disabled and a tripwire on any socket, DNS or fetch.

What gets indexed. Every Markdown note in the vault, except notes in the folders listed in the plugin's Excluded folders setting (top-level folder names, templates by default, so a Templater template's placeholder frontmatter never becomes an entity) and anything covered by Obsidian's own Excluded files setting. No folder layout is required: ontology notes can sit anywhere, next to everything else. A note whose frontmatter says type: class, type: individual or type: property becomes an entity; every other note is prose and asserts nothing. Changing the excluded folders reindexes the vault (ADR-OBS-005).

Limits worth knowing. Desktop only for now. Reasoning covers the implemented part of OWL 2 EL (no property-range reasoning, no broader individual-level reasoning); unsupported constructs mark the result incomplete. Very large vaults fall back to a relevant-only classification policy and say so. SPARQL refuses UPDATE, SERVICE, FROM and DESCRIBE, and caps rows and time. Ingest proposes facts against the vocabulary you already have; it will not invent classes, and the guards decide what is safe to write, not what is true, which is why you review. Until you set an endpoint, the plugin makes no network requests at all; its release tests run it in a container with networking disabled. Inline key :: value fields are not read, on purpose: only frontmatter asserts, so a diff is the whole review. If you want every field and link in your vault as RDF, Dot Triples does that, and Ontomark's bridge joins the two graphs.

How it does on a real corpus

My own main vault is a public knowledge graph of 8,446 typed notes (AI, governance, XR and more), published at narrativegoldmine.com with its live graph, kept to a stricter frontmatter spec, the VisionFlow corpus contract: every page has a stable resource IRI, is-a parents, a public gate and provenance. The plugin's optional Estate corpus profile reads that spec directly. Running the v0.2.0 engine over the whole vault (the figures below predate the plugin's current engine; later releases changed only the frontmatter parser and diagnostics, not the reasoner), on an ordinary laptop (Intel i7-1165G7, 16 GB, Obsidian 1.14.4):

  • all 8,446 notes indexed as entities, 278k triples in about 2 s;
  • full classification in about 1.5 s, complete, no unsatisfiable classes, about 58k subclass links in the combined graph;
  • and real problems surfaced in the data: 935 ambiguous parent links (a [[Decentralized Autonomous Organization]] that matches both DAO and the full-name note), 936 parents pointing at pages that do not exist, and 42 accidental is-a cycles that quietly make two classes one (automation ≡ smart-home was the author's favourite). Cleanup is in progress.

Ontomark's engine README reports the same corpus through its command-line build, which applies a different public gate and so counts 9,244 classes; the two figures measure different things, not a disagreement.

Install

Ontomark is in the community directory: Settings → Community plugins → Browse, search for Ontomark, or open obsidian://show-plugin?id=ontomark.

To install by hand instead:

  1. Download ontomark-obsidian-0.3.6.zip from the 0.3.6 release.
  2. Extract it into <vault>/.obsidian/plugins/; it creates an ontomark folder.
  3. Settings → Community plugins, enable Ontomark, reload if Obsidian was open.

Each release ships with the engine inside it: no Node, Rust, account, database or internet connection is needed.

Frontmatter reference

Only notes with type: class, type: individual or type: property become ontology entities. Everything else stays a plain note. Prose wikilinks are never assertions.

Key Meaning
type class, individual or property
title, aliases Display name and other labels (also what ingest grounds against)
iri Optional explicit identifier; otherwise derived from the note path
subclass-of / is-a Parent class
equivalent-to, disjoint-with Equivalent or mutually exclusive classes
instance-of Class of an individual
domain, range, subproperty-of Property description and hierarchy

Write relations as a list of quoted links: subclass-of: ["[[Animal]]"], or one - "[[Animal]]" per line. Ontomark reads a single quoted link too, but Obsidian stores that as text, so list filters in Bases such as note["subclass-of"].contains(this.file.asLink()) skip it; the panel notes it as info. (Bases needs the note["…"] form for a hyphenated property: a bare subclass-of.contains(…) is read as subtraction and matches nothing.) An unquoted [[Animal]] is read by YAML as a nested list, so quote it.

The ontology panel's diagnostics: an error, a warning, and the info note for a relation written as a single value

Other keys are kept as annotations. The default Generic profile works in any vault; the optional Estate corpus profile is for corpora that follow the VisionFlow contract.

Further afield

This repository is only the Obsidian interface. If you want to go deeper:

Node 22 or later. The build fetches the pinned Ontomark engine and verifies its SHA-256; no Rust toolchain is required.

npm ci --include=dev
npm run build
npm run check:bundle
npm test
npm run test:wasm
npm run test:offline

Licence

MIT OR Apache-2.0. The release ZIP includes third-party notices; upstream credits cover the engine's components.

Similar Plugins

info
• Similar plugins are suggested based on the common tags between the plugins.
Frontmatter Tag Sugest
5 years ago by Jonathan Miller
Autocompletes tags in Obsidian YAML frontmatter. No more deleting #!
Front Matter Title
4 years ago by Snezhig
Plugin for Obsidian.md
Open Related Url
4 years ago by Dan Pickett
FuzzyTag
4 years ago by Adrian
Note aliases
4 years ago by Pulsovi
This plugin manages wikilinks aliases and save them on the aliases list of the linked note
Testing Vault
4 years ago by Michael Pedersen
Frontmatter Alias Display
4 years ago by muhammadv-i
A plugin for Obsidian.md to show front-matter aliases as display names in the file menu.
Auto Front Matter
3 years ago by conorzhong
Advanced Random Note
3 years ago by Karsten Finderup Pedersen
Create commands from custom queries to open random notes
Add an ID to the front matter
3 years ago by llimllib
Update frontmatter modified date
3 years ago by Alan Grainger
Automatically update a frontmatter/YAML modified date field
Frontmatter generator
3 years ago by Hananoshika Yomaru
A plugin for Obsidian that generates frontmatter for notes
Sort Frontmatter
3 years ago by Kanzi
Sort frontmatter automatically
Local GPT
3 years ago by Pavel Frankov
Local Ollama and OpenAI-like GPT's assistance for maximum privacy and offline access
Ollama Chat
3 years ago by Brumik
A plugin for chatting with you obsidian notes trough local Ollama LLM instead of Chat GTP.
Default query in backlinks
3 years ago by Benature
Semantic Canvas
3 years ago by Aaron Gillespie
An Obsidian Plugin to update note properties using links on Canvases
Update Time Updater
3 years ago by MURATAGAWA Kei
Obsidian plugin to update the 'update time' element when saving or manually.
Draft Indicator
2 years ago by Brian Boucheron
Show draft status with ✎ icons in the Obsidian file explorer.
Query JSON
2 years ago by rooyca
Read, query and work with JSON inside Obsidian.
Quran Helper
2 years ago by Ammar Alakkad
Obsidian plugin to find and insert any Quran Ayah (verse) in your notes
Front Matter Timestamps
2 years ago by LighthouseDino
Track note created and modified times in front matter, kept up to date automatically.
Onto Tracker
2 years ago by Jacob Hart
Plugin for obsidian allowing project management with ontologies.
Recent Files
6 years ago by Tony Grosinger
Display a list of most recently opened files
Vantage - Advanced search builder
6 years ago by ryanjamurphy
Vantage helps you build complex queries using Obsidian's native search tools.
Dataview
6 years ago by Michael Brenan
A data index and query language over Markdown files, for https://obsidian.md/.
Tasks
5 years ago by Clare Macrae and Ilyas Landikov (created by Martin Schenck)
Task management for the Obsidian knowledge base.
Force note view mode
5 years ago by Benny Wydooghe
InfraNodus AI Graph View
2 years ago by Nodus Labs
Advanced graph view for Obsidian: text analysis, topic modeling, and AI with InfraNodus AI text analysis tool: https://infranodus.com
Featured Image
2 years ago by Johan Sanneblad
Obsidian plugin to automatically set a featured image property in your notes based on the first image, YouTube link, or Auto Card Link image found in your document. This allows you to create rich note galleries using Folder Notes and Dataview.
Frontmatter Markdown Links
2 years ago by mnaoumov
Obsidian Plugin that adds support for markdown links in frontmatter
Hephaistos Importer
2 years ago by Skallaturi
Non-official plugin for importing characters from Hephaistos.online to Obsidian.md
Fold Properties By Default
2 years ago by Tommy Bergeron
Always have editor/metadata properties folded by default.
Paste Image Into Property
2 years ago by Nito
SQLite DB
2 years ago by Stefano Frigerio
Note Favicon
2 years ago by mdklab
Obsidian plugin – Show Favicon from Metadata
Related Notes
2 years ago by Oluwasanya Awe
Title-Only Tab
a year ago by tristone13th
a plugin of obsidian for to change showing tab name to short
Note UID Generator
a year ago by Valentin Pelletier
Allow you to automatically generate UID for the notes in your vault.
Simple Banner
a year ago by Sandro Ducceschi
Visually enhance your Obsidian notes with a customizable banner. Supports icons and time/date display.
Current View
a year ago by Lucas Ostmann
Automatically set the view mode (Reading, Live Preview, Source) for notes in Obsidian using folder rules, file patterns, or frontmatter.
Frontmatter Metadata Link Classes
a year ago by Varvara Zmeeva / zmeeva.io
Enhanced internal links with automatic classnames based on frontmatter metadata.
Insert Arknights URL Banner
a year ago by Rerurate_514
Obsidianのプラグイン、img_dwnldr_wikigg_ak_ktに保存されている画像を選択してbannersプロパティに簡単に設定できるプラグイン
Template Folder
a year ago by LucasOe
Obsidian plugin to move notes to a folder when applying a template.
Publish Note to Mowen Note
a year ago by ziyou
This is a mowen plugin for Obsidian (https://obsidian.md)
Datacore
a year ago by Michael Brenan
Work-in-progress successor to Dataview with a focus on UX and speed.
Auto Keyword Linker
9 months ago by Daniel Rhodes
Stop manually typing [[brackets]] around recurring terms. Configure keywords with variations once, and automatically link them as you write or across your entire vault.
Conditional Properties
9 months ago by Diego Eis
Automate frontmatter property updates in your Obsidian notes using simple conditional rules.
Connections
9 months ago by Eric Van Cleve
Frontmatter to HTML Attributes
7 months ago by Tarek Saier
Auto Math
7 months ago by Vladislav Sorokin
Auto-expand LaTeX math snippets in Obsidian — write equations faster.
Banners Reloaded
7 months ago by Dani García
Banners Reloaded offers a simple, fast, and lightweight way to add beautiful and customizable banners to your Obsidian notes. Designed for performance, it gives you powerful control over your vault's appearance through an intuitive interface. Set banners globally, by tag, or override them on any individual note.
Base Board
5 months ago by mderazon
Kanban Plugin For Obsidian
Life Tracker
5 months ago by Sébastien Dubois
Capture and visualize the data that matters in your life
Journalit
3 months ago by Cursive
Obsidian trading journal with broker sync, trade imports, analytics, prop firm tracking, reviews and rule-based trading workflows.
Neural Composer
3 months ago by Oscar Campo
AI-Powered Graph Memory for Obsidian
Offline Whisper Transcription
3 months ago by David Manthey
Karpathy LLM Wiki
3 months ago by Greener-Dalii
Karpathy's LLM Wiki implementation plugin for Obsidian - turns notes and PDFs into a linked, LLM-powered knowledge base with entity pages, concept pages, graph-powered Q&A, and local-first privacy.
Bases Toolbox
3 months ago by Grub Basket
Adds Quality of Life features to Obsidian Bases
Bible Reference
3 months ago by tim-hub
Take Bible Study notes easily in the popular note-taking app Obsidian, with automatic verse and reference suggestions.
Property Panels
3 months ago by Eva Chen
Display and edit Obsidian frontmatter properties in configurable panels that stay inside the note's scrollable content.
Bulk Tag Manager
2 months ago by ducktapekiller
A comprehensive utility to standarize the entire front matter. Features a dashboard for bulk renaming, enforcing casing rules (lowercase/uppercase), swapping separators (snake/kebab), and generating master tag lists.
Discourse Graph
2 months ago by discoursegraphs
Note Types
2 months ago by jsmorabito
Gantt this
2 months ago by Altarok
Obsidian plugin showing multiple TTRPG calendars at once in one gantt chart.
MD Butler
2 months ago by Peter Petschownik
Automatically manages YAML frontmatter fields for all notes. A reliable alternative to Templater formulas for consistent metadata.
Just Simple Excalidraw
2 months ago by David Hurt
A local-first Excalidraw editor for native .excalidraw files in Obsidian, preserving the original's brilliant simplicity.
PixNote
2 months ago by Sofia Milton
Auto Move File
a month ago by sx kan
Automatically move files based on frontmatter properties in Obsidian
Vault Shelf
a month ago by Lukas Proprentner
Your Obsidian vault as a browsable library: shelves of books built from titles, dates, people, tags, folders or any note property. Customizable to make it your own.
OsyC
a month ago by 3yesore
Antigravity
a month ago by ke yongcheng
Autonomous vault management, knowledge organization, and agentic intelligence powered by Google Antigravity (agy).
Notion Suite
a month ago by craigstfn
Obsidian plugin: Notion-style databases, views, relations, rollups, charts and a / menu
Mapa neuronal
a month ago by Felipe Córdova
A graph that explains itself: your Obsidian vault as a layered neural map, with the reason each note links to the next.
Objects
a month ago by Finn
Advanced Metadata Cache
19 days ago by Michael Naumov
Maintains the vault indexes that are otherwise rebuilt on every call, and answers the built-in lookups from them, so backlinks come from an index instead of a fresh scan of every note.
F2 Quick Rename
15 days ago by 熊猫别熬夜
F2 to quick rename the current note, or an embedded note/image under the cursor (including wiki aliases and markdown image alt text).