KinVault: A Family Tree That Never Leaves Your Phone

A privacy-first, fully offline family tree app — no accounts, no server, no analytics.

Case study · July 2026

The tree canvas — four generations of a family, all stored locally
The tree canvas — four generations of a family, all stored locally.

At a glance

Context

Family lineage is serious business in Vietnamese culture. Death anniversaries are observed by name, generation, every year. Kinship carries its own hierarchy — the language itself has different words for an older sibling versus a younger one, a paternal aunt versus a maternal one. Extended families run to four generations and dozens of people, and everyone is expected to know how everyone else is related.

That makes a family tree an unusually sensitive dataset. It isn't just names — it's birthdays, relationships, and photos of an entire extended family, including people who were never asked and never consented to having an account made about them. Most family-tree apps I looked at handle that by putting it behind a sign-up flow and a subscription, on a server that isn't yours.

The one design rule

KinVault has exactly one founding constraint: the data never leaves the phone. No accounts. No server. No analytics.

Everything else in the app derives from that sentence. The tree lives in a SQLite database on the device. Backups are files the user holds, not a cloud sync. Nothing phones home — the app has no idea who's using it, and it isn't built to find out.

Product walkthrough

Starting from zero, onboarding walks through a quick family builder rather than an empty canvas and a blinking cursor.

Onboarding's quick family builder — starting a tree from zero
Onboarding's quick family builder — starting a tree from zero.

From the full tree, tapping a person drops into a focused view centered on them — parents, spouse, and children, one hop out, without the rest of the tree crowding the screen.

Focused view — navigating the relationships around one person
Focused view — navigating the relationships around one person.

Each person has a detail screen: name, dates, and — where it applies — a lifespan and a "Deceased" badge, plus a free-form notes field for anything else worth recording.

Member detail — a person's lifespan, deceased status, and notes
Member detail — a person's lifespan, deceased status, and notes.

Adding someone new means placing them relative to a person who already exists — marriage, child, sibling — through a relationship sheet, rather than dropping a floating node onto a canvas. (The kinship model underneath is where the Vietnamese-specific structure lives; more on that below.)

The add relationship sheet — entering kinship relative to an existing person
The add relationship sheet — entering kinship relative to an existing person.

For a family of any size, scrolling the tree to find one person stops being practical, so there's a flat, searchable list alongside the canvas.

List and search — filtering the member list by typing Ph
List and search — filtering the member list by typing "Ph". (The emulator used for these screenshots can't type Vietnamese diacritics, hence the plain search term.)

Export turns the whole tree into a file the user keeps — the mechanism behind both sharing a tree and backing it up.

Export and share — your data leaves the app only as a file you keep
Export and share — your data leaves the app only as a file you keep.

And settings is deliberately short, because there's no account to manage and no cloud sync to configure.

Settings — the no-account, no-cloud surface
Settings — the no-account, no-cloud surface.

Decisions worth telling

Drawing the tree by hand

The tree canvas is a custom-built Flutter canvas, not an off-the-shelf tree widget. Genealogy layouts have to handle re-marriages, adopted children, and generations of uneven width without the diagram turning into spaghetti, and they need pinch-to-zoom and pan that feel native on a phone. Off-the-shelf tree widgets are built for org charts, where everyone has exactly one parent — that assumption breaks the moment a family tree has a marriage line. Owning the rendering meant owning the layout algorithm too, but it's the only way the canvas stays readable as a family grows past a dozen people.

Modeling Vietnamese kinship

Underneath the canvas is a relationship model built for how Vietnamese families actually describe themselves: marriages, biological children, in-law flags, birth order within a generation, and generation number as a first-class field rather than something inferred at render time. Birth order and generation matter because they're how relationships get named and addressed in Vietnamese — the data model has to carry that information, not just a parent-child edge.

Backup without a cloud

Backup is export and import as plain files the user owns — no cloud account required to protect a tree someone has spent hours building. It isn't theoretical: every screenshot in this article was seeded into the app through that exact export/import flow, on a fresh install, which is as good a proof as I have that restore actually works.

Charging without tracking

The free tier caps a tree at 15 people — enough for most households, tight for a real extended family. Past that, the app offers a paid unlock built on RevenueCat, worded plainly in the dialog: "Unlock with a one-time purchase of $9.99" for unlimited family members, PNG tree export, and priority support, with "No subscriptions. Pay once, yours forever." It's a one-time purchase, not a subscription, and the purchase call is the only time the app talks to a server at all — and only because the user chose to buy something.

The premium unlock sheet — a one-time purchase, no subscription
The premium unlock sheet — a one-time purchase, no subscription.

What shipped

KinVault is live on Google Play, v1.1.3. There's no ad network, no marketing push, and no download counter I'm proud enough of to print — I built it for my own family first, and everything since has been polish driven by actually using it.

What I'd do next: an iOS release, since half the family I built this for carries an iPhone, and richer export formats — right now export is built for restoring into KinVault itself, not for opening in a spreadsheet or a genealogy tool someone already uses.