Library / SDK
gramps-project/gramps avatar
gramps-project/gramps

Gramps: a GPL-2.0 genealogy desktop application built on GTK and Python

Source code for Gramps Genealogical program

3,122 stars537 forksPythonGPL-2.0

At a glance

What is it?
Gramps is a GTK-based family tree program written in Python, released under GPL-2.0, with the latest published release being v6.1.0-beta2 on 2026-09-13. This article covers what it does, how to install it, and where it stops being the right tool.
Who is it for?
Gramps suits genealogists who want a local, GPL-2.0 family tree program with a GTK interface and a Python codebase they can read. It is a poor fit for anyone who needs a hosted collaborative tree or a supported commercial product with a service contract.
Can I use it commercially?
Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 17 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Who Gramps is for and the problem it removes

Gramps is a desktop genealogy program. The README states the goal directly: to produce a genealogy program that is both intuitive for hobbyists and feature-complete for professional genealogists. That sentence sets the audience. It is not a web service and it is not a subscription product. You install it, you keep your family tree on your own machine, and the data belongs to you in the sense that the program is GPL-2.0 and the database lives locally.

The problem it removes is the gap between a spreadsheet of names and dates and a real genealogical data model. A family tree is not a table. People appear in multiple roles, a person can be a child in one family and a spouse in another, places repeat across centuries, sources back individual claims, and media attaches to any of those records. Gramps models those entities and their links rather than flattening them into rows. For someone who has outgrown a text file, that structure is the reason to adopt it.

The secondary audience is developers. The repository is Python, the package metadata in pyproject.toml declares requires-python of 3.10 or greater, and the tree ships py.typed alongside a mypy.ini and a .pylintrc. That is a codebase that invites reading and extension, and the README points to a third-party addon ecosystem written by users and developers.

The GTK stack Gramps is built on

Gramps is a GNOME-adjacent desktop application. The interface is GTK, the language is Python, and the binding layer is pygobject. The README lists the hard requirements: Python 3.10 or greater, GTK 3.24 or greater, and pygobject 3.12 or greater. Those three must be present or Gramps does not start at all. Everything else is graded from strongly recommended down to optional.

The rendering path runs through cairo, Pycairo, pango, pangocairo and librsvg2, all with GObject Introspection bindings. That is why SVG icons render and why reports can be laid out with internationalized text. orjson is listed as a required dependency in both the README and the pyproject.toml dependencies list, where it sits next to requests and certifi. The README says orjson is used to increase the performance of Gramps, which is a rare case of a project naming its own bottleneck: JSON serialization was slow enough to justify a compiled dependency.

The optional layer is where the feature gaps appear. osmgpsmap, with the gir1.2-osmgpsmap-1.0 bindings, drives the Geography Category; without it the GeoView is inactive. Graphviz enables graph reports, and the README is explicit that without it three reports cannot be run. PyICU improves localized sorting, particularly for non-Latin characters and non-English locales, and falls back to built-in libraries when absent. Ghostscript is needed by Graphviz reports to produce PDF files. Each of these is a real capability that disappears quietly if the package is missing.

Installing Gramps and opening a first family tree

The README does not give a single install command. It points to the INSTALL file for building from source and to the project homepage, and it lists the packages that must be present. It states that the package name is usually graphviz or python3-pygraphviz, and that the osmgpsmap bindings may be named gir1.2-osmgpsmap-1.0, but it does not print a package manager command for installing Gramps itself. On a distribution that packages Gramps, the package manager is the shortest path; the README's requirements section is the checklist to hold it against, starting with Python 3.10 or greater, GTK 3.24 or greater, and pygobject 3.12 or greater.

After installation, the Geography view and the Graphviz reports may still be inactive until their optional packages are installed. If you want the map view, add the osmgpsmap bindings; if you want the three Graphviz reports, add graphviz. The README does not document a rollback procedure for a failed install, so treat the package manager as the only supported path back.

Building from source is a different exercise. The pyproject.toml declares hatchling as the build backend, and the project requires Python 3.10 or greater. The repository root contains Gramps.py, which is the entry point, and an INSTALL file that the README tells you to read before you try. That INSTALL file is where the source build steps live; the README itself does not reproduce them.

The declared runtime dependencies are orjson, requests and certifi. Installing the Python package does not install GTK, pygobject or the introspection bindings. Those come from your system package manager, and if they are missing, the program will fail at import time rather than at install time. The repository also ships debian/, snap/ and mac/ directories, which indicates packaging recipes exist for those targets, though the README does not walk through any of them.

For a first real use, the repository includes example data you can open without committing your own research. Under example/ there are csv/, gedcom/ and gramps/ directories, so you can import a GEDCOM file or open a native Gramps database and see how the categories behave before you enter anything. That is the fastest way to find out whether the interface suits you.

Where Gramps is the wrong tool

The strongest limitation is stated in the project's own metadata. The pyproject.toml classifier reads Development Status :: 4 - Beta. A project that has shipped for years still labels itself beta, and the most recent release in the list is v6.1.0-beta2, published on 2026-09-13. The stable line is v6.0.8 from 2026-04-09. If you need a product with a support contract, a release cadence you can plan around, and someone accountable when a report renders wrong, Gramps is not that. It is a volunteer project under GPL-2.0, and the README's own framing of third-party addons, which are written by users and developers and unless stated are not officially part of Gramps, tells you where the boundary of official support sits.

The second limitation is the dependency surface. A GTK 3.24 application with introspection bindings is not a single binary you copy to a machine. It is a stack. On a headless server, or on a distribution that has moved past the GTK 3 line, installation becomes a negotiation with your package manager. The README's careful separation of must, strongly recommended and optional packages is honest, but it also means the feature set you get depends on what your distribution happened to ship.

The third is collaboration. Nothing in the README describes a hosted or multi-user mode. Gramps is a desktop application, and the repository's structure and packaging directories point at debian, snap and mac targets, not at a server deployment. If your requirement is several relatives editing one tree simultaneously from different machines, this is the wrong shape of tool. The README does mention rcs for archiving a family tree and managing multiple revisions, which is version control for a single user's files, not concurrent editing.

Finally, older databases are a one-way concern. bsddb3 is listed as needed only to upgrade older Gramps databases, and it is optional. If you have a tree from a much older Gramps version, the upgrade path may require a package that is no longer installed by default.

How Gramps differs from a web-based tree

The obvious alternative is a browser-based genealogy service, where the tree lives on someone else's server and you reach it through an account. The difference is not cosmetic. With a hosted service, the operator handles backups, upgrades, the database engine and the web stack; you handle nothing. With Gramps, you handle all of it, and in exchange you get a local database, a GPL-2.0 program you can read and modify, and no dependency on a company continuing to exist.

That trade shows up in concrete places. A hosted service can push a schema change to every user at once; Gramps ships an upgrade path that may need bsddb3 for old databases. A hosted service gives every relative a login; Gramps gives you rcs archiving of a file. A hosted service can render a map because the server has the tiles and the library; Gramps renders a map only if osmgpsmap and its Python bindings are installed on your machine, and the README says the GeoView will not be active otherwise.

The other alternative is a different desktop genealogy program, and here the distinguishing facts are the licence and the language. Gramps is GPL-2.0-or-later per the pyproject.toml license field, with the full text in COPYING. The codebase is Python 3.10+, with type information shipped via py.typed and static analysis configured through mypy.ini and .pylintrc. If you want to read the source of the tool that holds your family's data, or write an addon against it, those two facts matter more than any feature checklist.

Maintenance, releases and what upgrading costs

The repository is not archived and the last push was on 2026-09-13. The release list shows a beta line and a stable line running in parallel: v6.1.0-beta2 on 2026-09-13, v6.1.0-beta1 on 2026-04-21, and v6.0.8 on 2026-04-09. The default branch is maintenance/gramps61, which sits alongside the maintenance/gramps60 branch referenced in the README badges and links. That naming convention is worth understanding before you upgrade: maintenance branches are per-minor-version, so a fix for 6.0 does not automatically appear in 6.1, and vice versa.

The practical cost is that running a beta means running ahead of the stable line. v6.1.0-beta2 is the most recent release, but it is a beta, and the project's own classifier is Development Status :: 4 - Beta for the codebase as a whole. If you value your tree more than you value new features, the stable line is the one to track.

The upgrade cost on the dependency side is real. The README's No longer needed section records packages that were dropped over time: xdg-utils since Gramps 5.2, gir-webkit since 4.2, and pygoocanvas, pygtk and pyexiv2 since 4.0. That list is a reminder that a Gramps upgrade can change what your system needs, and the Graph View addon still requires PyGoocanvas and Goocanvas even though the core no longer does.

On licensing, the program is GPL-2.0-or-later and the README tells you to read the COPYING file first. The GPL is a copyleft licence, which has consequences if you plan to redistribute a modified version or bundle Gramps into another product. This article is not legal advice; read COPYING and, if the redistribution matters commercially, get proper counsel.

Editorial conclusion

Gramps suits genealogists who want a local, GPL-2.0 family tree program with a GTK interface and a Python codebase they can read. It is a poor fit for anyone who needs a hosted collaborative tree or a supported commercial product with a service contract. Before adopting it, check the INSTALL file against your distribution's package versions for Python 3.10, GTK 3.24 and pygobject 3.12, and confirm which optional packages your machine already provides, because the GeoView, three Graphviz reports and spell checking all depend on packages that are not part of the core install.

Frequently asked questions

What is Gramps?

Gramps is a genealogy program for building and managing family trees, written in Python with a GTK interface and released under GPL-2.0-or-later. The README describes the goal as a program that is intuitive for hobbyists and feature-complete for professional genealogists.

How do I install Gramps?

The README does not give a single install command; it points to the INSTALL file for building from source and to the project homepage. It lists the required packages as Python 3.10 or greater, GTK 3.24 or greater, and pygobject 3.12 or greater, so on a distribution that packages Gramps the package manager is the shortest path.

How do I install Gramps on Ubuntu?

Ubuntu packages it, and the README notes that optional support packages have distribution-specific names, such as gir1.2-osmgpsmap-1.0 for the map bindings and graphviz or python3-pygraphviz for Graphviz. Installing the gramps package alone leaves the Geography view and the three Graphviz reports inactive until those optional packages are added.

How do I use Gramps as a beginner?

The repository ships example data under example/csv/, example/gedcom/ and example/gramps/, so you can import a GEDCOM file or open a native database and explore the categories before entering your own research. Note that the README does not document a rollback procedure, so work on a copy until you are comfortable.

How do I use the Gramps family tree software?

The README describes the goal as a program that is intuitive for hobbyists and feature-complete for professional genealogists, with the interface organized into categories such as the Geography Category. The repository's example/ directory holds csv, gedcom and gramps sample data you can open to see how those categories behave.

Official sources

  1. gramps-project/gramps on GitHub
  2. License: GPL-2.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/gramps-project-gramps.svg)](https://hysenlabs.com/projects/gramps-project-gramps)