Developer Info

MeadMate  ·  File formats and integration reference

MeadMate uses JSON for all its import and export formats. Everything described here is stable across minor versions — breaking changes increment the version field so the app can migrate automatically.

Remote Recipe Feed

MeadMate can import a collection of custom recipe templates from any public https:// URL that serves a JSON file. Go to Settings → Recipe Source URL in the app to point it at your feed.

Top-level structure

{
  "version": 1,
  "author": "Your Name (optional)",
  "templates": [ ... ]
}
FieldTypeDescription
versionnumberFeed schema version. Must be 1.
authorstring?Optional display name shown in the app.
templatesRecipeTemplate[]Array of recipe templates (see below).

Minimal example

{
  "version": 1,
  "author": "My Meadery",
  "templates": [
    {
      "id": "my-custom-mead",
      "name": "Summer Wildflower",
      "style": "Traditional Mead",
      "description": "A dry, floral traditional mead.",
      "batchType": "mead",
      "recipe": {
        "batchSizeLitres": 23,
        "honeyKg": 7,
        "honeySource": "Wildflower",
        "waterLitres": 17,
        "yeast": "Lalvin 71B",
        "nutrients": [],
        "otherIngredients": ["5 g Fermaid-O", "5 g DAP"]
      },
      "targetOG": 1.095,
      "targetFG": 1.005,
      "expectedABV": 11.8,
      "nutrientScheduleDays": [0, 2, 4, 7],
      "aerationScheduleDays": [0, 1, 2, 3, 4],
      "sgCheckDays": [7, 14, 21],
      "equipmentChecklistLabels": ["Fermenter", "Airlock", "Hydrometer"],
      "sanitisationChecklistLabels": ["Fermenter", "Airlock"]
    }
  ]
}

Full Backup / Export

From Settings → Export Backup, MeadMate produces a .json file you can share, archive, or import on another device. The format includes all batches, app settings, and equipment.

{
  "version": 2,
  "exportedAt": "2026-05-28T10:00:00.000Z",
  "batches": [ ... ],
  "settings": { ... },
  "equipment": [ ... ]
}
FieldTypeDescription
versionnumberBackup schema version. Current value: 2. Old backups with lower version numbers are automatically migrated on import.
exportedAtstringISO 8601 timestamp of when the backup was created.
batchesBatch[]Full batch records (see Batch fields below).
settingsPartial<AppSettings>?App settings — units, brewer name, notifications, etc. Optional.
equipmentEquipmentItem[]?Equipment inventory. Optional.

You can safely import a backup that is missing settings or equipment — the app keeps the existing values for any absent keys.

RecipeTemplate fields

FieldTypeDescription
idstringUnique kebab-case identifier, e.g. "my-mead". Must be unique within the feed.
namestringDisplay name shown in the template picker.
stylestringStyle label, e.g. "Traditional Mead", "Bochet".
descriptionstringShort description shown in the template card.
batchType"mead" | "beer" | "wash" | "cider"?Batch category. Defaults to "mead" if omitted.
recipeRecipeCore recipe object (see nested fields below).
targetOGnumberTarget original gravity, e.g. 1.095.
targetFGnumberTarget final gravity, e.g. 1.005.
expectedABVnumberExpected ABV %, e.g. 11.8.
nutrientScheduleDaysnumber[]Days (relative to brew date) on which nutrient additions are scheduled.
aerationScheduleDaysnumber[]Days on which aeration steps are scheduled.
sgCheckDaysnumber[]Days on which gravity checks are suggested.
equipmentChecklistLabelsstring[]Equipment items to include in the brew-day checklist.
sanitisationChecklistLabelsstring[]Items included in the sanitisation checklist.
minTargetAbvnumber?Minimum ABV for the target ABV slider (wash templates only).
maxTargetAbvnumber?Maximum ABV for the target ABV slider (wash templates only).
scaledIngredientsScaledIngredient[]?Defines volume-scaled primary fermentables (see below). Used for dynamic ingredient calculation when volume or ABV target changes.

recipe object

FieldTypeDescription
batchSizeLitresnumberReference batch volume in litres.
honeyKgnumberHoney quantity in kg. Use 0 for non-mead recipes.
honeySourcestringDescription of honey or primary fermentable.
waterLitresnumberWater quantity in litres.
yeaststringYeast name as free text, e.g. "Lalvin 71B".
yeastIdstring?Optional ID referencing the built-in yeast database (e.g. "lalvin-71b").
nutrientsNutrientAddition[]Structured nutrient additions (name, grams, day). May be an empty array.
otherIngredientsstring[]Free-text list of other ingredients not covered by structured fields.
waterSource"tap"|"spring"|"filtered"|"ro"|"distilled"?Optional water source hint.
adjunctsAdjunct[]?Spices, fruits, oak, or other timed additions.
fermTempCnumber?Planned fermentation temperature in °C.
nutrientRegimestring?Nutrient regime identifier: "fermaid-o", "fermaid-k-dap", "dap", "front-load", "tomato-paste", "generic", "none".
grainsGrainAddition[]?Grain bill (beer / partial-mash / BIAB only).
hopsHopAddition[]?Hop additions (beer only).
mashTempCnumber?Mash temperature in °C (beer only).
mashTimeMinnumber?Mash duration in minutes (beer only).
beerSubtypestring?Beer method: "kit", "extract", "partial-mash", "biab", "all-grain".
boilTimeMinnumber?Boil duration in minutes (beer only).
kitBrandstring?Kit brand name (kit beer only).
kitExtractKgnumber?Kit extract quantity in kg.

ScaledIngredient object

Used for wash and mead templates where ingredient amounts should scale with batch volume and/or target ABV. The app uses this to recalculate ingredient amounts on the new-batch screen.

FieldTypeDescription
namestringIngredient display name.
kgPerLitrenumberBase ratio: kg of this ingredient per litre of batch, at the reference volume. Set to 0 for supplemental ingredients whose quantity is derived from the remaining fermentable deficit.
fermentablePctnumberFraction of mass that is fermentable sugar (0–1), relative to pure sucrose (PPG 384). E.g. blackstrap molasses ≈ 0.55, honey ≈ 0.91, white sugar = 1.0.
optionalboolean?If true, this ingredient is shown as "if needed" and its quantity represents the supplemental sugar deficit.

Batch fields (key fields)

The full Batch object is large. The most important fields for reading a backup or building integrations are listed here.

FieldTypeDescription
idstringUnique batch identifier (nanoid).
namestringBatch name chosen by the brewer.
stylestringStyle label (e.g. "Traditional Mead").
batchType"mead"|"beer"|"wash"|"cider"Batch category.
statusBatchStatus"planning" | "brewing" | "fermenting" | "conditioning" | "bottled" | "complete"
brewDatestringISO 8601 brew date. For batches in "planning" status, this is the intended date and may be updated when brew day starts.
createdAtstringISO 8601 timestamp when the batch record was created.
recipeRecipeFull recipe object (same structure as RecipeTemplate.recipe).
targetOGnumberTarget original gravity.
actualOGnumber?Measured original gravity (recorded on brew day).
targetFGnumberTarget final gravity.
actualFGnumber?Measured final gravity.
gravityLogGravityReading[]Timestamped specific gravity and temperature readings.
nutrientScheduleScheduleItem[]Nutrient addition schedule items.
aerationScheduleScheduleItem[]Aeration schedule items.
customScheduleScheduleItem[]User-defined custom schedule items.
brewDayStepsBrewDayStep[]Step-by-step brew day checklist.
notesNote[]Timestamped brewer notes with tags.
agingLogAgingEntry[]Monthly conditioning / tasting entries.
photosBatchPhoto[]?Local photo URIs with captions and stage labels.
brewerstringBrewer name.
locationstringBrew location.
notificationsEnabledbooleanWhether push reminders are enabled for this batch.
fermentationCompletebooleanSet to true when the brewer marks fermentation done.
bottlingDatestring?ISO 8601 date of bottling.
bottleCountnumber?Number of bottles filled.
archivedboolean?Archived batches are hidden from the main list.
deletedAtstring?ISO 8601 timestamp. Present only for soft-deleted batches.
templateIdstring?ID of the RecipeTemplate used to create this batch.
ibunumber?Estimated IBU (beer batches only).
estimatedSRMnumber?Estimated SRM colour (beer batches only).
raptHydrometerIdstring?UUID of a linked RAPT Pill hydrometer.
carbonationStyle"still"|"sparkling"|"force-carbed"?Planned carbonation method.
pitchTempCnumber?Recorded pitching temperature in °C. Captured on brew day when cooling step is completed. Used to warn if pitched above the yeast's rated maximum temperature.
brewDayStepsBrewDayStep[]Primary brew day step checklist (see BrewDayStep below).
rackingDayStepsBrewDayStep[]Steps for the racking day workflow.
bottlingDayStepsBrewDayStep[]Steps for the bottling day workflow.
conditioningDayStepsBrewDayStep[]Steps for the conditioning day workflow.

BrewDayStep object

FieldTypeDescription
idstringUnique step ID.
ordernumberDisplay order (ascending).
titlestringStep heading.
instructionsstringFull step instructions.
tipsstring?Optional brewer tip shown below instructions.
notesstringBrewer notes entered during brew day.
completedbooleanWhether the step has been completed or skipped.
completedAtstring?ISO 8601 timestamp when the step was completed or skipped.
skippedboolean?If true, the step was skipped rather than completed normally. The completed flag will also be true.
hasInputboolean?Whether the step requires the brewer to enter a value (e.g. OG reading, pitching temperature).
inputLabelstring?Label for the input field, e.g. "Pitching temperature (°C)".
inputValuestring?Value entered by the brewer.

GravityReading object

FieldTypeDescription
idstringUnique reading ID.
datestringISO 8601 timestamp of the reading.
daynumberDay number relative to brew date (day 0 = brew day).
sgnumberSpecific gravity, e.g. 1.065.
tempCnumberSample temperature in °C at time of reading.
notesstringBrewer notes attached to this reading.
sampleMethod"tap"|"thief"|"ladle"?How the sample was taken.
readingType"og"|"fg"|"pre-boil"|"priming"|"dry-hop"?Semantic label for the reading.

Questions or corrections? meadmate@perpetualprototypes.io