vicmosin1 downloadsBuild an interactive family tree, timeline and map from person notes, with relationship labels and checks for missing or conflicting data.
Build an interactive family tree, timeline and map from the person notes in your vault. Relationships are read from note properties, so your data stays plain Markdown.

A note is a person when it has type: family-tree, or the #family-tree tag plus at least one relation or date (so overview notes tagged #family-tree aren't drawn as people). Relations come from the frontmatter:
birth_date: 1931-11-09
birth_place: "[[Leeds, England]]"
death_date: 2024-03-03
child_of: ["[[Walter Miller]]", "[[Alice Miller]]"]
parent_of: "[[Susan Turner (Baker, Miller)]]"
married_to: "[[Helen Miller (Clark)]]"
siblings:
- "[[Nicholas Miller]]"
- "[[Teresa Miller]]"
type: family-tree
gender: m # optional; for Russian names it's guessed from the patronymic (…вич / …вна)
photo: "[[george.jpg]]" # optional, otherwise the first image embedded in the note
parent_of on the father implies child_of on the daughter, married_to works both ways, and so on.All property names are configurable in settings.
Put a ? (or "maybe", "possibly", "возможно", "предположительно"…) next to a link to mark it as unconfirmed. It's drawn dashed with a ?, and isn't used to guess the second parent:
parent_of:
- "[[Susan Turner (Baker, Miller)]]"
- "[[Son abroad]] ?"
Dates may be approximate: около 1895 / 1895? → ~1895, до 1941 → <1941**, после 1945 → **>1945, 1890-е → 1890-е, 1890–1895 → ~1890.
Two people who share a child but aren't married_to each other are joined by a dashed line.
Right-click your own card → This is me (or Settings → Me, or the command Set current note as me). Every card then shows how that person is related to you — отец, двоюродная тётя, троюродный брат, внучатый племянник, тесть, свекровь, золовка, сват, муж тёти… (Russian or English, see settings).
labels: false.The calendar button in the toolbar (or the command Open family timeline) switches the view to lifelines on a time axis.

1941-1945 Великая Отечественная война).```family-timeline with the same options as family-tree (root, depth, height, labels) plus order: birth.The map button in the toolbar (or Open family map) shows where people were born ★, lived ⌂ and died †, with each person's route as a line (blue/pink; dashed if a place is uncertain).
birth_place: "[[Leeds, England]]" # links to place notes, or plain text
lived_in:
- "[[Manchester]] 1949-1955" # years are optional
- "[[Liverpool]] 1956-1990"
death_place: "[[Toronto]]"
location: [lat, lng] (same format as the Map View plugin). Use Find coordinates for places (or the 📍 button on the map) to look them up on OpenStreetMap. You check each match before it's saved. Places that have no note are remembered by the plugin.```family-map, same options as the other blocks.Command Check family tree data lists:
parent_of: Susan but Susan has no child_of: George), with a button that adds all the missing reverse links. Uncertain links stay uncertain, and text/list properties keep their format.Ribbon icon / command Open family tree opens a full-tab view.
Command Show family tree of current person opens the view focused on the active note.
Right-click menu of any note (file explorer, the note's ⋯ menu, tab header, or inside the note text): Show in family tree on a person note, Open family tree on any other note.
Embed in any note with a code block:
```family-tree
root: [[George Miller]]
depth: 2
height: 500
```
Without root, a block inside a person note focuses on that person; elsewhere it shows everyone (root: all forces everyone). In embeds use Ctrl/Cmd+wheel to zoom so normal scrolling still works.
family-tree-diagram-<version>.zip from the latest release, unzip it into <vault>/.obsidian/plugins/ (it contains the family-tree-diagram folder), then enable the plugin under Settings → Community plugins.The tree, timeline, relationship labels and data check work fully offline. Only the map uses the network, and only these two OpenStreetMap services:
| Service | When | What is sent |
|---|---|---|
OpenStreetMap tiles (tile.openstreetmap.org) |
While the map view is open and online | Requests for map images of the area you're looking at |
Nominatim (nominatim.openstreetmap.org) |
Only when you press Search in Find coordinates for places | The place names listed in that dialog, one request per second |
No names, dates or other details about people are ever sent. Without a connection the map falls back to country borders bundled with the plugin. There is no telemetry, no account and nothing to pay for.
npm install, then npm run dev rebuilds on change (symlink the folder into a test vault's plugins directory).npm test runs the parsing, layout, kinship and timeline tests.npm run lint runs Obsidian's ESLint plugin, the same checks the Community directory uses, including manifest validation, and stylelint with the directory's CSS checks (no duplicate properties, no !important, features supported by Obsidian's Chromium).First run npm version patch (or minor / major), or edit version in manifest.json, package.json and versions.json on GitHub, and merge that into main. Then either:
main. When it finishes, open Releases, edit the new draft, add release notes and select Publish release. Publishing creates the version tag.git push --follow-tags after npm version. The tag starts the same workflow.The release workflow checks the tag matches the manifest, lints, tests, builds, attests the files and creates a draft release with main.js, manifest.json, styles.css and a zip for manual installs. If the release already exists, it replaces those files instead.
MIT © Victor Mosin
The plugin bundles these open-source components:
styles.css with its license notice.Map tiles and place search © OpenStreetMap contributors, available under the Open Database License.