Genealogy research in Obsidian for those who want to try

I just found this plugin for Obsidian, it might be an easy way in for those who wants to try Obsidian, Zettlr, Foam for VSC for their genealogy or historical research…
PS. I do not know anything about this, not tried it, I just found this link for it’s post in the Obsidian forum.

Markdown files can easily be attached to your research objects as media file…

It even support Gramps XML

4 Likes

Hi everyone! Just stumbled across this thread discussing my plugin and wanted to share more details. Canvas Roots is an open-source Obsidian plugin for genealogy. As a Gramps user myself, I’ve prioritized Gramps integration.

Gramps Support

Import (.gramps and .xml):

  • People, families, events, places, and sources
  • Step/adoptive parent relationships (mrel/frel)
  • Hierarchical places with type preservation
  • Source notes with citations and repository metadata

Export:

  • Full Gramps XML with people, families, events, places, sources
  • Privacy protection for living persons
  • Selective branch export (ancestors/descendants only)

What You Get in Obsidian

  • Markdown notes with YAML frontmatter (future-proof, version-controllable)
  • Interactive family chart with pan/zoom and direct editing
  • Canvas trees with multiple layout algorithms
  • Leaflet-powered map view
  • 13+ report types with PDF export
  • Round-trip support—import, work in Obsidian, export back to Gramps

Current Limitations

  • Media: Handles stored but files not extracted; .gpkg import planned
  • Notes: Gramps notes not yet imported

Feedback Welcome

What data matters most to you in imports/exports? What would make this workflow more useful?

GitHub: obsidian-canvas-roots

6 Likes

Hi all,

Quick update:

Progress on Previously Mentioned Limitations

In my earlier post, I mentioned two limitations:

Media: Handles stored but files not extracted; .gpkg import planned

The plugin now extracts media files from .gpkg archives during import.

Notes: Gramps notes not yet imported

This is now on the roadmap as a Medium priority feature. I’ve done a bit of research on how Gramps notes work in the XML format and have a planning document ready. I’ve also posted a feature request to gather community input on implementation details.

Open Questions for Gramps Users

If you use notes in Gramps, I’d appreciate your input:

  1. Where should imported notes appear - in the note body, frontmatter, or as separate linked files?
  2. Do you use note types (Person Note, Research, Transcript, etc.) and would you want those preserved?
  3. Do you mark notes as private? How should those be handled?
  4. Do you attach notes to families? Where would those best fit in Obsidian?

Feel free to reply here or on the GitHub issue.

Links

2 Likes

This answer contains a bit more than what you originally asked for, but I thought it might be useful to share a few additional ideas while I was already writing. Please see this as suggestions from someone who actively uses Obsidian and Foam for VS Code for both genealogy and historical research, in combination with Gramps and tools like Zotero, Aeon Timeline, Cytoscape/Gephi/Tulip, etc. — and who constantly pulls his hair out because he still hasn’t managed to build a proper Markdown‑based “hub” solution for everything.**

Notes in Gramps are their own entities, so they should be treated as such when synchronizing with Obsidian.** This means each note should remain an independent object, not just embedded text inside another record.

1. Notes should carry all available metadata
All metadata that exists in Gramps should be preserved in Obsidian as YAML frontmatter keys — including note types and any other attributes Gramps exposes. This keeps the notes future‑proof and makes round‑tripping back to Gramps reliable.

2. Suggested folder structure
I recommend creating a dedicated “Notes” subfolder under each primary object. Every Gramps object (Person, Family, Event, Place, Citation, Source, Repository, etc.) should have:
• its own folder
• its own primary Markdown file
• a subfolder for its notes (if any)
This keeps the vault clean and makes it easy to locate and manage notes belonging to a specific object.

3. Family notes
Many users attach notes to families, so these should also be represented. A family’s Markdown file could include sections such as “Parents”, “Children”, and “Notes”, and link to the corresponding note files. This mirrors how users think about family‑level information in Gramps.

4. Internal and external links
Gramps notes can contain external links (URLs) and internal links to other Gramps objects. If possible, these should be captured and converted into Obsidian‑style links so that navigation inside the vault remains consistent.

5. Syncing notes back to Gramps
If notes are placed in a dedicated folder hierarchy, it becomes much easier to detect new or modified notes that should be synchronized back into Gramps. To support this, it may be useful to add a YAML frontmatter key such as “sync-status: draft | synced | ignore”. This would let users control whether a note should be pushed back into Gramps or kept only in Obsidian.

6. Optional templates
It might also be helpful to support templates for each object type (Person, Family, Event, etc.). Users could customize the layout as long as they keep the same variables/placeholders. This is optional, but it would give users more flexibility without breaking the sync logic.

7. Handling the “private” flag
The private flag should also be preserved on notes, just like for other Gramps objects. Private notes should not appear in public‑facing exports or reports unless explicitly enabled. The private flag should especially be respected when syncing outside the user’s local environment — for example when using Obsidian Sync or third‑party sync plugins. This is important for anyone who publishes or syncs their vault to an online location accessible by others.

8. Linking Obsidian note files back into Gramps as media objects It would also be beneficial if the primary object note files created in Obsidian could be linked back into Gramps as media objects attached to the corresponding Gramps records. This would allow users to read their Obsidian notes directly inside Gramps. These linked note files could optionally be tagged with something like “Research Note” or a similar label to distinguish them from other media types.

Note: This text was originally written in Norwegian and translated into English with the assistance of Copilot. Some sentences were lightly adjusted for clarity and readability in English, but the meaning and intent remain faithful to the author’s original Norwegian version.

1 Like

Thank you for this thoughtful and detailed feedback, StoltHD! It’s clear you’ve spent a lot of time thinking about the intersection of Gramps and Markdown-based tools. Your perspective as someone actively using both is invaluable.

Your suggestions have given me a lot to consider. Before I finalize the implementation approach, I have a few follow-up questions that would help me understand real-world usage patterns:

1. Note sharing across entities
In your Gramps database, do you often attach the same note to multiple entities? For example, one research note linked to both a person and an event, or shared across multiple family members? Or are notes typically attached to just one entity?

2. Family notes
How often do you use family-level notes compared to person-level notes? What kind of information typically goes in family notes - things like shared migration stories, household circumstances, or research about the couple as a unit?

3. Workflow direction
Do you envision regularly editing notes in Obsidian and syncing changes back to Gramps? Or is this more of a one-time or periodic import where Obsidian becomes your primary research workspace going forward?

4. Privacy flag usage
When you mark notes as private in Gramps, what’s the typical use case - sensitive family information, unverified research, personal reminders, or something else?

5. Obsidian Sync usage
Do you use Obsidian Sync, a third-party sync service, or publish your vault online? Understanding how users share or sync their vaults will help me determine how to handle the privacy flag - whether it’s sufficient to mark notes as private: true in frontmatter (leaving sync/publish exclusion to the user), or whether a more robust approach like a separate folder for private content would be more practical.

Your answers will help me decide between a simpler embedded approach (notes appended to the parent entity’s Markdown file) versus the more robust separate-files approach you described. I want to start conservatively and build toward more advanced features based on what users actually need.

One thing I’m mindful of is that Canvas Roots serves a diverse user base. Many users are coming from GEDCOM files or starting fresh in Obsidian - they may never touch Gramps and have no need for advanced sync or note-sharing features. I want to make sure that adding Gramps-specific capabilities doesn’t complicate the experience for users with simpler requirements. The goal is to keep the core workflow streamlined while offering these more advanced features as opt-in options for power users who need them.

Thanks again for taking the time to share your experience!

At the moment I mostly use Gramps as an archive. All my active research and downloading of sources/documents happens in Zotero, Obsidian, Foam, and the network‑graph and timeline tools I mentioned earlier, completely manually. I’m also working on a project involving OCR and importing OCR/AI‑generated text from sources into Markdown and then into other tools like Gramps.

Be aware that I use Obsidian and Foam far outside what these applications were originally intended for. I often work with Markdown tables containing thousands of lines, set up with wiki‑links to every referenced object — for example census data or a ship’s manifest. A typical manifest table will include wiki‑links for port names, ship name, owner, captain’s name, every sailor, the date, the cargo (if listed), and any other relevant information that might lead me to the next step in my research. I also add anything of general interest in case these datasets can later be shared for other types of social or historical research. So my project goes far beyond traditional genealogy.

If you search for my username here in the forum, you will find comments where I explain some of this in more depth.

Answers to your questions:

  1. Yes, I often share notes or attach the same note to multiple entities. In Obsidian I use wiki‑links with aliases in the format [[{Physical document}|Alias]]. I also keep a “Notes” section in my Markdown files where I copy all links. It’s double or triple redundant information, but it gives me the best personal control.

  2. I use family notes the same way I use notes for any other object in Gramps or in my Markdown hierarchy — mostly for information that cannot be attached in any other way, or for research documents, links to relevant material, or anything else connected to that Gramps object.

  3. My workflow is more historically oriented. I started with genealogy, but at this point it has become a research project on the Norwegian mercantile fleet, with genealogy as a “by‑product”.

I almost always begin by downloading documents and datasets (sources) into Zotero and saving them as linked files to my Zotero items. In Zotero I maintain an extended collection structure that mirrors my folder hierarchy: one collection/folder for each “object”, and a hierarchical structure for sources based on Country → State → Place → Repository → Source → and then the internal structure of the source itself. In Zotero I create virtual copies of each source for every object it is relevant to.

These files are currently stored mostly outside my Markdown vault because I used Zotero long before I discovered the “non‑standard” workflows possible in Zettlr, and later in Obsidian and Foam.

I do all the wiki‑linking manually or semi‑manually. For example, I open Markdown tables in VS Code and add wiki‑links to all columns that are relevant. I only create new “Object Notes” when needed — not for everything in a source, but for what is relevant at the moment. However, I always save and transcribe the complete source, for example all rows in a table.

Then I create a media object in Gramps, or a local file link in any software that supports it. (This is something I’m trying to semi‑automate or fully automate in a Python script project I’m working on, which will eventually handle my entire workflow.)

So yes — Obsidian and Foam are my primary research tools, or what I prefer to call my “hub” that connects all my other software. This allows me to do all my work in one place and later run a sync or export to other formats once my Python scripts are ready (maybe even a Gramplet at some point). But I’m not a developer/programmer, so things take time.

I also use Markdown because it allows me to create hierarchical structures for events. I can link events to places and link people as participants, instead of the lineage‑linked approach that forces you to attach events directly to a person — which is historically inaccurate for many types of events.

A second reason I stick to Markdown is that it can be viewed, read, and edited by any editor. The data remains truly “open data” for the foreseeable future.

  1. I think that as a “first version”, the privacy flag only needs to be added so users can decide for themselves. But maybe later it will be possible to add more automated control. If you include the YAML frontmatter key from the start, it will be easier to extend the functionality later if you feel the need. Personally I do not use the flag/tag because I do everything genealogy‑related manually, and I choose very carefully what I share — if I share anything at all.

  2. In Obsidian I am looking at the third‑party “export to website” plugin (I never remember the name). I do not use Obsidian Sync, but I might start using some other sync tool at some point. My problem right now is having total control over what leaves my computer (even though I am a Windows user… hahaha). So again, I think the most important thing at the moment is simply to add the privacy flag as a YAML frontmatter key.

All of these things we talk about here, I try to keep as general as possible so they can be implemented both for general use by people who do not use Gramps, as well as for more advanced usage — including GEDCOM‑related workflows or for people without any earlier experience with genealogy. And that is why I think your project has such high potential: just like Gramps, it seems to offer a lot of possibilities and flexibility.

I have not yet started to look at your plugin, only because I need to create a new test vault for it, but I will do so sometime early next year. I clearly see what you are trying to accomplish with it, and I seriously applaud your effort.

And I actually think you can get more great answers in this forum, because several people have asked about my usage of Obsidian earlier.

People might get more engaged after the holidays… :slight_smile:

Note: This text was originally written in Norwegian and translated into English with the assistance of Copilot. Some sentences were lightly adjusted for clarity and readability in English, but the meaning and intent remain faithful to the author’s original Norwegian version.

This is incredibly helpful for planning Canvas Roots’ development direction. Your workflow is fascinating, and I can see how Obsidian serves as your research hub connecting multiple tools.

Your answers have validated the phased approach I was planning:

  1. Notes as independent entities - Since you frequently share notes across multiple entities and use wikilinks with aliases, I’ll prioritize creating separate note files (rather than just embedding note text in person notes). This will enable proper round-tripping.
  2. Family notes - Good to know you use them the same way as other entity notes. I’ll plan to add a Family entity type to Canvas Roots.
  3. Privacy flag - I’ll add private: true/false as a YAML frontmatter property. Simple and extensible, as you suggested.
  4. Handles preserved - Since you plan eventual sync via Python scripts, I’ll ensure Gramps handles are preserved in frontmatter (e.g. gramps_handle) to enable change detection and mapping back to Gramps objects.

I reviewed the Gramps source code and DTD to understand the note format better:

  • format attribute: 0 = FLOWED (normal paragraphs), 1 = FORMATTED (preformatted, preserve whitespace like <pre>). I’ll handle FORMATTED notes as code blocks or preserve whitespace explicitly.
  • Styled text: Gramps supports BOLD, ITALIC, UNDERLINE, STRIKETHROUGH, SUPERSCRIPT, SUBSCRIPT, LINK, plus font styling. For the initial implementation I’ll import plain text, then add Markdown conversion for basic styles (bold → **text**, italic → *text*, links → [text](url)) in a later update.

Remaining questions:

  1. Gramps tags on notes (tagref elements) - Do you use tags on your notes in Gramps? If so, should they become Obsidian tags (e.g., #gramps/research, #gramps/todo)? I’m thinking of namespacing them to avoid conflicts with your existing tags.
  2. Import granularity - Would you prefer:
    • One toggle: “Import all notes” (person, event, place, family notes together)
    • Separate toggles per entity type (import person notes, import event notes, etc.)
    • Or is this level of control not important?
  3. Note file naming - When creating separate note files, what naming convention would work best?
    • Notes/N0001 - Research Note.md (Gramps ID + type)
    • Notes/John Smith - Research Note.md (person name + type)
    • People/John Smith/Notes/Research Note.md (nested under entity)
    • Something else?

I’m planning to start with a simple embedded notes implementation (appending notes to person note content) that works for most users, then add the separate-files option as an advanced setting for power users like yourself.

Thanks again for taking the time to explain your workflow.

Features Added Since v0.17.2

Import/Export — Gramps notes on persons, events, and places now import with style conversion and privacy flags (see Roadmap entry). Timeline exports consolidated into Reports wizard. Research Level round-trips through GEDCOM/Gramps.

Relationships — Family Creation Wizard for building families. Inclusive parent relationships with gender-neutral support. Edit Modal supports inline person creation and children management. Picker modals include “Create new” buttons throughout.

Maps — Custom Map Authoring wizard with right-click place creation and draggable markers. “All places” layer in Map View. Pixel coordinates for fictional maps. Auto-refresh on changes.

Data Quality — Cleanup Wizard adds batch progress, keyboard nav, and accessibility. Property normalization migrates childchildren. Flat properties replace nested sourced_facts and events.

Media — Direct upload with 6-tile Media Manager and entity picker. Bulk Media Linker supports configured folders with pagination.

UI — Reorganized context menus. Form state persistence for 24 hours.

Person Notes — Nickname property. Research Level (0-6) with Gaps Report integration.

3 Likes