The Recipe File
A recipe should be yours to keep.
.recipe is a simple, portable recipe file, designed so recipes can move between people and between apps.
What a Recipe File is
One file holds one recipe: its title, servings, times, structured ingredients and method, and where it came from. Optionally it carries one photograph of the dish. That is all.
- Portable. It is an ordinary JSON text file. Any app, on any platform, can read or write one with nothing more than a JSON parser.
- Yours. It is not tied to anyone's Aubergenie account, and it works without AI or an internet connection.
- Honest about people. It carries the recipe and its source, and nothing about the person sending it unless they choose to sign it (a name and up to three links, off by default): no account, no notes or ratings, no cooking history, no preferences, and no hidden camera or location data inside the photo.
- Forgiving. A reader that cannot show the photograph, or does not understand some optional detail, still opens the recipe. Nothing optional can make a recipe unreadable.
Aubergenie is the format's reference implementation and first app, not the owner of recipes as an idea. The format is published here so that other apps can read and write it too.
Opening one
With Aubergenie on your iPhone, iPad or Mac, opening a .recipe file, wherever it arrived, shows you the recipe in the app and offers to save it. Files, Messages and Mail show the dish on the file's icon. In Aubergenie, every recipe's share button offers Send Recipe, which makes one.
For developers
The format has two layers, each with its own specification and JSON Schema, both rendered here from the repository's current documents rather than maintained as a second copy.
- Recipe File specification · schema
- The envelope:
format,version, therecipe, and the optionalimage. How to name, size, read and refuse a file, and what must never be in one. - Canonical Recipe · schema 5.0 · schema v4
- The recipe inside: every field, its bounds, the cross-field rules, validation and migration from earlier versions. Version 5.0 is v4 plus optional additions, so every v4 recipe is a valid 5.0 recipe.
The smallest file looks like this:
{
"format" : "recipe",
"version" : 1,
"recipe" : {
"schemaVersion" : 4,
"id" : "b7c6d5e4-f3a2-4b1c-8d0e-9f8a7b6c5d4e",
"title" : "Cheese on Toast",
"servings" : 1,
"ingredients" : [ { "id" : "bread", "name" : "thick white bread", "quantity" : "2 slices" }, … ],
"method" : [ { "id" : "step-1", "text" : "Toast the bread on one side under the grill." }, … ],
"provenance" : { "origin" : "manual" }
}
}
Examples
Valid files, each exercising a different part of the format. They contain no personal data; the photographs are test images made for the purpose.
| File | Shows | Size |
|---|---|---|
| adapted.recipe | Someone's recipe, changed by the app, with the change recorded. | 2 KB |
| complex.recipe | Every optional field in use. | 6 KB |
| grouped.recipe | Ingredient and method sections. | 6 KB |
| photo.recipe | With the cook's own photograph. | 95 KB |
| provenance.recipe | A recipe copied from a website, with its source recorded. | 4 KB |
| reshared.recipe | Received from someone, then sent on. | 129 KB |
| simple.recipe | The smallest useful recipe: three ingredients, three steps, one timer. | 1 KB |
| timers.recipe | Several timers, each where the words state a duration. | 2 KB |
| website-photo.recipe | With a photograph credited to the website it came from. | 220 KB |
Versions
| Layer | Current | Changes |
|---|---|---|
| Recipe File (envelope) | v1.1, 2026-10-09 | Optional additions a reader can ignore keep version 1; anything else is version 2, which a v1 reader refuses rather than misreads. |
| Canonical Recipe | 5.0, 2026-10-18 | An optional addition a reader can ignore is a new minor version; any change to a field, value, bound or rule is a new schemaVersion with a migration from the last. |
Identifiers on a device: extension .recipe, Apple type com.nathan.chef.recipe, media type application/x.recipe+json (unregistered). A file is identified by its contents, never by its name; other programs have used .recipe for unrelated files.