Gedcom

approved

by Andrei Lobanov

Edit GEDCOM files with autocomplete, validation, navigation, and semantic highlighting. - This plugin has not been manually reviewed by Obsidian staff.

1 stars207 downloadsUpdated 15d agoMIT

GEDCOM for Obsidian

release License: MIT

GEDCOM language support by Domorium. Edit source .ged and .gedcom files directly in Obsidian with validation, autocomplete, navigation, folding, and semantic highlighting.

GEDCOM editor in Obsidian

Part of Domorium. The same GEDCOM language support runs in VS Code, JetBrains IDEs, and in the browser — one implementation of the format, adapted per editor.

Features

  • Context-aware GEDCOM tag autocomplete
  • Real-time validation errors and warnings
  • Semantic highlighting for levels, tags, and cross-references
  • Documentation tooltips for GEDCOM tags
  • Go to definition for XREF values
  • Find XREF references and highlight declarations and usages
  • Safe XREF rename as one undoable edit
  • Web links and vault-relative file links
  • Photographs previewed from a FILE payload, cropped to the part of the image a multimedia link asks for
  • Quick fixes for broken references and invalid levels
  • Folding and visual indentation for nested records
  • Highlighted and checked gedcom code blocks in notes
  • Links from a note to a record, indexed by the vault or as an obsidian:// URL
  • Desktop and mobile Obsidian support

The plugin keeps the GEDCOM file as the source of truth. It does not convert records into Markdown, create a second genealogy database, or send vault data to a remote service.

Usage

  1. Enable GEDCOM in Settings → Community plugins.
  2. Open a .ged or .gedcom file in your vault.
  3. Edit the source directly. Obsidian saves changes back to the same file.

Use Go to GEDCOM definition from the command palette to jump from an XREF usage to its record declaration. Find GEDCOM references moves between matching declarations and usages, and Rename GEDCOM reference updates the current XREF atomically. Editor behavior can be adjusted in the plugin settings.

A record pasted into a note is highlighted and checked when it is fenced as gedcom. A block carries no header, so it is read as GEDCOM 7 unless the fence names another specification — ```gedcom 5.5.1.

A note can link to a record. Copy link to record puts [[tree.ged#@I47@|Marie /Curie/]] on the clipboard — a link the vault indexes, so the file's Backlinks pane lists the notes that mention it and the graph draws an edge to each. It is spelt the way this vault spells its own links, and shows the name the record carries rather than a path. Copy Obsidian URL to record writes the obsidian://domorium?vault=…&file=…&xref=@I47@ form instead, which a browser or another application can follow. Either one opens the file with the cursor on that record.

Hovering a FILE payload shows the photograph it names, and hovering the pointer of 1 OBJE @O1@ shows the part of that photograph the link's CROP asks for — so one group portrait shows a different face under each person who references it. Media that is not an image is named rather than drawn, and a FILE naming a web address says so instead of being fetched. Media preview in the plugin settings chooses the gesture, or turns it off, independently of Record preview. Both open on a resting hover by default; either can be set to ask for Ctrl/Cmd instead, and a gesture already chosen is kept.

Typing [[tree.ged# in a note offers the records in that file, by name where the format gives one. Hovering a link to a record shows the record, highlighted, without opening the file, and ![[tree.ged#@I47@]] embeds it in the note the same way.

A vault to try it on

demo-vault/ is an Obsidian vault: open it with Open folder as vault, enable the plugin, and start from Start here.md. Four generations of the Curie family live in one GEDCOM file — seventeen people, five families, sources, repositories and images — and the notes around it link into it the way your own notes would.

For dataviewjs and other plugins

The parsed document is reachable without opening the file:

```dataviewjs
const api = app.plugins.plugins["domorium"].api;
const tree = await api.read("family/tree.ged");
dv.list(tree.getNodes().filter((n) => n.tokens.TAG?.value === "INDI")
  .map((n) => tree.getLabel(n) ?? n.tokens.XREF?.value));
```

api.parse(text, options) does the same for text already in hand. Both answer with the validator's GedcomDocument: getNodes, getErrors, getVersion, getLabel, getPointerTargetTag, isRecordDeclaration. api.version says which API you are holding.

Privacy

GEDCOM by Domorium works locally inside the vault. It does not require an account, access files outside the vault, show advertisements, or collect analytics or telemetry.

It makes no network request until you ask it to. There is one thing you can ask for: Load images from the web, off until you turn it on, which lets the media preview draw a FILE payload naming an https address. Until then the preview says the file is remote and fetches nothing, and offers to draw it — this one, or every one from now on. Nothing else reaches the network, an unencrypted http address is refused whatever the setting says, and no photograph is copied into the vault.

Installation

Install GEDCOM from Obsidian's Community Plugins directory. To test beta releases, use BRAT with this repository URL:

https://github.com/lavich/domorium-obsidian

For a manual installation, copy main.js, manifest.json, and styles.css from the latest release into:

<vault>/.obsidian/plugins/domorium/

Reload Community Plugins and enable GEDCOM.

Development

npm install
npm run check

The packaged plugin is written to dist/.

The shared GEDCOM parser and editor-independent language service are maintained in the main Domorium repository and consumed as versioned public npm packages.

License

MIT © 2026 Andrei Lobanov

Domorium is an independent project and is not affiliated with or endorsed by FamilySearch or Intellectual Reserve, Inc. FAMILYSEARCH GEDCOM™ and FAMILYSEARCH® are trademarks of Intellectual Reserve, Inc.

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.