Memories in a format that outlives us.
A family archive is a century-scale object. No company — including this one — should be a single point of failure for it. So every DearestEllie archive exports, free and at any time, into a documented open format that any person can read in a text editor and any programmer can parse in an afternoon.
This page is the public specification. It is not a promise in a blog post; the same definition is executable code in our repository, shared by the export writer and its tests, so the published format and the shipped format cannot drift apart.
The shape
An export is a single JSON document, downloaded as .omf.json — or as .omf.zip, which adds a media/ folder of original files, the specification itself, an offline viewer, and a checksum file. (The compound extension is deliberate: the final .json/.zip keeps every tool working with no special software, while .omf. names the Open Memory Format.) The document has named sections, each a plain array of records:
| SECTION | WHAT IT HOLDS |
|---|---|
| manifest | Format version, generation time, archive identity, and per-section record counts. |
| archive | Who this archive is about — name, dates as the family wrote them, introduction. |
| chapters | The chapters a life was organized into. |
| stories | Memories: stories, ordinary days, lessons, quotes, places. |
| recipes | Memories filed as recipes. |
| timeline | Dated moments, best-effort chronological. Approximate dates stay approximate. |
| letters | Letters written to the family. |
| photos | Photo entries and their captions. |
| voices | Voice notes and videos (display metadata; originals are listed in mediaFiles). |
| thingsLoved | The things they loved. |
| detailCards | The small true things — sayings, songs, places, habits. |
| privateNotes | Steward-only notes. Present only in a steward's own export. |
| contributors | Who helped remember. |
| media | Display metadata for every photo, audio, and video item. |
| mediaFiles | Every original file's storage key, SHA-256 checksum, and byte size — the verification manifest. |
| readme | A human-readable README explaining how to read the export without us. |
Guarantees
- Versioned. Every document carries its format version (currently 1.1), as major.minor: a minor bump only ever adds fields, and readers accept any 1.x; a breaking change bumps the major version and an incompatible document is rejected loudly, never misread.
- Self-identifying. The manifest's $format field names the format's canonical URL, so a file that has lost its name — or outlived its host — still says what it is.
- Verifiable. The mediaFiles manifest lists each original's SHA-256 checksum and size, and the zip export ships a checksums.txt covering every file, so a family can prove their copies are intact with standard tools (sha256sum -c), with no help from us.
- Readable offline, forever. Every zip export carries its own README, the full specification (SPEC.md), and viewer.html — a self-contained page that reads the archive in any browser with no internet at all.
- Faithful. Dates are kept as the family wrote them — an approximate year stays approximate. Nothing is invented to fill a field.
- Round-trippable. The same format restores into a new archive (see the Restore page), which is also how a family would leave one host for another — or arrive here from one.
- Free, always. Export is a guaranteed capability of every archive, protected by the commons' guiding principles. It is never gated by payment, and never will be.
For implementers
Genealogy tools, digital-preservation projects, and memorial services are welcome to read and write this format — that is the point of an open format. The public specification repository (github.com/DearestEllie/open-memory-format, CC0) carries the normative spec, a JSON Schema, a conformance suite, dependency-free reference implementations in TypeScript and Python, and field crosswalks to GEDCOM, Dublin Core, and schema.org. Two notes worth knowing:
- Treat unknown fields as data to preserve, not errors — families annotate their memories in ways schemas don't predict, and a version bump may add fields before it removes any.
- The
privateNotessection exists only in a steward's own export. If you build an import, keep its contents as private as we do.