MIF

unlisted

by Modeled Information Format

Author, validate, and sync MIF (Modeled Information Format) notes: live diagnostics with quick fixes, typed relationships, ontologies, freshness, citations, and JSON-LD export.

Updated 9d ago
View on GitHub

id: 75a481d5-5f49-5c27-be88-56b4025e8af8 type: semantic created: 2026-10-07T23:48:49Z modified: 2026-10-08T15:33:05Z namespace: _semantic/reference title: MIF for Obsidian tags:

  • reference
  • mif-obsidian-plugin temporal: "@type": TemporalMetadata validFrom: 2026-10-07T23:48:49Z recordedAt: 2026-10-07T23:48:49Z ttl: P1Y provenance: "@type": Provenance sourceType: agent_inferred trustLevel: moderate_confidence agent: claude-code sourceRef: Written by an AI agent from the plugin source relationships:
  • type: relates-to target: docs/README.md
  • type: relates-to target: docs/tutorial/getting-started.md
  • type: relates-to target: SECURITY.md citations:
  • "@type": Citation citationType: specification citationRole: source title: "MIF: Modeled Information Format specification" url: https://mif-spec.dev/ accessed: 2026-10-09 ontology: "@type": OntologyReference id: mif-docs version: 1.0.0 uri: https://mif-spec.dev/ontologies/mif-docs entity: name: MIF for Obsidian entity_type: reference-document

MIF for Obsidian

An Obsidian plugin for authoring, validating, and syncing MIF bundles. Status: pre-release (unpublished).

Conformance

The plugin implements MIF 1.4.0 at Level 3 (Full) (spec §13.3): it reads, validates, and edits every Level 1–3 feature — identity, namespaces, entity references, typed relationships with their body mirror, bi-temporal metadata and decay, W3C-PROV-aligned provenance, embedding references, citations, compression, and extensions — and projects concepts to JSON-LD losslessly. Evidence: golden tests against MIF's reference scripts (mif_convert.py, okf_validate.py, migrate_0_1_to_1_0.py), schema validation against the vendored 1.4.0 schemas, and a parity oracle against mif-rs.

Network use

The plugin works offline. One optional feature uses the network: when Settings → MIF → Download ontologies from mif-spec.dev is on (the default), and a concept declares an ontology the vault does not have, the plugin downloads it, and the ontologies it extends, from https://mif-spec.dev/ontologies/. Each file is checked against the sha256 in the published catalog (index.json) before use and is cached in the plugin folder. Nothing about your vault is sent. Turn the setting off to never contact the network; ontologies in a bundle's .mif/ontologies/ folder always work offline.

The optional mif-cli bridge (desktop only, off until Settings → MIF → mif-cli path is set) runs mif-rs's mif-cli on your machine. The plugin itself sends nothing; mif-cli ingest downloads its embedding model (sentence-transformers/all-MiniLM-L6-v2) from Hugging Face the first time and caches it. Embeddings are stored in each bundle's .mif/vectors.db.

Using MIF data elsewhere

  • JSON-LD export: commands export a note, a folder, or every bundle to dist/jsonld/<bundle>/<path>.jsonld (spec §3.2, the layout of MIF's emit-jsonld); the MIF JSON-LD panel shows the active note's projection and round trip.

  • Bases: choose the MIF table view in any base to see level, freshness, trust, and issues beside your properties.

  • Dataview / scripts: app.plugins.plugins.mif.api is read-only:

    // DataviewJS
    const mif = app.plugins.plugins.mif.api;
    dv.table(["Note", "Level", "Freshness", "Trust"],
      mif.concepts().map((c) => [dv.fileLink(c.path), c.level, c.freshness ?? "", c.trust ?? ""]));
    

    concept(path), concepts(), relations(path), and jsonld(path) return values computed live; nothing is written to frontmatter.

Documentation

User and maintainer documentation is in docs/: a getting-started tutorial, how-to guides, reference (commands, settings, diagnostic codes, API), and explanation. Security and release verification: SECURITY.md.

Layout

PathWhat it is
src/engine/Obsidian-free MIF engine: parsing, JSON-LD projection, round trip, validation, relationships, ontologies, temporal, citations, compression, export
src/*.tsThe plugin: manager (vault model and writes), panels, Bases view, graph, mif-cli bridge, API
schemas/Vendored canonical schemas; SOURCE.json records the MIF commit
tests/Vitest suite: goldens from MIF's reference scripts, headless panel tests, fixtures
test-vault/Copy of MIF/examples; npm run install-vault stages the fixtures for manual testing
spikes/mif-wasm/mif-rs compiled to WebAssembly: the parity oracle
tools/lint/ESLint with Obsidian's review rules (isolated: it needs TypeScript 5's API)
.github/workflows/CI, quality gates, and the attested release pipeline (from mif-repo-template)

Develop

Requires Node 22+; Python 3 with PyYAML to regenerate goldens; Rust and wasm-pack for the parity oracle. Scripts that read the MIF repository take its path from MIF_REPO (golden regeneration also needs ONTOLOGIES_REPO and MNEMONIC_REPO).

npm ci && npm run lint:install        # dependencies
npm run lint && npm run typecheck     # ESLint (Obsidian rules), TypeScript
npm test                              # tests, incl. golden parity with MIF's scripts
npm run build && npm run check:mobile # main.js, and the mobile load check
npm run check:docs                    # reference docs match the source
npm run install-vault                 # copy the build into test-vault and stage fixtures

Parity oracle: (cd spikes/mif-wasm && wasm-pack build --release --target nodejs --out-dir pkg-node) (fetches the pinned mif-rs crates), after which npm test also compares the engine with mif-rs. Live mif-cli test: MIF_CLI=/path/to/mif-cli npx vitest run tests/live-mif-cli.test.ts.

Keeping up with MIF:

MIF_REPO=/path/to/MIF npm run mif-align -- origin/main               # test against a MIF ref
MIF_REPO=/path/to/MIF MIF_REF=origin/main npm run sync-schemas        # vendor its schemas
npm run golden                                                        # if the reference scripts changed

Relationships

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.