FamilyBushes

What is .fbft file?

Official Spec

The native family tree format of FamilyBushes.com — a single portable archive that contains your full tree, photos, and life events. This page documents the format completely, so you can read or write one yourself.

Overview

A .fbft file is the export format created by FamilyBushes.com. Under the hood it is a standard ZIP archive — you can rename it to .zip and open it with any archive tool. The extension stands for Family Bushes Family Tree.

Unlike GEDCOM, which only stores text data and references photos by path, .fbft bundles everything into one self-contained file: people, relationships, dates, life events with map coordinates, photos, and attachments.

What is inside the archive

my-family-tree.fbft  (ZIP archive, DEFLATE)
├── family_tree.json      ← all tree data (JSON, indented with 2 spaces)
├── images/               ← photo files, named {fileId}.{ext}
└── attachments/          ← document files, named {fileId}.{ext}

A complete family_tree.json

Everything below is a real, valid file: three people, one marriage, one custom attribute and one photo. Every other section on this page describes a field you can see here.

{
  "schema": "https://familybushes.com/format/explain/fbft?version=1.0.0",
  "id": "0f1d8c1e-7a3f-4a2b-9c11-6d5e4b3a2c10",
  "createdAt": "2026-03-14T09:12:44.101Z",
  "updatedAt": "2026-07-16T18:03:22.887Z",
  "name": "The Fitzgerald Family",
  "credits": "Compiled by Jane Doe, 2026",
  "events": [
    "$_BIRTH",
    "$_MARRIED",
    "$_LIVED_AT",
    "$_KINDERGARTEN",
    "$_SCHOOL_1",
    "$_SCHOOL_2",
    "$_SCHOOL_3",
    "$_SCHOOL_4",
    "$_MOVED",
    "$_MILITARY_SERVICE",
    "$_DIVORCED",
    "$_DEATH",
    "Emigrated"
  ],
  "attributes": ["Occupation"],
  "attributesTypeSelectString": [
    {
      "name": "Occupation",
      "options": [
        { "value": "Teacher", "color": "#1976d2" },
        { "value": "Farmer", "color": "#2e7d32" }
      ]
    }
  ],
  "familyBushesWebsiteStyles": {
    "lineThickness": "medium",
    "lineAnimation": false,
    "straightLines": false,
    "personCardType": "photo-and-text",
    "photoRadius": "round",
    "nameRadius": "medium",
    "treeTheme": "default"
  },
  "people": {
    "1": {
      "name": "Rose",
      "surname": "Fitzgerald",
      "surnameAssumed": "Murphy",
      "gender": "FEMALE",
      "information": "Moved to Boston in her twenties.",
      "photos": [12],
      "attachments": [],
      "events": [
        {
          "dateStart": "1890-07-22",
          "type": "$_BIRTH",
          "comment": "Born at home",
          "latLon": [42.3601, -71.0589]
        },
        {
          "dateStart": "1912-09-01",
          "dateEnd": "1916-06-30",
          "type": "$_SCHOOL_4",
          "comment": "Studied literature"
        },
        {
          "dateStart": "1995-01-22",
          "type": "$_DEATH",
          "comment": ""
        }
      ],
      "attributes": { "Occupation": "Teacher" },
      "createdAt": "2026-03-14T09:13:02.400Z",
      "updatedAt": "2026-05-02T11:41:19.882Z"
    },
    "2": {
      "name": "Patrick",
      "surname": "Fitzgerald",
      "surnameAssumed": "",
      "gender": "MALE",
      "information": "",
      "photos": [],
      "attachments": [],
      "events": [
        {
          "dateStart": "1888-01-01",
          "type": "$_BIRTH",
          "comment": "Year only — the day is unknown"
        }
      ],
      "attributes": {}
    },
    "3": {
      "name": "Mary",
      "surname": "Fitzgerald",
      "surnameAssumed": "",
      "gender": "FEMALE",
      "information": "",
      "photos": [],
      "attachments": [],
      "events": [],
      "attributes": {}
    }
  },
  "mariages": [["1", "2", "3"]]
}

Identifying the format

Every file we write opens with a schema field naming this page:

"schema": "https://familybushes.com/format/explain/fbft?version=1.0.0"

It is there so a tool can recognise a .fbft file for what it is, and so a person who finds one years from now can follow the link and read what it means. Write it as the first key.

The ?version is the version of this specification, not of the file or the software that wrote it. It exists so revisions can be published later without ambiguity. Version 1.0.0 is the only one so far, so nothing needs to branch on it yet — and a file with no schema field at all was written before it existed and should be read as 1.0.0.

The field is a hint, not a gate: read a file that lacks it, and do not reject a version you do not recognise without looking first, since the format only ever gains optional fields.

The root object

Field Type Required Meaning
schema string (URL) no Identifies the file as .fbft and points at this page. Always written first, so a reader can recognise the format from the opening line. Absent in files written before it existed — treat a missing value as version 1.0.0. See Identifying the format.
id string (UUID) yes Identifies the tree. A fresh UUID is generated if missing.
createdAt string (ISO 8601) yes When the tree was created. Defaults to now if missing.
updatedAt string (ISO 8601) yes Last modification. Rewritten on every change.
name string yes Tree title. May be empty.
credits string yes Free-text attribution or author notes. May be empty.
events string[] yes Event types available in this tree, in display order. The twelve built-ins are always appended on read, so they can never be lost.
attributes string[] yes Names of the custom person fields this tree defines, in order.
attributesTypeSelectString object[] no Turns an attribute into a fixed-choice dropdown. Written as [] when unused. See below.
familyBushesWebsiteStyles object no Presentation only. Omitted entirely when never customised.
people object yes Map of person id → person object.
mariages array[] yes Family groups. Note the spelling — it is mariages, with one r, everywhere in the format.

A person

Keys of the people object are the person ids: numeric strings "1", "2", "3"… A new person takes max(existing ids) + 1. The id is the map key only — it never appears inside the person object.

Field Type If absent Meaning
name string Given name. Leave it empty when unknown; do not write a placeholder.
surname string "" Family name.
surnameAssumed string "" Maiden name, or a surname taken later in life.
gender "MALE" | "FEMALE" | "UNKNOWN" treated as unknown Drives the avatar and card colouring only.
information string "" Free-text biography or notes.
photos (number | string)[] [] File references — see below.
attachments (number | string)[] [] File references to documents.
events object[] [] Life events, sorted by dateStart.
attributes object no default is applied — read a missing value as {} Custom field name → value, both strings.
createdAt string (ISO 8601) absent Optional. Only present on people created after it was introduced.
updatedAt string (ISO 8601) absent Optional. Set when the person is edited.

An event

{
  "dateStart": "1912-09-01",
  "dateEnd": "1916-06-30",
  "type": "$_SCHOOL_4",
  "comment": "Studied literature",
  "latLon": [54.6872, 25.2797]
}
Field Type Meaning
dateStart string YYYY-MM-DD. When only the year is known, use YYYY-01-01 — the interface hides the -01-01 suffix and shows the year alone.
dateEnd string Optional, and only meaningful for types that span time. Never present on birth, death, marriage or divorce.
type string A built-in key (prefixed $_) or any custom string, which is displayed as-is.
comment string Free text. May be empty.
latLon [number, number] [latitude, longitude]. Omitted when there is no place — an absent key, not null.

Built-in event types

Key Label Supports dateEnd
$_BIRTH Was Born no
$_DEATH Passed Away no
$_MARRIED Got Married no
$_DIVORCED Got Divorced no
$_LIVED_AT Lived At yes
$_MOVED Relocated to yes
$_KINDERGARTEN Attended kindergarten yes
$_SCHOOL_1 Elementary school yes
$_SCHOOL_2 Middle school yes
$_SCHOOL_3 High school yes
$_SCHOOL_4 College / University yes
$_MILITARY_SERVICE Military Service yes

Relationships: the mariages array

There is no "parent" field on a person. Every relationship lives in mariages, where each entry is one family group:

[spouseA, spouseB, child1, child2, ...]
"mariages": [
  ["1", "2", "3", "4"],
  ["3", "7", "8"],
  [null, "9", "10"]
]
  • Positions 0 and 1 are the two spouses. Either may be null — that is a single-parent family, and it is how you record a parent you know nothing about. Both being null is not valid.
  • Position 2 onward are children, and their order is the display order.
  • A person may be a spouse in several entries — that is how remarriage is represented.
  • A person must appear as a child in at most one entry.
  • Every id must exist in people. Dangling ids are dropped.

So the example above reads: 1 and 2 are married and have children 3 and 4; child 3 later married 7 and had 8; and 9 is a single parent of 10.

Photos and attachments

A person's photos and attachments hold file references, and the file itself lives in the archive:

Reference Meaning
12 A positive number: the file is in the archive as images/12.jpg, keeping whatever extension the original file had.
-1 A negative number: the photo was hosted at a URL, and the export downloaded it and gave it a temporary id. The file is in the archive as images/-1.jpg. Treat it exactly like a positive id.
"https://…" A string: a remote URL that was not bundled, typically because it could not be downloaded. Load it over the network, or ignore it.

Ids are only unique within one archive. On import they are all renumbered, so never treat them as stable identity across files.

Attribute dropdowns

By default a custom attribute is free text. Listing it in attributesTypeSelectString turns it into a fixed set of choices:

"attributesTypeSelectString": [
  {
    "name": "Occupation",
    "options": [
      { "value": "Teacher", "color": "#1976d2" },
      { "value": "Farmer", "color": "#2e7d32" }
    ]
  }
]

name must match an entry in the root attributes array. color is optional, but it is all-or-nothing: either every option of an attribute has one, or none do.

Presentation styles

familyBushesWebsiteStyles is entirely optional and affects only how FamilyBushes.com draws the tree. No genealogical data lives here, and any reader is free to ignore the whole object. Older files may carry extra keys here that are no longer written; ignore anything you do not recognise.

Field Values Default
lineThickness "thin" | "medium" | "thick" "medium"
lineAnimation boolean false
straightLines boolean false
personCardType "photo" | "photo-and-text" | "text" "photo-and-text"
photoRadius "none" | "medium" | "round" "round"
nameRadius "none" | "medium" | "round" "medium"
treeTheme string "default"

Writing a compatible file

If you are producing .fbft from your own software:

  • The minimum viable file is a ZIP containing only family_tree.json with id, createdAt, updatedAt, name, credits, events, attributes, people and mariages. The images/ and attachments/ folders may be absent when nothing references them.
  • Unknown fields on a person survive a round trip through FamilyBushes.com — they are carried through untouched, so you can keep your own data on people.
  • Unknown fields at the root do not survive. The root is rebuilt from the known fields on every save, and anything else is silently dropped. Do not store your own data there.
  • Do not renumber people without reason. Ids are referenced by every entry in mariages.
  • Leave unknown names empty. Writing "Unknown" as a placeholder produces a tree full of people called Unknown.
  • The spelling is mariages. It has always been misspelled, and correcting it would break every file ever exported.

Sample files

Here are some examples.

Licence and attribution

Use the format. You do not need our permission, and you will never need a licence from us to read or write a .fbft file. There are no royalties and no conditions attached to implementing it. We would much rather this format spread than stay ours — a family tree that can only be opened by one company is a family tree nobody's grandchildren will be able to open.

The specification on this page is published under CC BY 4.0, so you are free to copy it, quote it, translate it, or paste chunks of it into your own documentation.

We ask two things — a request, not a restriction:

  • Credit familybushes.com somewhere your users can see it — an about page, a credits list, or a README is plenty.
  • Link to this page, the .fbft specification, so anyone holding one of these files can find out what it is.

Dropping a link like this anywhere in your interface covers both:

<a href="https://familybushes.com">Family tree format by Family Bushes</a>

Or, pointing straight at the specification so people can learn the format:

<a href="https://familybushes.com/format/explain/fbft/">.fbft format</a>

Plain text works just as well where a link cannot go — "Family tree format: familybushes.com" in an about box or a comment is completely fine.

If you are building something that reads or writes .fbft, we would genuinely like to hear about it — and if the spec is unclear or wrong somewhere, tell us and we will fix this page.

Exporting a .fbft file

  • Open your tree in the FamilyBushes.com editor.
  • Open the tree menu and choose Export.
  • A .fbft file is downloaded to your device. It includes your full tree and all photos.

Export at any time to keep a local backup. Your cloud copy is always safe in your account — the export is an extra portable copy you own completely.

Importing a .fbft file

  • Open the editor and sign in.
  • Click Import and select your .fbft file.
  • The tree loads with all people, events, and photos restored exactly as exported.

This makes .fbft the recommended format for sharing a complete tree copy with a family member — they get everything in one file.

.fbft vs. GEDCOM

GEDCOM is the industry standard for interoperability — use it when moving data between different genealogy programs. .fbft is the right choice when you want a complete, self-contained backup of everything in FamilyBushes.com including photos and map events.

Frequently Asked Questions

What does .fbft stand for?

FBFT stands for Family Bushes Family Tree. It is the native export format of FamilyBushes.com.

Is a .fbft file just a ZIP file?

Yes. You can rename it to .zip and open it with any standard archive tool. Inside you will find family_tree.json with all your tree data, and folders for photos and attachments.

Can I open a .fbft file without FamilyBushes.com?

You can extract the archive and read family_tree.json directly — it is standard JSON, indented with two spaces, and fully documented on this page. To view the interactive tree you need to import it into FamilyBushes.com.

Can I write my own .fbft exporter?

Yes. This page is the specification — the field tables above cover every key that is written, and the "Writing a compatible file" section lists the rules that matter. The format is a plain ZIP with a JSON file inside, so any language can produce one.

Why is "mariages" spelled that way?

It is a typo from the first version of the format that became permanent. Every file ever exported uses it, so it stays. Spell it with one r.

Does .fbft include my photos?

Yes. All photos and attachments you have added to people in your tree are embedded inside the archive under the images/ and attachments/ folders.

Can I share a .fbft file with a family member?

Yes. Send them the file and they can import it into their own FamilyBushes.com account. Their photos and events will all be there.

Can I import a .fbft file into other genealogy software?

Yes, if that software supports the .fbft spec — please check with that tool first. The format is open and documented on this page, and anyone is welcome to implement it.