A free, offline, open-source family tree app for Android. Ask how any two people are related and it names the relationship, in English or Hindi, and draws the line between them.
No account. No server. No analytics. Nothing leaves your phone unless you send it.
Chart · Compact · Hindi kinship terms
Every family tree app assumes you know who everybody is. Real families do not work that way. There is always a great-grandmother whose name nobody wrote down, an uncle nobody can place, and a cousin whose exact relationship starts an argument at every wedding.
f-tree is built around those gaps instead of around a form you have to fill in completely.
| 🕳️ A person needs no name. | A blank person is a valid unknown person — the grandfather's brother nobody remembers — and can be named years later without disturbing a single relationship. |
| 🔗 A graph, not a tree. | Multiple spouses, children across marriages, half-siblings, adoption, step-relations and unknown ancestors all work without special cases. |
| ❓ "How are we related?" | Pick any two people. f-tree names it — first cousin once removed, great-great-grandfather — and lists every person the line runs through. It walks marriages as well as blood, because "my wife's mother" is what people actually ask. |
| 🇮🇳 Hindi kinship, done properly. | Hindi has five words where English has "uncle". Your mother's brother is मामा, your father's younger brother चाचा, his wife चाची. Not a translation — a different model of the family. |
| 📴 No account, no cloud. | No login, no backend, no sync, no analytics. Every permission the app declares exists only for the opt-in updater or for nearby sharing, and neither touches the network until you ask it to. |
| 🤝 Sharing that merges, never overwrites. | Send one branch as a small file over WhatsApp. The recipient imports it and it merges into their tree. The worst an import can do is add a duplicate you can then merge. |
| 📶 Nearby sharing. | Send a tree straight to a device you can see, over the Wi-Fi you are already on — no account, no server, nothing in between. Both screens show the same six digits, so you know it went to the right one. |
| 📖 A family book, made to send. | A designed, printable PDF — a cover, everyone in the family, a page of facts, a generation at a time, and an index to find yourself in. Made on your own phone or laptop, in Heirloom or a Diwali edition. Read more → |
Download the latest APK — Android 8.0 (Oreo) or newer, about 2 MB.
It is not on the Play Store, so Android will ask you to allow installing from your browser or file manager once. The website walks through it with the exact wording your phone shows, and publishes the SHA-256 of every release so you can check what you downloaded:
sha256sum f-tree-0.7.0.apkOnce installed, updates can happen in place — an opt-in setting checks GitHub for a newer release and installs it over the running copy, so upgrading keeps your tree instead of costing an export and an import. It is off until you switch it on, and it verifies the download's hash, package name and signing certificate before it installs anything. See Updating in place.
The desktop app
builds a family tree on a laptop, or opens a .ftree you already have: add people, connect them,
edit and delete, undo, and save back to the same file. A generation is a row, ancestors at the top.
Windows gets an installer; on Linux take the .deb. It does not need the Android app — a tree can
start here.
Three ways to read it — the chart, a compact reading that stays legible at any size, and the people index. It answers how two people are related, in English and in हिन्दी. It imports a relative's file, matching people rather than duplicating them, and it adds and frames photographs. Nearby sharing sends a tree straight to another device on the same Wi-Fi, phone or laptop, with the same six-digit check as the Android app. Nothing leaves the machine except when you send it that way.
The browser viewer opens an exported .ftree
and draws the whole family at once — every generation, and the people no relationship reaches.
There is a sample family loaded on the page. Your file is never uploaded; it is read in the tab.
git clone https://github.com/thisisankit27/f-tree.git
cd f-tree
./gradlew assembleDebugJDK 17+ and the Android SDK. Full instructions in docs/building.md.
|
Three views of one family Compact reads the family as text — generations down the page, a tap to walk to anybody, no pinching and nothing that needs a steady hand. Chart draws the same people with pan, zoom and tap-to-recentre. Everyone draws the entire tree at once. Compact and Chart share one centre, so switching never loses your place. A relation finder that answers real questions The word for it and the chain of people it runs through — which is the form that can also answer the relationships English has no word for. On a real 148-person tree it names 55% of all 21,756 ordered pairs; the rest read their answer off the chain. Faces on the chart Every card carries a portrait — the square you framed, or a coloured initial when there is no photograph. Photographs can be switched off on a very large tree without a single card moving. A family book, ready to send A designed PDF — a cover built from the family's own shape, everyone in it, a page of facts, a generation at a time, and an index so anyone can find themselves. Made entirely on the device, in the evergreen Heirloom template or a Diwali edition. Full design → |
Export and import as one A documented ZIP. Every field optional, unknown keys ignored, so a file written by a future release still opens. Format spec → Share one person's family Tap somebody and send their household — their partner, their children, everyone below them. The people above them stay behind. That is also how you graft a relative's branch onto yours: import it, then marry the two families together with one relationship. Share an answer as a picture A relationship can be sent as a card rather than a file, because chat apps quietly drop the message that comes with a document but show it beside an image. Send it straight to a device you can see Nearby sharing puts a tree on a device across the table — no export, no chat app, no cloud drive. Both screens show the same six digits, or scan a QR to skip typing them. Wi-Fi only, encrypted, off until you open the screen, and it carries a file exactly the way sharing already did: the receiver reviews it in the same import screen, matching duplicates rather than overwriting anything. Accessible by design The canvas charts cannot be read by a screen reader, so Compact exists: the same family, composed rather than painted, at any text size, spoken aloud, one tap per person. |
| Question | Answer |
|---|---|
| Where is my family tree stored? | On your phone, in the app's own storage. Nowhere else. |
| Is there an account or a login? | No. There is nothing to log in to. |
| Is there a server? | No. There is no backend to have one with. |
| Analytics, crash reporting, ads? | None, in the app or on the website. |
| Can it send my tree to another device? | Only nearby sharing, and only when you start it: to a device you can see, on the network you are already on, with a code both screens show, and no account or server in between. |
| What permissions does it ask for? | Six. Two are for the opt-in updater — INTERNET, REQUEST_INSTALL_PACKAGES. Three are for nearby sharing — ACCESS_WIFI_STATE, CHANGE_WIFI_MULTICAST_STATE, ACCESS_NETWORK_STATE — and do nothing until you open its screen. None of those five ever prompts. The sixth, CAMERA, is the only one that does, and only if you choose to scan a nearby code; typing it works everywhere the camera would. |
| Does the browser viewer upload my file? | No. It is read in the tab. |
| Can I get my data out? | Any time, as a .ftree — a ZIP with plain JSON in it. Documented here. |
update/ and nearby/ are the only code in the app that opens a socket, each kept in its own
package so that claim is checkable by reading rather than by trust. Nearby sharing does nothing
until one of its two screens is open, and it sends a tree only after you pick a device and its
owner accepts.
| ❓ FAQ | Where the data lives, what leaves the phone, how merging behaves, and what happens when you update |
| 🏗️ Architecture | How the graph, the chart layout, the kinship rules and the photo pipeline work — and why |
📦 The .ftree format |
The file spec, what travels when you share a branch, and the merge rules |
| 🗂️ Data model | Tables, fields and migrations |
| 🇮🇳 Hindi kinship | The term list and the rules that pick between them |
| 📖 The family book | The designed PDF: one composer, two painters, the Book format and the template rules |
| 💳 The policy switch | The one place the app asks what a reader may do — gate presentation, never data |
| 🔤 Fonts | Literata, JetBrains Mono, and the book's Rozha One and Mukta — and why they are bundled |
| 🔨 Building & releasing | Build, run, test, sign, tag, ship |
| 🌐 Site & browser viewer | The landing page and the dependency-free .ftree reader |
| 🖥️ Desktop app | Windows and Linux, one viewer in two shells, and why its releases are pre-releases |
| 🤝 Contributing | Good first issues, project shape, and how a change gets reviewed |
| 🔒 Security policy | How to report a vulnerability |
| 📜 Changelog | What changed in each release |
Contributions are very welcome, and the project is small enough to hold in your head in an afternoon. The parts most worth reasoning about — chart layout, kinship rules, duplicate matching — are pure functions over plain data, so they are tested on the JVM without a device and are the easiest place to start.
Especially wanted:
- 🌏 Kinship terms in another language. Bengali, Marathi, Gujarati, Punjabi, Tamil and Telugu are structurally covered by the existing path model — each is a word list plus a small rules file. This needs a native speaker more than it needs an Android developer.
- 🐛 Real families that break the layout. The chart is tested against invented awkward cases; actual ones are better.
- ♿ Accessibility testing with TalkBack and large text sizes.
- 📝 Documentation and translation of anything on this page.
Start with CONTRIBUTING.md and the good first issues.
- GEDCOM import/export. A large format for a lightweight app; the documented
.ftreeschema covers sharing between users of this app. - Transactional undo of an import. A backup file the user can re-import covers the same need far more simply, and cannot itself go wrong.
- A Hindi interface. Only the family words change with the setting. Translating the buttons and error messages is a separate job needing a fluent reviewer, and a half-translated app reads worse than an English one.
- Cloud sync. The absence is the feature: no account, no server, nothing stored or relayed between your devices while you are not looking. Nearby sharing is not this — there is still no account and no server; it carries one file, from a device you can see to a device you can see, and then stops. Nothing is reconciled, and the receiver reviews what arrives exactly like any other import.
MIT — use it, change it, ship it; just keep the copyright notice.
The bundled fonts (Literata, JetBrains Mono, and the family book's Rozha One and Mukta) are
separately licensed under the SIL Open Font Licence 1.1. Their licence texts ship inside the app
under assets/licenses/ and are surfaced on its About screen. See docs/fonts.md
for which font does what, and why the book's fonts are static rather than variable.
Everything the app can do with your own tree is free, and stays free. f-tree has one piece of groundwork for a feature that might one day cost money — a single policy switch that today always answers "yes, all of it" — and the rule it is built to keep is written down plainly so nobody ever has to relearn it under pressure: gate presentation, never data. Exporting, importing and reading your own tree, in full, stay free forever; a premium tier, if one is ever built, could only ever apply to a designed extra like a book template or its attribution line. See docs/premium.md.
If f-tree is useful to you — or if the idea of a family tree with room for the people nobody can name is one you want to exist — a star helps other families find it.
Built by Ankit Srivastava · ftree.vibethroughcode.com

