Pavlo Myroniuk113 downloadsObsidian plugin for rendering family graphs (family trees)
Grafily is an Obsidian plugin for rendering family graphs (family trees). It uses the reactflow library for rendering and a custom layout algorithm for placing graph nodes.
This plugin is useful for family history/genealogy research, tracking family members, etc.
All persons in demo screenshots below are generated using AI. If you find any coincidences with real people, please contact me, and I will fix them.
| Reingold-Tilford | Brandes-Köpf |
|---|---|
![]() |
![]() |
| A tree-based visualization algorithm. It will show only direct ancestors and/or descendants of the selected person (e.g., children's children or parents' parents). The advantage of this method is perfect centering. More... | A graph-based visualization algorithm. It's a universal rendering algorithm for any family graph of any complexity. The only disadvantage is not-perfect centering: some children's or parents' nodes are not perfectly centered. More... |
Basically, Grafily is just a tool that creates a pretty graph from vault .md files:
flowchart LR
first["bunch of .md files"] -->|Grafily| second["Pretty graph ✨"]
If you want to read more about how it works, please read my blog post: Announcing Grafily v.0.3.0#how-it-works.
I started my family research in 2025. I did not want to store all the information on a third-party site (for instance, myheritage.com). I wanted to be the owner of the private information, photos, stories, interview recordings with my relatives, and much more.
So, I decided to use Obsidian. There are plenty of reasons why Obsidian:
But there was a problem: I couldn't find a suitable plugin to render a pretty graph of family relationships. So, I decided to write my own plugin. The Grafily has one concrete purpose: it is a viewer for family members' relationships.
Actually, I found one very interesting plugin: https://github.com/banisterious/obsidian-charted-roots. It is super powerful. Too powerful for me. When I use such complex software, I do not have a feeling that I control the process. I wanted a simple plugin. But do not get me wrong: obsidian-charted-roots is a great plugin, but it's just not for me.
The Grafily plugin is available in the Obsidian Community Plugins list. So, you can install it right from the Obsidian app. Here is a direct link to the plugin page: https://community.obsidian.md/plugins/grafily.
You can install the plugin by downloading the release assets, placing them inside your Obsidian vault, and enabling it in the settings:
main.js, manifest.json, and styles.css.VAULT_DIR=/path/to/vault
GRAFILY_DIR=${VAULT_DIR}/.obsidian/plugins/grafily
mkdir -p ${GRAFILY_DIR}
cp main.js ${GRAFILY_DIR}
cp styles.css ${GRAFILY_DIR}
cp manifest.json ${GRAFILY_DIR}
Community Plugins section).If you want to build the plugin from the source code, please follow the BUILD_FROM_SRC.md document.
Read these two guides to understand the metadata format and how to use the plugin:
Did you hear about BDFL?
TL;DR:
Benevolent dictator for life (BDFL) is a title given to a small number of open-source software development leaders, typically project founders who retain the final say in disputes or arguments within the community.
For the Grafily project, the BDFL is @TheBestTvarynka (Pavlo Myroniuk), the original creator of Grafily.
The Grafily has one concrete goal: to render pretty family relationship graphs. It will never become an all-in-one genealogy research tool. It will never become a universal graph renderer. Or anything like that. The Grafily follows the Unix philosophy:
Do one thing and do it well.
The Grafily is good at building graph layouts.
It does not even render them because the reactflow library handles that.
Did you hear about the worse-is-better philosophy? If not, I encourage you to read the The Rise of Worse is Better article.
TL;DR. This is a citation from the mentioned article above:
The worse-is-better philosophy:
- Simplicity -- the design must be simple, both in implementation and interface. It is more important for the implementation to be simple than the interface.
- Correctness -- the design must be correct in all observable aspects. It is slightly better to be simple than correct.
- Consistency -- the design must not be overly inconsistent. Consistency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circumstances than to introduce either implementational complexity or inconsistency.
- Completeness -- the design must cover as many important situations as is practical. All reasonably expected cases should be covered. Completeness can be sacrificed in favor of any other quality. Consistency can be sacrificed to achieve completeness if simplicity is retained.
:thinking: What does it mean for the app? It means some features can be discarded in favor of app simplicity. The benefits of some features may not justify the complexity of their implementation. I would rather keep the app simple than unreasonably complex.