Genealogy software · free (MIT) · Windows · macOS · Linux
Anyone who transcribes church registers ends up with tables: one row per baptism, marriage and burial. famrecon turns them into families, person by person, with source citation and reason on every link. What is not unambiguous stays open and goes to a review list.
Performance
The entire holdings of the Kies family archive, almost 242,000 church register entries from 32 parishes in the Zabergäu and Stromberg area of Württemberg, were reconstructed in 25 minutes – locally on an ordinary desktop computer, without artificial intelligence and without a cloud. All 32 runs completed without a single failure.
The program runs on your own computer, without a service on the net. Every run is reproducible: the same tables give the same result, link by link and open to checking.
A single village in detail. The church registers of Cleebronn in the Zabergäu, transcribed by Dr. Otfried Kies, cover 250 years. famrecon read the tables without any change to the program and linked them on an ordinary desktop computer.
For a village family book (Ortsfamilienbuch) this means: the tedious work of assigning every baptism to the right family is done by the computation. The author only decides the cases that are genuinely open, and sees for every link why it was made.
A second opinion on existing family books. famrecon can cross-check an existing reconstruction. In the Kies archive it revealed links that were missing there:
These findings went back into the archive. Across all 32 parishes, 2,318 more deceased are now linked to their baptism, and contradictions between age at death and baptism fell from 47 to 17. Every difference between two reconstructions is a question to both, and the answers can be counted.
For anyone who has registers in tables. Every author keeps tables differently. famrecon proposes the column mapping itself, from headers and sample values, with a confidence level per column. xlsx with several sheets, several files or CSV all work. It replaces the old route via spreadsheet macros: no Excel licence, minutes instead of days.
Method
computed by fixed rulesdeliberately left opendecided by hand
No guessing. If two persons fit equally well, or a veto speaks against an otherwise matching candidate, the case stays open. It goes to the review list with all candidates and their evidence. Whoever knows the registers decides there or in an Excel sheet, and the decision holds for every further run.
Nothing gets lost. A check chain finds every table row again in the finished GEDCOM by its source citation. The raw value of every cell is kept alongside the normal form; differing spellings become additional names.
The output can be read by Gramps, Ahnenblatt, webtrees and the online village family books of the German Verein für Computergenealogie. Anyone working with webtrees can continue editing the result directly in wtWin.
Rules
famrecon works without artificial intelligence and without statistics in the background. There is a handful of fixed numbers and rules, all collected in one place in the source code and fully described here. Whatever cannot be expressed with them is not forced by a new rule but goes to the review list.
The entries are processed in chronological order, baptisms, marriages and burials mixed; on the same date the marriage comes before the baptism and the baptism before the burial, and a missing month or day counts as mid-year. So each entry can only link to what came before. For every person named, famrecon looks for the persons known so far whose surname sounds the same. To do so, every surname gets a phonetic key (Kölner Phonetik, a German counterpart to Soundex): Haag and Hag, Hanneman and Hannaman, Kiefer and Kieffer get the same key. Given names are brought to a standard form, such as Nicolaus and Nikolaus or Hanß and Johann.
Every candidate collects points for what fits:
| Feature | Points | Explanation |
|---|---|---|
| Given name equal | 100 | after the standard form |
| Given name partly equal | 40 – 90 | call name first (Jacob = Jacob Friedrich) 90, last (Jacob = Johann Jacob) 80, two names in common 70; if the common name is only Johann, Anna or Maria, 60 or 40 |
| Birth date exact | 100 | documented baptism and calculated birth on the same day |
| Birth year equal | 50 | birth year from the age given at burial |
| Birth year close | 30 | up to five years off |
| Named father fits | 30 | e.g. the father in a child's burial |
| Named mother fits | 50 | |
| Named spouse fits | 50 | |
| Surname spelled identically | 20 | not just sounding the same |
| Death date = back reference | 200 | the baptism row already notes the death date, the burial confirms it |
A candidate is chosen only if it has enough points and is clearly ahead of the second best.
| Setting | Value | Meaning |
|---|---|---|
| Threshold, general | 100 | below it, a new person is created |
| Threshold, burial | 80 | burial entries often lack details |
| Threshold, spouse and earlier marriage | 50 | the marriage itself is already a strong anchor |
| Lead for “certain” | 50 | plus an anchor beyond the name |
| Lead for “probable” | 30 | below it, the case counts as a tie and stays open |
This gives the level of every link. Certain: besides the name a further anchor fits, such as mother, spouse or date, and nobody is close behind. Probable: surname and given name fit, no serious rival. New: first mention of a person, or deliberately left open. The level later appears on every link in the GEDCOM file and in the book.
Besides points, time counts. Every candidate must fit a window, otherwise it is excluded, however well the name matches:
| Window | Value | Effect |
|---|---|---|
| Father's age at baptism | 16 – 75 | excluded outside |
| Mother's age at baptism | 15 – 50 | excluded outside |
| Age of bride and groom | 14 – 80 | excluded outside; between 18 and 32 there are 10 extra points, so that among namesakes the 23-year-old comes before the 39-year-old |
| Adult role | from 14 | anyone younger cannot be father, mother, bride or groom; and anyone who already appeared as an adult cannot have been born afterwards |
| Birth from stated age | ± 1 / ± 5 years | up to one year off 50 points, up to five years 30 points, more than five years excluded |
| Lifespan | 0 – 100 | an event before birth or after the hundredth year is excluded |
| Death before the event | — | anyone already buried no longer appears; the father may be named up to one year after his death (posthumous child) |
| Mother dead before baptism | 1 year | if the wife died more than a year before the baptism, this family is excluded |
| Marriage after baptism | — | a marriage concluded only after the baptism cannot be the parents' family |
| Span of children in a family | 22 years | between first and last child; more is excluded |
| Child burial | under 15 | is linked to a baptism only if an anchor fits: birth date, father or back reference |
One case is relaxed: if the parents of an adult are named, for example in the burial of an old man, his birth year is often unknown. Then famrecon does not check the father's age, allows a father who has already died, and widens the span of children to 37 years, since the parents are usually long dead by then.
Before points count, candidates that are impossible by fixed rules are excluded. famrecon counts in every run how often each rule applied.
| Rule | Meaning |
|---|---|
| Age outside the role | father 16 to 75, mother 15 to 50, bride and groom 14 to 80 years at the event |
| Younger than 14 in an adult role | as father, mother, bride or groom under 14 |
| Older than 100 | over a hundred years old |
| Already dead | already buried at the time of the entry; exception: the father of a posthumous child |
| Birth more than 5 years off | birth calculated from the age and documented baptism are too far apart |
| Born after first appearance | the person already appeared as an adult before they could have been born |
| Sex contradicts | man and woman do not match |
| Given name contradicts | no name part in common |
| Mother contradicts | the named mother does not match the wife of this family |
| Wife died before the baptism | she cannot be the mother |
| Marriage after the baptism | this family's marriage took place only after the baptism |
| Span of children exceeded | more than 22 years would lie between first and last child |
| Different father | the person already has parents, and the named father has a different surname |
| Is the father, not the son | the candidate is married to the named mother |
| Burial: single, father contradicts | the named father of an unmarried person does not match the family found |
| Burial: married, no spouse fits | the named spouse matches none of the person's marriages |
| Burial: child without anchor | a child burial without date or parents is not linked to a baptism |
If a veto speaks against a candidate that otherwise fits well and has an anchor, it is not discarded; the case stays open. A person left in twice is easy to merge later; two people wrongly merged into one are hard to find again.
Points, thresholds and vetoes were tuned on about 2,800 real church register entries. Every change to a rule is measured against these and against the fictitious Falkenrath family tree before it stays; automated tests enforce the lower limits. The complete source code is open on GitHub.
Measurement
You cannot tell by looking whether a reconstruction is right. famrecon therefore measures itself – and the numbers say exactly as much as their measurement allows.
On fictitious data. From the fictitious Falkenrath family tree with 492 persons, baptism, marriage and burial registers are generated, famrecon computes them back, and the result is compared with the original. It finds 152 of 153 couples and assigns 331 of 337 children correctly. That tests the mechanics; real church registers are messier.
On a real register. Does famrecon recognize that a burial belongs to a particular baptism? On the register it was tuned on, about 500 such pairs: in 92 of 100 cases the link made is correct, and of 100 actual pairs it finds 89. This is not an independent test and says nothing yet about parents, marriages and children. An independent measurement at a second place, including the assignment of parents, is under way.
The comparison also turned up links that are missing from the hand-checked family book and can be confirmed in the church register: even a checked family book is one reading. With the command vergleiche (compare), every author can measure famrecon against their own family book before trusting it.
Download
Windows as a single file, macOS as an app bundle, Linux as .deb or single file; with Python 3.11 also via pip install. The interface runs in the browser, but only on your own computer: the data never leave it. On Windows and macOS the system warns once about the unknown publisher. The program speaks English and German.
Status: work in progress. The chain from reading to GEDCOM is complete and measured. What small examples do not show, only large real registers reveal – feedback from authors with their own tables is very welcome: thomas@bgg-mail.de.