Iβve been working on Gramps performance improvements for many years. Finally, I have found a solution that solves a few issues. First, let me tell you about gramps-object-query-language (or GOQL for short):
GOQL is a Python-like way of writing queries. It might be familiar to Gramps developers (with some tweaks), and might be very foreign to regular users. But it is very powerful for finding what you want in a succinct form. It uses Python syntax, but in some places it alters the Python semantics.
In a Person view context, you could enter gender == Person.MALE to find all of the males. This is also what you enter as a Gramps Python developer.
But you can also enter in the Family view context any(child for child in children if "Steve" in child.given_name) to find families with children named βSteveβ.
But the best part: if the system can, it will execute the search in SQL. Superfast for even large trees. It automatically will create JOINS where needed, for example:
- Family mother β Person
- Family father β Person
- Person birth β Events
Recursively, through links from one object to another.
Ok, but how to use it? In Gramps 6.1 it is a new filter. You can enter these expressions, and instantly find the matching items (a filter for every view). To make the filter system easier to use, it has TAB completion, so you donβt need to remember all of the parts of each thing.
You can also turn these expressions into a Custom Filter, so you can use them throughout the rest of Gramps. (Advanced developers know that you can NOT run a SQL query when you have a proxy (like private or probably-alive) active. GOQL falls back to regular db access in that case. Slower, but still useful).
But wait, thereβs more. The plan is to include GOQL in gramps-web-api so that any web app could take advantage of it. In fact, it supports paged-results (donβt get all 100k people, just the first page), and sorting with collation.
And the big endgame is a new implementation of Gramps, written from scratch, with two major goals:
- Fast access for large family trees β works on small ones too
- Real-time collaboration β users can work together on creating a family tree
This is currently a research experiment, testing out all of the components. Here is a screen shot:
Iβve made some decisions that are different from those made in gramps-web, including: use React for the frontend, TypeScript first, use SQL whenever possible, and exploiting Gramps 6 JSON data. But it also will support the same database API (SharedPostgreSQL) that the rest of the Gramps projects use.
Here is the github repo:
Iβm also planning for this to function as a desktop app. It will be a long time before gramps-connect catches up with its siblings. But tell me where youβd like to see it go, and join in the development if you like. Ideas welcome in the issue tracker





