{"id":25193795,"url":"https://github.com/ameros/gedcom-svg-tree","last_synced_at":"2026-02-20T13:01:14.632Z","repository":{"id":275180119,"uuid":"924682859","full_name":"ameros/gedcom-svg-tree","owner":"ameros","description":"gedcom-svg-tree is an open-source browser-based tool that converts any GEDCOM file into a clean, scalable SVG family tree. It requires no server, runs entirely client-side, and works perfectly on GitHub Pages. Ideal for genealogists, historians, and digital humanities.","archived":false,"fork":false,"pushed_at":"2026-02-13T10:31:55.000Z","size":5864,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-13T19:24:27.145Z","etag":null,"topics":["d3","dag","dagre-d3","data-visualization","family-tree","gedcom","genealogical-trees","genealogy","javascript","svg","visuzalization"],"latest_commit_sha":null,"homepage":"https://ameros.github.io/gedcom-svg-tree/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ameros.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"ameros","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2025-01-30T13:14:10.000Z","updated_at":"2026-02-13T10:31:58.000Z","dependencies_parsed_at":"2025-01-31T18:20:53.405Z","dependency_job_id":"ba5b7e17-89f5-47c7-aa27-f2f72a645016","html_url":"https://github.com/ameros/gedcom-svg-tree","commit_stats":null,"previous_names":["ameros/gedcom-svg-tree"],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/ameros/gedcom-svg-tree","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ameros%2Fgedcom-svg-tree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ameros%2Fgedcom-svg-tree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ameros%2Fgedcom-svg-tree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ameros%2Fgedcom-svg-tree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ameros","download_url":"https://codeload.github.com/ameros/gedcom-svg-tree/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ameros%2Fgedcom-svg-tree/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29651964,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T09:27:29.698Z","status":"ssl_error","status_checked_at":"2026-02-20T09:26:12.373Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["d3","dag","dagre-d3","data-visualization","family-tree","gedcom","genealogical-trees","genealogy","javascript","svg","visuzalization"],"created_at":"2025-02-09T23:22:33.010Z","updated_at":"2026-02-20T13:01:14.625Z","avatar_url":"https://github.com/ameros.png","language":"HTML","readme":"# gedcom-svg-tree\n**GEDCOM → SVG Family Tree Visualizer (Client-side, Open Source)**\n\nConvert any GEDCOM genealogy file into a clean, scalable SVG tree.\nRuns fully in the browser — no backend, no data uploads.\n\n## Features\n\n- 100% client-side (privacy-first)\n- Supports: FAMS, FAMC, CHIL, BIRT, DEAT, MARR, BURI, OCCU, TITL, WWW, SOUR\n- Handles large trees with smooth rendering\n- Clean, uncluttered SVG output (perfect for printing and embedding)\n- Works from GitHub Pages\n- Supports multiple languages (including Polish and English)\n\n## Demo\nhttps://ameros.github.io/gedcom-svg-tree/\n\n## How to use it\n- Just go to [live version](https://ameros.github.io/gedcom-svg-tree/) (or choose its [polish](https://ameros.github.io/gedcom-svg-tree/?lang=pl), [swedish](https://ameros.github.io/gedcom-svg-tree/?lang=sv) or [italian](https://ameros.github.io/gedcom-svg-tree/?lang=it) version) and open the GEDCOM file\n- or just [download lastest version](https://github.com/ameros/gedcom-svg-tree/releases/latest) and open with your browser\n\n## Example Trees\n\n- [Piast Dynasty](https://ameros.github.io/gedcom-svg-tree/?lang=pl\u0026ged) - with `lang=pl`\n- [USA Presidents](https://ameros.github.io/gedcom-svg-tree/?ged=usa\u0026id=I1604) - showing images from relative path _(data folder)_\n- [Royal Families](https://ameros.github.io/gedcom-svg-tree/?ged=royals)\n- With help of ChatGPT:\n    - [Ancestors of Carl XVI Gustaf](https://ameros.github.io/gedcom-svg-tree/?lang=sv\u0026ged=carl-gustaf) - with `lang=sv`\n    - [Ancestors of Pope Leo XIV](https://ameros.github.io/gedcom-svg-tree/?lang=it\u0026ged=pope-leo) - with `lang=it`\n    - [Jagiellonian dynasty](https://ameros.github.io/gedcom-svg-tree/?lang=pl\u0026ged=jagiello) - with `lang=pl`\n    - [Maria Skłodowska - Curie](https://ameros.github.io/gedcom-svg-tree/?lang=pl\u0026ged=sklodowska) - with `lang=pl`\n\n---\n\n## Description\n\nThis is simple, yet UNIQUE way of presenting family tree. Each parents become a node of the tree.\n\n![](img/vertical.png)\n\n### Purpose\nThe idea initially was as simple as:\n- to visualize own family tree\n- quite privately without passing data to any online system out there\n- based on some file in a common format that the user can own independently of the system\n\nThis is a completely secure tool. Visualization is done on the client (your) side, in the browser, using JavaScript, without transferring data to any server.\nThere is no backend that holds, manipulate or process any data. It does not look for, match, examine, track or even collect any person data from your tree.\n\n### Design Assumptions\n\n#### 1. FOCUS ON DATA\n- first of all on that **INFORMATION** important from the point of view of graphical presentation of the tree and relationships _(title, names, birth and death data)_\n- secondly making this data more important (**EMPHASE**) than any graphical presentation\n\n#### 2. RESPECTING STRUCTURE\n- where, in GEDCOM, both person and relationship constitute a separate unique entity, both semantic and technical (**NODE**), carrying information meaningful in their own common context\n- enabling exploration of relationships through intuitive navigation between them\n\n#### 3. LOSSLESS CONVERSION\nfinally, due to the lack of consensus on the standard, and due to the extension of the GEDCOM format with interpreter and version-specific properties,\nit is important to accept everything in the input and **NOT LOSE** anything in the output _(the so-called \"more tags\" section on the displayed data card)_,\nwhich is quite a unique approach\n\n---\n\n### SPECS\n\n#### Input\nGEDCOM file (.ged) is the de facto standard for exchanging genealogical data between different software. It is a plain text file containing information\nabout individuals and links between them. It's specification is wide and eventually it is not ideal so the various systems expand it on their own.\nYou can read more about it on the Internet. We focus on some excerpt of it - the data suitable for visualization on the tree.\n\nThe tool makes use of such GEDCOM records and tags:\n- INDI: \n  - BIRT\n    - DATE\n    - PLAC\n  - BURI\n    - PLAC\n  - DEAT\n    - DATE\n    - PLAC\n  - FAMC\n  - FAMS\n  - GIVN - _to indicate (more) names given at birth_\n  - NAME - _no multiple tags_ \n  - NICK - _to indicate nick or also-known-as_\n  - OCCU\n  - SEX\n  - SURN - _to indicate surname at birth_\n  - TITL\n- FAM:\n  - CHIL\n  - HUSB\n  - MARR\n    - DATE\n    - PLAC\n  - WIFE\n  - DIV\n\nIt does however try to display all the data of those records.\n\n#### Output\n\n##### SVG\nSVG is a universal format of two-dimensional vector graphics, which was created for use on WWW.\n\nThe tool uses SVG to visualize the tree and allows to save the generated graphics as a .svg file so that the user can freely use it.\n\n##### TSV\nTSV is a tab-separated values file, convenient for a spreadsheet use. The GEDCOM level, pointer / tag and value are separated by tab character.  \n\nAfter import to spreadsheet using tab separator it looks like this:\n\n![](img/spreadsheet.png)\n\n##### JSON\nJSON, used as intermediate format while parsing GEDCOM file and building a tree, is also exposed\nfor download as possible benefit for developers. Sample:\n\n```json\n{\n  \"HEAD\": {},\n  \"I1\": {\n    \"nfType\": \"INDI\",\n    \"nfRecord\": \"0 @I1@ INDI\",\n    \"NAME\": {\n      \"nfValue\": \"William Jefferson /CLINTON/\",\n      \"nfRecord\": \"1 NAME William Jefferson /CLINTON/\"\n    },\n    \"SEX\": {\n      \"nfValue\": \"M\",\n      \"nfRecord\": \"1 SEX M\"\n    },\n    \"OCCU\": {\n      \"nfValue\": \"US President No. 42\",\n      \"nfRecord\": \"1 OCCU US President No. 42\"\n    },\n    \"BIRT\": {\n      \"nfValue\": \"\",\n      \"nfRecord\": \"1 BIRT\",\n      \"DATE\": {\n        \"nfValue\": \"19 AUG 1946\",\n        \"nfRecord\": \"2 DATE 19 AUG 1946\"\n      },\n      \"PLAC\": {\n        \"nfValue\": \"Hope, Hempstead Co., AR\",\n        \"nfRecord\": \"2 PLAC Hope, Hempstead Co., AR\"\n      }\n    },\n    \"REFN\": {\n      \"nfValue\": \"Clinton-1\",\n      \"nfRecord\": \"1 REFN Clinton-1\"\n    },\n    \"NOTE\": {\n      \"nfValue\": \"Bill Clinton was born William Jefferson Blythe IV. His last name was legally\",\n      \"nfRecord\": \"1 NOTE Bill Clinton was born William Jefferson Blythe IV. His last name was legally\",\n      \"CONT\": [\n        {\n          \"nfValue\": \"changed to Clinton on 12 June 1962 in Garland Co., Arkansas. Won the 1992\",\n          \"nfRecord\": \"2 CONT changed to Clinton on 12 June 1962 in Garland Co., Arkansas. Won the 1992\"\n        },\n        {\n          \"nfValue\": \"election over then president George Bush (votes not currently available).\",\n          \"nfRecord\": \"2 CONT election over then president George Bush (votes not currently available).\"\n        },\n        {\n          \"nfValue\": \"He was inaugurated as the 42nd President of the United States\",\n          \"nfRecord\": \"2 CONT He was inaugurated as the 42nd President of the United States\"\n        },\n        {\n          \"nfValue\": \"on 20 January 1993.\",\n          \"nfRecord\": \"2 CONT on 20 January 1993.\"\n        }\n      ]\n    },\n    \"FAMS\": [\n      {\n        \"nfValue\": \"F1\",\n        \"nfRecord\": \"1 FAMS @F1@\"\n      }\n    ],\n    \"FAMC\": {\n      \"nfValue\": \"F2\",\n      \"nfRecord\": \"1 FAMC @F2@\"\n    },\n    \"OBJE\": {\n      \"nfValue\": \"\",\n      \"nfRecord\": \"1 OBJE\",\n      \"FILE\": {\n        \"nfValue\": \"https://upload.wikimedia.org/wikipedia/commons/d/d3/Bill_Clinton.jpg\",\n        \"nfRecord\": \"2 FILE https://upload.wikimedia.org/wikipedia/commons/d/d3/Bill_Clinton.jpg\"\n      },\n      \"TITL\": {\n        \"nfValue\": \"Bill CLinton / Bob McNeely, The White House / Public domain\",\n        \"nfRecord\": \"2 TITL Bill CLinton / Bob McNeely, The White House / Public domain\"\n      }\n    },\n    \"WWW\": {\n      \"nfValue\": \"https://en.wikipedia.org/wiki/Bill_Clinton\",\n      \"nfRecord\": \"1 WWW https://en.wikipedia.org/wiki/Bill_Clinton\"\n    }\n  },\n  \"I2\": {},\n  \"F1\": {}\n}\n\n```\nwhere:\n  - `nfType`, `nfRecord` and `nfValue` are this tool native markers as a primal split of each GEDCOM line\n  - `I1`, `I2`, `F1`... etc are the actual record pointers _(id / reference)_\n\n---\n\n### Dependencies and Credits\nAfter some research:\n- GEDCOM (5.5.1) as a de facto standard to store family tree data https://en.wikipedia.org/wiki/GEDCOM\n- D3.js to draw a tree in a browser https://d3js.org/\n- DAG to display parents as a node https://en.wikipedia.org/wiki/Directed_acyclic_graph\n    - instead of typical data tree that can have only one parent\n    - instead of typical family trees that display parents separately, only as a relation \n- dagre-d3 to draw DAG https://github.com/dagrejs/dagre-d3\n- lunr.js for searching https://lunrjs.com/\n\n---\n\nThe tool is listed @ https://www.cyndislist.com/gedcom/gedcom-software/.\n\nHere you can add a link to the list: http://www.cyndislist.com/create-a-link-to-cyndis-list/\n","funding_links":["https://ko-fi.com/ameros"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fameros%2Fgedcom-svg-tree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fameros%2Fgedcom-svg-tree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fameros%2Fgedcom-svg-tree/lists"}