Rootfable Extensions for FamilySearch GEDCOM 7
This document defines the extension tags Rootfable writes into FamilySearch GEDCOM 7 files, and the archive layout those files are distributed in. It is published so that any program — not only ours — can read a Rootfable archive completely, and so that a file we wrote today is still legible when nobody is left to ask.
This specification is released into the public domain (CC0 1.0). Implement it, fork it, or absorb it into a future version of GEDCOM without asking us.
1. Scope and conformance
A Rootfable export is a conformant GEDCOM 7.0 file. Everything here is additive: the people, families, dates, places, notes and media links are standard structures that any GEDCOM 7 reader already understands. The extensions below carry only the facts baseline GEDCOM has no tag for.
GEDCOM 7 requires that a reader ignore extension structures it does not
recognise, so a program with no knowledge of this document loses nothing but
the extension payloads themselves. Every extension tag used in a file is
declared in the header's SCHMA structure with the URI that
identifies it — the tag spelling is a local nickname, the URI is the identity:
0 HEAD 1 GEDC 2 VERS 7.0 1 SOUR ROOTFABLE 2 NAME Rootfable 1 SCHMA 2 TAG _RF_AUTHOR https://rootfable.app/spec/v1#author 2 TAG _RF_DATE https://rootfable.app/spec/v1#date 2 TAG _RF_PROMPT https://rootfable.app/spec/v1#prompt 2 TAG _RF_TRANSCRIPT https://rootfable.app/spec/v1#transcript 2 TAG _WT https://rootfable.app/spec/v1#wikitree
A reader should match on the URI, not on the underscore spelling. A file
that relabels _RF_AUTHOR to _CONTRIB while keeping the
same URI means exactly the same thing.
2. Archive layout
Rootfable distributes a family as a single ZIP following the GEDZIP convention from GEDCOM 7:
family-archive.zip
├── gedcom.ged the tree, GEDCOM 7.0, UTF-8
├── README.txt plain-language explanation of the above
└── media/ every photo, document and video clip
├── I1-photo-1.jpg
├── I1-document-2.pdf
├── I4-clip-3.mp4
└── I4-poster-4.jpg
Each media file is a top-level OBJE record whose
FILE payload is the archive-relative path, with a
FORM giving its media type. Paths are stored, never compressed,
so a damaged archive can still be carved by hand. Media filenames encode the
individual's xref and the media's role for human legibility only — the
OBJE records are authoritative.
If a media file could not be retrieved when the archive was
built, its OBJE record is still present and the missing path is
listed in README.txt. A gap is recorded, never silently dropped.
3. Extension tags
_RF_AUTHOR
The family member who contributed the structure this appears under: the
person who told the story, uploaded the photo, or recorded the clip. This is
contribution provenance, not authorship of the underlying historical
record, and not a SOUR citation — the person named here is
typically alive and is the reason the material exists in the tree at all.
- URI
https://rootfable.app/spec/v1#author- Payload
- Text — a display name as entered.
- Appears under
NOTE(a story),OBJE(a photo, document or clip).- Cardinality
- {0:1}
1 NOTE Grandpa kept the ration book in his coat until 1961. 2 _RF_AUTHOR Mary Hamilton 2 _RF_DATE 2026-03-04
_RF_DATE
When the contribution was made — the moment the story was written down or
the file uploaded. Distinct from the standard DATE of the event
itself: a 1943 photograph added to the tree in 2026 has an event date of 1943
and an _RF_DATE of 2026.
- URI
https://rootfable.app/spec/v1#date- Payload
- Text — an ISO 8601 date or date-time. Not a GEDCOM DATE value; it needs no calendar escape and no approximation qualifiers.
- Appears under
- The same structures as
_RF_AUTHOR(NOTE,OBJE), as its sibling at the same level — not nested beneath it. - Cardinality
- {0:1}
_RF_PROMPT
The question a person was answering on camera. Rootfable can invite a member to record a short video reply to a prompt — “What do you want your great-grandchildren to know about you?” — and the answer is meaningless without the question. Preserving the prompt is what keeps a two-minute clip from becoming an orphaned monologue.
- URI
https://rootfable.app/spec/v1#prompt- Payload
- Text. May span lines via
CONT. - Appears under
OBJErecords whose media is a video clip.- Cardinality
- {0:1}
_RF_TRANSCRIPT
The spoken words of a video clip, as text. Machine-generated and then corrected by a human, or typed from scratch. This is the part of a recording that survives format rot: codecs die, plain text does not.
- URI
https://rootfable.app/spec/v1#transcript- Payload
- Text. Line breaks are meaningful and are carried as
CONT. - Appears under
OBJErecords whose media is a video clip.- Cardinality
- {0:1}
Rootfable also writes the transcript a second time as an ordinary
NOTE prefixed Transcript:, so that a reader with no
knowledge of this specification still shows a family the words. The duplication
is deliberate. A reader that understands _RF_TRANSCRIPT should
prefer it and may suppress the matching NOTE.
0 @O3@ OBJE 1 FILE media/I4-clip-3.mp4 2 FORM video/mp4 2 TITL Video clip, recorded 2026 1 _RF_PROMPT What do you want your great-grandchildren to know about you? 1 _RF_TRANSCRIPT I was born in the back bedroom of a house that isn't there 2 CONT anymore. My mother used to say... 1 NOTE Transcript: I was born in the back bedroom of a house that isn't there 2 CONT anymore. My mother used to say... 1 _RF_AUTHOR James Hamilton 1 _RF_DATE 2026-05-11
_WT
The individual's profile identifier on WikiTree, the collaborative single-tree genealogy project — the same person, as the wider world has catalogued them.
This tag is spelled without the _RF_ prefix the others carry,
because it predates them: Rootfable's earlier exporter wrote _WT
and its importer reads it, and files carrying it are already in people's hands.
Renaming it for the sake of consistency would strand them, which is the exact
failure this specification exists to prevent.
- URI
https://rootfable.app/spec/v1#wikitree- Payload
- Text — a WikiTree ID, e.g.
Hamilton-3841. Resolves ashttps://www.wikitree.com/wiki/<id>. - Appears under
INDI.- Cardinality
- {0:1}
The same identifier is also written as a standard GEDCOM 7
EXID, which is the baseline structure for “this record is also
that record elsewhere”. A reader that knows nothing of this page still gets the
link; the extension exists only so our own round-trip is exact. Prefer the
EXID; the two always agree.
0 @I4@ INDI 1 NAME James /Hamilton/ 1 EXID Hamilton-3841 2 TYPE https://www.wikitree.com/ 1 _WT Hamilton-3841
4. Stability and versioning
Version 1 is stable. Within it, changes are additive only: new tags may be defined, but an existing tag's URI, payload type or meaning will not change, and no tag will be removed. A reader written against this page today will keep reading Rootfable archives correctly.
If a change were ever needed that breaks that promise, it would be published
at a new URI (/spec/v2) and this page would remain in place,
unchanged, for the files that already point at it. Dead links are how archives
rot; we would rather host a page forever than break one.
5. Relationship to the GEDCOM standard
We did not invent a format. GEDCOM 7 is stewarded by FamilySearch, developed in the open at github.com/FamilySearch/GEDCOM, and it already solved the hard parts: a documented data model, real Unicode, media bundling, and — critically — a designed extension mechanism, which is the one this document uses.
Extensions defined this way are meant to be discoverable, and gedcom.io maintains public registries of extension tags and media types for that purpose. We intend to register the tags defined here and to mirror this document in a public repository so the definitions outlive our hosting.
If something here turns out to be generally useful — provenance for crowd-contributed material, prompts and transcripts for recorded testimony — the right home for it is the standard itself, proposed as an issue or pull request against the FamilySearch repository, not a private dialect. That is the outcome we would prefer.
6. Comments
Corrections, implementation questions, and requests for tags this does not yet cover: Edge Case Studios — edgecasestudios.ai.