Vladislav Plotnikov3 downloadsInteractive genealogy graph from person note properties, with image and print export.
Interactive genealogy graph built from person notes. The graph opens as a compact group, spreads out with strong repulsion for half a second, then settles, coming to rest after about 2 seconds; after dragging a person it calms down in under 2 seconds. Forces and damping stay consistent while the simulation cools, so movement fades without an abrupt stop after opening. Every relationship comes from note properties. The plugin writes notes only when you add or edit people (see Adding and editing people) or run an import; with the setting Rename by the template (Переименовывать по шаблону) it also renames cards whose name or dates change. It is desktop-only.
The interface is in English or Russian (setting Language: as in Obsidian by default; a vault that used the plugin before the translation keeps Russian). Names follow a name scheme — Russian, Western, Spanish, East Asian or Icelandic — and the file names of new cards a template, so the plugin works for families outside Russia too. Below, the controls are named in Russian as they were first written; the English interface uses the same layout.
Like Obsidian's own graph view, the live graph is drawn on a canvas and its force layout runs in a Web Worker, so a family of a thousand people still pans, zooms and drags smoothly; it draws only when something changes. Exported files are rendered separately as SVG (see Экспорт).
Every person is a note whose frontmatter says type: person. Notes in the templates folder (templates by default, configurable) are ignored. Properties are flat, so they stay editable in Obsidian's Properties panel; an empty value means "unknown". They follow GEDCOM, so a card maps to a GEDCOM INDI record and back; the GEDCOM tag is in brackets. The note text is the person's story (GEDCOM NOTE): write anything there, it never changes the graph.
| Property | Meaning |
|---|---|
name |
Node label (NAME); falls back to the file name |
surname, given_name, patronymic |
Parts of the name (SURN, GIVN; GEDCOM has no patronymic and keeps it in GIVN) |
birth_surname, name_variants |
Surname at birth (NAME with TYPE birth), other names (more NAME records) |
sex |
male, female or unknown (SEX) |
birth_date, birth_place |
Birth (BIRT) |
baptism_date, baptism_place |
Baptism or christening (BAPM, CHR): a metric book entry |
death_date, death_place, cause_of_death |
Death (DEAT, CAUS); death_date: "?" means died, date unknown |
burial_date, burial_place |
Burial (BURI) |
life_status |
living, deceased or unknown |
occupation |
Occupation (OCCU); a list when there are several |
education, military, residences |
Lists: schools (EDUC), military service, places of residence with their year (RESI, census records) |
social_status, religion, nationality |
Social estate — крестьянин, мещанин… (CAST), religion (RELI), nationality (NATI) |
photo |
Optional explicit portrait (OBJE) |
parents, children, spouses, adoptive_parents |
Relationships (wiki-links or plain names), what GEDCOM keeps in FAM records; adoptions are drawn dashed |
marriages |
Facts of a marriage, one entry per spouse: "[[Супруг]]: брак 1975-06-12, Москва; развод 1980" (MARR, DIV) |
godparents |
Godparents (ASSO), links; not drawn |
identity |
confirmed, probable or hypothesis (dashed outline) |
sources, questions |
Sources (SOUR) and open research questions |
id, source_record |
Stable card id; where an imported card came from (used to find it again on re-import) |
Dates are text: 1915, 1915-03, 1915-03-07, also 7 Mar 1915, March 7, 1915, 07.03.1915; approximate 1915?, ~1915, около 1915, abt 1915, c. 1915, circa 1915, est 1915 (GEDCOM ABT, EST, CAL); before <1915, до 1915, bef 1915, before 1915 and after >1915, после 1915, aft 1915, after 1915 (BEF, AFT); between 1915..1920, 1915–1920, между 1915 и 1920, bet 1915 and 1920 (BET … AND …); a decade 1910-е or 1910s; ? for an event known to have happened on an unknown date. Dates of the Russian Empire stay old style, as written in the records.
Generations are not stored. The graph counts them from relationships: parent −1, child +1, spouse the same. Your «Найти себя» card is generation 0; a family not connected to you is numbered so that its youngest generation is 0.
sex, life_status, identity) are not guessed at; such a parent link is still drawn. A warning button with their count appears in the top left corner of the graph only when there are any; it opens their list, grouped by note. Click a name to show the person on the graph, or the note icon to open the card. While the list is open, generation colors and sizes step aside: everyone is a plain gray node of one size, and the people involved are red, a deeper shade for more problems. Hovering a person lists their problems.b. 2001 (р. 2001); deceased: 1915–1980, with ? for an unknown year (1915–?); unknown status: 2001–, which does not claim the person is alive. Without life_status, a death date means deceased and otherwise the status is unknown. Approximate years (1915?, abt 1915, около 1915) and decades (1910s, 1910-е) are kept.photo: "[[files/portrait.jpg]]" picks a portrait explicitly. Otherwise the first embedded image in the note body is used; PDF embeds are skipped. When the image is unavailable, the node is drawn as a plain circle.A family tree can be started from scratch in the graph.
name) is written in the scheme's order: «Озерова Светлана Борисовна», «Mary Ann Smith», «Kim Min-jun», «Jón Sigurðsson»; a person may have no surname at all.identity: hypothesis, a question in questions), named after the patronymic when possible.{name} {born}-{died} by default — Фамилия Имя Отчество ГГГГ-ГГГГ in the Russian scheme, Given Surname YYYY-YYYY in the Western. The template takes {name} (the full name in the scheme's order, a different birth surname in parentheses), {surname}, {given}, {patronymic}, {birth_surname}, {born} and {died} (? when unknown, {died} empty for the living), for example {surname}, {given} ({born}–{died}); spaces and parentheses left empty are dropped. It goes into the folder of the relative it was added to (otherwise Папка новых карточек); Шаблон карточки gives it the template's properties and text.questions. Its list puts the least filled cards first. While it is open the graph is drawn like for Проблемы, in shades of yellow.Импортировать родословную… brings a family tree from another program into the vault. Supported: GEDCOM 5.5, 5.5.1 and 7.0 (.ged) — the exchange format of almost every genealogy program and site — and «Древо Жизни» 5 (.at5). Nothing is written until you confirm.
.ged file (paths in it may be relative or absolute, even from another computer — then the file is looked up by name), or the <archive>.files folder of an .at5. If they are elsewhere, point to the folder, or import without photos.files). Existing cards only gain values they lack; nothing is overwritten, and disagreements go to the report note Импорт <файл> <дата>.Re-importing the same file finds its cards through source_record and creates no duplicates. Importers for other formats plug into the same steps.
From GEDCOM. Text in UTF-8, UTF-16 or a Windows code page (ANSI is read as Windows-1251 when its letters come in Cyrillic runs, otherwise as Windows-1252). Names give the surname, given name and patronymic — Russian files keep it as the last given name; a TYPE married name becomes the surname with the other one as the birth surname. Events and facts fill the properties above; facts without a property (emigration, title, custom EVEN/FACT), every NOTE and family notes go into the card text; source citations (SOUR with PAGE) go into sources. Family records give parents (PEDI adopted/foster and _FREL/_MREL make adoptive parents), spouses and marriages; ASSO with a godparent role gives godparents. The portrait is the _PRIM picture, otherwise the first one; GEDCOM 7 archives (.gdz) are not read yet — unpack them and import the .ged.
Esc, and a second Esc fits the whole graph.+, - and 0 with the graph focused, zoom and fit the graph.Esc cancels a selected link, leaves route mode, or clears the selection where the camera is; with nothing selected it fits the whole graph.The panel in the top right corner uses the markup and styles of the graph view's settings: a gear without a background opens it, and the cross that folds it takes the gear's place. It holds Люди (search, selection, «Найти себя»), Фильтры (route between two, «Скрыть несоединённых», «Глубина», hidden links), Отображение (sizes of the generations focus), and Ещё (export, import); while it is folded, the buttons under the gear run «Поколение за поколением» and toggle «Отпустить граф». Its sections fold; the state is remembered. The line at the bottom shows how many people and links are visible.
How people are drawn is switched by buttons on the graph; the choice is remembered.
Press Маршрут родства, then click two people, or select exactly two before entering the mode. The shortest chain of parent and spouse links is highlighted, including the half of a couple that leads to the child. A third click starts a new pair. The filter's description says what to click next. Hover highlighting is off in this mode. Among routes of the same length, the one through the fewest marriages is taken, so a route goes through a common ancestor rather than a parent's spouse.
The route card is laid out as in a maps app: a field for «Откуда» and one for «Куда», joined by a dotted line, with ⇅ beside them to swap the two along the same route; an empty field also takes a typed name. Between the fields runs the chain of roles, each next person to the previous one («мать → брат → сын»; a role centers the graph on that person), and below them is what «Куда» is to «Откуда»: «троюродный дядя». The term comes from the route's steps and the sexes on it: blood kin any number of steps up and then down (дядя, двоюродный дедушка, внучатый племянник, семиюродная сестра, «предок в 7-м колене»), half siblings (единокровный, единоутробный), one adoption step (приёмная мать), and in-laws with one marriage at either end (свекровь, шурин, падчерица, мачеха, зять, «двоюродный брат жены», «муж двоюродной сестры»). A route of another shape has only its chain, and in Russian a saying about distant kin in place of the term, the same for the pair each time («седьмая вода на киселе», «нашему забору двоюродный плетень»). Terms are in the language of the plugin's interface: in English «first cousin once removed», «great-uncle», «wife's first cousin»; the sayings are Russian only.
Глубина applies to the route:
The sprout button in the bottom dock shows where people come from: the chosen people and every line of their ancestors up to the oldest known, adoptive parents included. It starts from the selected people, or from «Я» when nobody is selected; a click on a person adds them to the roots or removes them, and so does the search (Ctrl/Cmd+F). Several roots share their common ancestors. The lines are highlighted as a route is.
A card above the dock lists the roots, how many ancestors they have and how far back («86 предков · до поколения −11»), and names the oldest. Родня вокруг, колен sets how much family shows around the lines:
A marriage takes no step: a relative's spouse shows with them. Hidden relatives are counted as «+N» on the person they hang from. «Корни» and «Маршрут родства» exclude each other; Esc leaves. Colors and sizes still follow the focus.
Which side is hidden:
A background click or Esc cancels. Hidden links are remembered and survive note renames; the Скрыто связей chip shows everything again.
Whenever relatives are hidden, by depth, by route mode or by a hidden link, the person they hang from shows a +N badge with the number of hidden people. Clicking the badge restores links hidden there; for depth-hidden relatives it explains which filter hides them.
Экспорт is for print or for the screen. It exports what the graph shows (in «Корни», the lines and kin around them), with portraits and labels in any script (see Files).
Print starts from reading, not from the sheet. Как будут смотреть sets the size of names: in hands at ~40 cm (9 pt), on a table or wall nearby at ~1 m (14 pt), on a wall from ~2 m (24 pt), or any size from 6 pt. The name size fixes the scale: millimetres per unit of the graph. Under the settings a line says what the print will actually give: «Имена 9 pt · буквы 3,2 мм — читаются с ~40 см», orange when names are smaller than asked, red below 6 pt («не прочитать»). A whole tree squeezed onto A0 no longer looks fine and prints at 1 mm.
Что печатать:
Paper: ISO A6–2A0 and B4–B0; photo 10×15 to 60×90 cm; US Letter, Legal, Tabloid; plotter rolls 610, 914 and 1067 mm; any custom size. Orientation is automatic or fixed; margins in mm.
Files: PDF is vector, with DejaVu Sans embedded: sharp at any size, the format for a print shop. The bundled font covers Latin (with Polish, Czech, Turkish, Vietnamese letters), Greek, Cyrillic, Armenian, Georgian, Hebrew and Arabic; Arabic is shaped and right-to-left names are written in display order. For Chinese, Japanese, Korean, Indic and other scripts, list TrueType fonts (.ttf) from the vault in Fonts for PDF (for example Noto Sans SC, Noto Sans KR): each name is written with the first font that has its letters, and the export says which letters no font has. OpenType/CFF fonts (.otf) and collections (.ttc) cannot be embedded. SVG and PNG are drawn by Obsidian itself and use the system fonts for any script. PNG and JPEG are rendered at 150, 300 or 600 dpi, with the resolution written into the file so a photo lab prints them at the right size; a page too large for the browser's canvas is refused with the highest dpi that fits. Portraits are embedded at the resolution the print needs (the largest person at 300 dpi, up to 1024 px).
Для типографии: 3 mm bleed (the paper colour runs past the trim) and crop marks at the corners, outside the bleed.
The preview is the sheet itself: paper, margins, bleed, crop marks and the part of the graph it holds, redrawn on every change. Экран exports SVG or PNG of the whole graph or the visible area in the graph's own proportions, as before. The dialog remembers its settings.
In Obsidian open Settings → Community plugins → Browse, find Genealogy Graph, install and enable it. To install by hand, copy main.js, manifest.json and styles.css from a release to .obsidian/plugins/genealogy-graph/ and enable the plugin.
The plugin works offline: it makes no network requests and collects nothing.
type: person. It writes notes only as described above.fs, desktop only), and copies them into the vault (Папка файлов). Nothing outside the vault is ever written.Requires Node.js 20+.
npm ci
npm test
npm run build
The bundled DejaVu Sans font is subset for exported files to Latin, Greek, Cyrillic, Armenian, Georgian, Hebrew, Arabic and common punctuation (pyftsubset with --unicodes=U+0020-007E,U+00A0-02FF,U+0300-036F,U+0370-03FF,U+0400-052F,U+0530-058F,U+0590-05FF,U+0600-06FF,U+10A0-10FF,U+1E00-1EFF,U+1F00-1FFF,U+2000-206F,U+2070-209F,U+20A0-20CF,U+2100-218F,U+2190-21FF,U+FB1D-FB4F,U+FB50-FDFF,U+FE70-FEFF --layout-features='*' --no-hinting). Its license is in assets/LICENSE-font.txt.