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, the recipe, and the optional image. 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.

FileShowsSize
adapted.recipeSomeone's recipe, changed by the app, with the change recorded.2 KB
complex.recipeEvery optional field in use.6 KB
grouped.recipeIngredient and method sections.6 KB
photo.recipeWith the cook's own photograph.95 KB
provenance.recipeA recipe copied from a website, with its source recorded.4 KB
reshared.recipeReceived from someone, then sent on.129 KB
simple.recipeThe smallest useful recipe: three ingredients, three steps, one timer.1 KB
timers.recipeSeveral timers, each where the words state a duration.2 KB
website-photo.recipeWith a photograph credited to the website it came from.220 KB

Versions

LayerCurrentChanges
Recipe File (envelope)v1.1, 2026-10-09Optional additions a reader can ignore keep version 1; anything else is version 2, which a v1 reader refuses rather than misreads.
Canonical Recipe5.0, 2026-10-18An 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.