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": [ ... ]
}
| Field | Type | Description |
| version | number | Feed schema version. Must be 1. |
| author | string? | Optional display name shown in the app. |
| templates | RecipeTemplate[] | 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": [ ... ]
}
| Field | Type | Description |
| version | number | Backup schema version. Current value: 2. Old backups with lower version numbers are automatically migrated on import. |
| exportedAt | string | ISO 8601 timestamp of when the backup was created. |
| batches | Batch[] | Full batch records (see Batch fields below). |
| settings | Partial<AppSettings>? | App settings — units, brewer name, notifications, etc. Optional. |
| equipment | EquipmentItem[]? | 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
| Field | Type | Description |
| id | string | Unique kebab-case identifier, e.g. "my-mead". Must be unique within the feed. |
| name | string | Display name shown in the template picker. |
| style | string | Style label, e.g. "Traditional Mead", "Bochet". |
| description | string | Short description shown in the template card. |
| batchType | "mead" | "beer" | "wash" | "cider"? | Batch category. Defaults to "mead" if omitted. |
| recipe | Recipe | Core recipe object (see nested fields below). |
| targetOG | number | Target original gravity, e.g. 1.095. |
| targetFG | number | Target final gravity, e.g. 1.005. |
| expectedABV | number | Expected ABV %, e.g. 11.8. |
| nutrientScheduleDays | number[] | Days (relative to brew date) on which nutrient additions are scheduled. |
| aerationScheduleDays | number[] | Days on which aeration steps are scheduled. |
| sgCheckDays | number[] | Days on which gravity checks are suggested. |
| equipmentChecklistLabels | string[] | Equipment items to include in the brew-day checklist. |
| sanitisationChecklistLabels | string[] | Items included in the sanitisation checklist. |
| minTargetAbv | number? | Minimum ABV for the target ABV slider (wash templates only). |
| maxTargetAbv | number? | Maximum ABV for the target ABV slider (wash templates only). |
| scaledIngredients | ScaledIngredient[]? | Defines volume-scaled primary fermentables (see below). Used for dynamic ingredient calculation when volume or ABV target changes. |
recipe object
| Field | Type | Description |
| batchSizeLitres | number | Reference batch volume in litres. |
| honeyKg | number | Honey quantity in kg. Use 0 for non-mead recipes. |
| honeySource | string | Description of honey or primary fermentable. |
| waterLitres | number | Water quantity in litres. |
| yeast | string | Yeast name as free text, e.g. "Lalvin 71B". |
| yeastId | string? | Optional ID referencing the built-in yeast database (e.g. "lalvin-71b"). |
| nutrients | NutrientAddition[] | Structured nutrient additions (name, grams, day). May be an empty array. |
| otherIngredients | string[] | Free-text list of other ingredients not covered by structured fields. |
| waterSource | "tap"|"spring"|"filtered"|"ro"|"distilled"? | Optional water source hint. |
| adjuncts | Adjunct[]? | Spices, fruits, oak, or other timed additions. |
| fermTempC | number? | Planned fermentation temperature in °C. |
| nutrientRegime | string? | Nutrient regime identifier: "fermaid-o", "fermaid-k-dap", "dap", "front-load", "tomato-paste", "generic", "none". |
| grains | GrainAddition[]? | Grain bill (beer / partial-mash / BIAB only). |
| hops | HopAddition[]? | Hop additions (beer only). |
| mashTempC | number? | Mash temperature in °C (beer only). |
| mashTimeMin | number? | Mash duration in minutes (beer only). |
| beerSubtype | string? | Beer method: "kit", "extract", "partial-mash", "biab", "all-grain". |
| boilTimeMin | number? | Boil duration in minutes (beer only). |
| kitBrand | string? | Kit brand name (kit beer only). |
| kitExtractKg | number? | 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.
| Field | Type | Description |
| name | string | Ingredient display name. |
| kgPerLitre | number | Base 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. |
| fermentablePct | number | Fraction 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. |
| optional | boolean? | 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.
| Field | Type | Description |
| id | string | Unique batch identifier (nanoid). |
| name | string | Batch name chosen by the brewer. |
| style | string | Style label (e.g. "Traditional Mead"). |
| batchType | "mead"|"beer"|"wash"|"cider" | Batch category. |
| status | BatchStatus | "planning" | "brewing" | "fermenting" | "conditioning" | "bottled" | "complete" |
| brewDate | string | ISO 8601 brew date. For batches in "planning" status, this is the intended date and may be updated when brew day starts. |
| createdAt | string | ISO 8601 timestamp when the batch record was created. |
| recipe | Recipe | Full recipe object (same structure as RecipeTemplate.recipe). |
| targetOG | number | Target original gravity. |
| actualOG | number? | Measured original gravity (recorded on brew day). |
| targetFG | number | Target final gravity. |
| actualFG | number? | Measured final gravity. |
| gravityLog | GravityReading[] | Timestamped specific gravity and temperature readings. |
| nutrientSchedule | ScheduleItem[] | Nutrient addition schedule items. |
| aerationSchedule | ScheduleItem[] | Aeration schedule items. |
| customSchedule | ScheduleItem[] | User-defined custom schedule items. |
| brewDaySteps | BrewDayStep[] | Step-by-step brew day checklist. |
| notes | Note[] | Timestamped brewer notes with tags. |
| agingLog | AgingEntry[] | Monthly conditioning / tasting entries. |
| photos | BatchPhoto[]? | Local photo URIs with captions and stage labels. |
| brewer | string | Brewer name. |
| location | string | Brew location. |
| notificationsEnabled | boolean | Whether push reminders are enabled for this batch. |
| fermentationComplete | boolean | Set to true when the brewer marks fermentation done. |
| bottlingDate | string? | ISO 8601 date of bottling. |
| bottleCount | number? | Number of bottles filled. |
| archived | boolean? | Archived batches are hidden from the main list. |
| deletedAt | string? | ISO 8601 timestamp. Present only for soft-deleted batches. |
| templateId | string? | ID of the RecipeTemplate used to create this batch. |
| ibu | number? | Estimated IBU (beer batches only). |
| estimatedSRM | number? | Estimated SRM colour (beer batches only). |
| raptHydrometerId | string? | UUID of a linked RAPT Pill hydrometer. |
| carbonationStyle | "still"|"sparkling"|"force-carbed"? | Planned carbonation method. |
| pitchTempC | number? | 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. |
| brewDaySteps | BrewDayStep[] | Primary brew day step checklist (see BrewDayStep below). |
| rackingDaySteps | BrewDayStep[] | Steps for the racking day workflow. |
| bottlingDaySteps | BrewDayStep[] | Steps for the bottling day workflow. |
| conditioningDaySteps | BrewDayStep[] | Steps for the conditioning day workflow. |
BrewDayStep object
| Field | Type | Description |
| id | string | Unique step ID. |
| order | number | Display order (ascending). |
| title | string | Step heading. |
| instructions | string | Full step instructions. |
| tips | string? | Optional brewer tip shown below instructions. |
| notes | string | Brewer notes entered during brew day. |
| completed | boolean | Whether the step has been completed or skipped. |
| completedAt | string? | ISO 8601 timestamp when the step was completed or skipped. |
| skipped | boolean? | If true, the step was skipped rather than completed normally. The completed flag will also be true. |
| hasInput | boolean? | Whether the step requires the brewer to enter a value (e.g. OG reading, pitching temperature). |
| inputLabel | string? | Label for the input field, e.g. "Pitching temperature (°C)". |
| inputValue | string? | Value entered by the brewer. |
GravityReading object
| Field | Type | Description |
| id | string | Unique reading ID. |
| date | string | ISO 8601 timestamp of the reading. |
| day | number | Day number relative to brew date (day 0 = brew day). |
| sg | number | Specific gravity, e.g. 1.065. |
| tempC | number | Sample temperature in °C at time of reading. |
| notes | string | Brewer 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