Help & Reference

Recipe format

Recipes read as plain text. An export writes a readable .md file per recipe in the format below, Copy as text on a recipe page puts the same shape on your clipboard, and an import reads it back. You never type this format in the app — every recipe you add or change goes through the recipe editor, where the title, the amount, the prep note, and each substitute have their own box.

This text is a rendering of the recipe, not the recipe itself. An export puts the exact record beside it, as a .json file in the archive’s recipes/ folder, and that’s what an import reads — so the few shapes this format can’t spell (named at the end of this page) survive an export and come back intact.

So this page is the shape of the text, not a set of instructions for writing a recipe by hand. Read it to edit an exported file offline, to hand a recipe to another program, or to see what a paste will turn into. Paste a whole recipe into the title box of a blank new recipe and Mirepoix reads it with the rules below; text it can’t read as a recipe is offered to Mirabel to import instead.

A complete example

# Pancakes

Fluffy weekend pancakes.

Category: Breakfast
Tags: quick, weekend
Makes: 12 pancakes
Serves: 4
Time: 25 min
Active: 15 min

## Mix the batter.

- Flour (all-purpose), 190 g
- Milk, 240 g; or Buttermilk, 240 g
- Eggs, 2
- Butter, 2 tbsp: Melted.

Whisk dry ingredients. Add wet ingredients and stir until just combined.

## Cook the pancakes.

- Butter
- Blueberries, 1 cup; optional

Pour about 60 g of batter per pancake onto a hot buttered pan.
Cook until bubbles form and edges look set. Flip and cook 1 minute more.

---

Try adding blueberries or chocolate chips to the batter.

Title

The first non-blank line, marked with #. Required. It’s the editor’s Title box.

# Pancakes

Description

The editor’s description, written between the title and the first step. Description and front matter can appear in any order — a Serves: line can sit above the description, below it, or between its paragraphs. (In a recipe with no ## headers, prose before the first ingredient line counts as the description; prose after it becomes the step instructions.)

# Pancakes

Fluffy weekend pancakes.

Front matter

The recipe file’s counterpart to the editor’s Serves, Makes, Time (its total and active times), Category, Tags, and Source fields, written as lines before the first step. Each line is one key, a colon, at least one space, and a value — no leading whitespace. A field you left empty gets no line.

Everything in this section describes the recipe file’s grammar — what Mirepoix reads when you paste a recipe, import a link, or write Markdown by hand. The editor asks for the same facts as boxes instead: Serves and Makes are from and up to number boxes (Makes with an of what box for its noun), and Time is two boxes, total and active, each a number with a unit menu of min, hours, days and weeks. See Editing a recipe.

Line Example Notes
Category: Category: Breakfast One per recipe. On import it wins over the folder a file arrived in
Tags: Tags: quick, weekend Comma-separated. Each tag is lowercased; runs of whitespace become hyphens (slow cooker → slow-cooker)
Makes: Makes: 12 pancakes What the recipe produces. Requires a unit noun; Makes: 12 alone is rejected. Also takes a range — Makes: 12-16 cookies
Serves: Serves: 4 Number of servings. Used for per-serving nutrition. Also takes a range — Serves: 4-6
Time: Time: 2 weeks Total time from start to plated. Accepts minutes, hours, days, and weeks — alone or combined, as in 30 min, 1h, 2 hours 30 min, 2 days 4 hours, or 2 weeks for a long ferment. A bare number is read as minutes, so Time: 20 means 20 min
Active: Active: 30 min Hands-on portion of Time:. Requires Time: to be set; can’t exceed it. Takes the same units as Time:. A bare number is read as minutes, so Active: 15 means 15 min
Source: Source: [NYT Cooking](https://cooking.nytimes.com/…) Where the recipe came from — the editor’s Source and Source URL boxes joined into one line. A Markdown link, a plain web address, or just a name. Only http:// and https:// links are accepted. Up to 500 characters

Makes: and Serves: can appear together — Makes: 1 loaf paired with Serves: 12 is valid.

Both Makes: and Serves: also take a range in a recipe file — a hyphen, an en dash, or the word “to” all work (in the editor a range’s high end goes in the up to box): Serves: 4-6, Serves: 4–6, and Serves: 4 to 6 all mean the same thing, and the same three spellings work for Makes: 12-16 cookies. A range always reads low to high; Serves: 6-4 is rejected with a hint to swap it. Serves: 4-4 is rejected too, since a range needs two different numbers — write Serves: 4 instead. Makes: treats equal endpoints differently: Makes: 12-12 cookies isn’t rejected, it just counts as the single value Makes: 12 cookies. A range displays on the recipe page with an en dash (Serves 4–6, Makes 12–16 cookies), and both ends scale together when you scale the recipe.

Makes: also understands dozens, in a recipe file. (The editor’s Makes number box wants the count itself — type 12, not “1 dozen”.) Any number before dozen — whole, decimal, fraction, mixed, or a word like one or two — multiplies by 12: Makes: 1 dozen scones counts as 12 scones, Makes: 2 dozen cookies as 24, Makes: 1/2 dozen cookies as 6, Makes: 1 1/2 dozen eggs as 18, and Makes: one dozen as 12. A fraction character like ½ works after a whole number (Makes: 1½ dozen eggs), but it can’t come first — write Makes: 1/2 dozen, not Makes: ½ dozen. A dozen range works too, and either end can be a fraction — Makes: 1 1/2-2 dozen rolls counts as 18-24 rolls, and Makes: 1/2-1 dozen rolls as 6-12. Leave off the noun and it counts items — Makes: 1 dozen means 12 items. Makes: half dozen isn’t recognized.

A duration displays back on the recipe page in the largest tidy unit. An exact whole number of weeks shows as weeks (14 days reads as 2 weeks); anything else shows in days, hours, and minutes (15 days stays 15 days). The editor’s Time boxes work to a stricter rule, because each box holds one number with one unit: they show the largest unit that divides the saved time exactly, and minutes otherwise, so a saved Time: 2 hours shows there as 2 hours, and 90 minutes reads as 90 min there and 1 hour 30 min on the page. Weeks are the longest unit — months and years aren’t accepted, since their length varies.

Source

Source: takes exactly one of three shapes:

Source: [NYT Cooking](https://cooking.nytimes.com/…)   ← a name and an address
Source: https://cooking.nytimes.com/…                  ← an address alone
Source: Grandma's index card                           ← a name alone

It renders in two places. A byline sits just under the title and description — From followed by the name. At the bottom of the page, above the footer text, a sentence reads Read the original recipe from the name, with the original recipe as the link. Both links open in a new tab. When the recipe has a name and no address, both surfaces are plain text — From Grandma's index card at the top, From Grandma's index card. at the bottom. When it has an address alone, both surfaces use the site’s host as the name. A link address must start with http:// or https://; any other scheme is rejected.

Anything between the three shapes is rejected on the way in rather than filed away as a name — an address buried in a name (Source: NYT — https://cooking.nytimes.com/…) or a Markdown link broken by a typo. Write one of the three shapes and the error goes away. Import a recipe from a link and Mirepoix fills the two Source fields in for you, using the site’s address as the link and its host as the name.

Steps

Each step starts with a ## heading, and the heading text is the step’s title from the editor. Periods at the end (## Mix the batter.) are convention in the sample recipes, not a parser requirement.

## Mix the batter.

- Flour, 190 g
- Milk, 240 g

Whisk until smooth.

A recipe with ingredients but no ## headings is still valid — the whole body is read as a single implicit step. This text form can spell one other untitled step: a > @[...] cross-reference ahead of the recipe’s ingredients and instructions, above the first ## heading, which is read as an untitled step of its own. A description and any front matter may still come before it. Apart from those two, an ingredient or paragraph with no ## above it always joins the step before it, rather than starting a fresh one of its own.

The editor isn’t limited to that. Leaving a step’s title box blank there marks a deliberate, unnamed step break — wherever you put it, not just at the start — and typing an ingredient right after a paragraph starts one automatically. Both are legal to save, but this text form can’t spell any of it, and what a plain paste or an import does with it on the way back in depends on where the break sits. Put an unnamed step after a titled one and it folds into whatever came right before it in the text — the content survives, but the step break it marked doesn’t. Put one before the first heading instead and the outcome is worse: prose there is swept into the description rather than kept as a step, and an ingredient bullet there is rejected outright once the recipe uses any ## heading at all — the whole file fails to come back, not just the step break. An unnamed step holding nothing but a cross-reference is the exception: ahead of the recipe’s ingredients and instructions it comes back as the step you meant.

Automatic Celsius conversion

When a step, prep note, or the footer names a temperature in Fahrenheit — 350°F, 350 F, 350F, 350 deg F, 350 degrees F, 350 Fahrenheit, any capitalization — the app appends a computed Celsius equivalent, so Preheat oven to 350°F reads as Preheat oven to 350°F (~175 °C). A range converts as a range: 350-375°F becomes 350-375°F (~175–190 °C). The leading ~ marks it as an estimate, as it does on a printed automatic metric weight below — the app never changes the temperature the recipe states.

The conversion is skipped when the same paragraph already spells out an explicit Celsius temperature — 350°F (175°C), 180 C/350 F, 350 degrees F (175 degrees C) — so an already-converted recipe never ends up with two. A bare 350° with no F or C letter is left alone; the app only converts a temperature that says which scale it’s in.

Ingredients

Ingredient lines start with - . The shape is:

- Name, quantity: prep note

Those three are the editor’s three boxes on an ingredient row, written out on one line with a comma and a colon between them.

Mirepoix matches each line as a whole, not by its name alone. The amount and unit can settle which form of an ingredient you mean. In one recipe, Thyme, 2 sprigs is fresh thyme while Thyme, 1 tsp stays Thyme, the dried herb from the spice shelf. Likewise Black beans, 1 can (15 oz) is canned black beans. A prep note that offers options settles it too: the first option counts as the one you meant. So Thyme, 1 tsp: fresh or dried is fresh thyme, and Onion, 1 small: white or red is a white onion. Prep words like chopped or ground don’t count as an option. Neither do options given as examples (such as …, like …) or a note that says any will do (either …, … is fine, of choice). That match is what the grocery list, nutrition, your Pantry, and the menu’s Missing and Probably have lists all go by. The recipe page still shows each line as you wrote it.

A line Mirepoix can’t match with confidence goes by its name, and so does a substitute after ; or. When your kitchen switches to a substitute, the grocery list and nutrition both count the substitute.

Examples:

- Butter                          ← name only
- Flour (all-purpose), 190 g      ← name and quantity
- Eggs, 2                         ← name and count
- Eggs, 6 large                   ← count with a size word
- Eggs, 1-2                       ← name and range
- Milk, ½ cup                     ← unicode fraction
- Chickpeas, 1 can (15 oz)        ← alternate measure in parentheses
- Tomatoes, 2 cans, 14.5 oz each  ← package: count, kind, size of each
- Butter, 2 tbsp: Melted.         ← name, quantity, and prep note

Supported unicode fraction glyphs: ½ ⅓ ⅔ ¼ ¾ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞. Mixed forms like 1½, 1 1/2, or the hyphenated 1-1/2 work too. Ranges accept -, –, —, or − between numbers, and must read low to high. A backwards range like 3-2 is rejected with a hint to swap it. When you scale the recipe, both ends of a range scale — 1-2 at 2× becomes 2-4.

Units are flexible about how you write them. Capitalization doesn’t matter — 45 mL, 15 OZ, and 5 Tbsp all work. Common shorthand is understood: T for tablespoon and t for teaspoon (case tells them apart), c for cup, and # for pound. An abbreviation may carry a trailing period (15 oz., 2 tsp., fl. oz.), and British spellings work — litre, millilitre, gramme, kilogramme, and their families. Even gō, the Japanese rice-cooker cup, is recognized — with or without the macron, so plain go works too. It’s a rice measure rather than a general one: it reads and scales on any ingredient, but the gram estimate only appears where the catalog entry lists a gō portion, as the raw rice entries do. metric cup (250 mL) is its own unit; a bare cup is the US customary cup, as it has always been. Write the metric one out in full — metric cup or metric cups — since it has no abbreviation. It belongs in the quantity, after the comma; a comma-less line that leads with 1 metric cup is kept whole instead. A few near-misses aren’t accepted: tbs, tbl, and floz. For a unit Mirepoix knows, how you write it doesn’t change how the recipe page reads it back: 3 Tablespoons shows as 3 tbsp there. Your spelling is what’s kept here, in the editor, and in an export. A unit word Mirepoix doesn’t know is kept the same way and still scales, but the recipe page reads it in the singular at every count — 2 grandma-teacups shows as 2 grandma-teacup, and 2 medium cloves as 2 medium clove.

What sits after the number decides how the amount reads. A unit Mirepoix knows reads in the standard spelling at every factor — 3 Tablespoons is 3 tbsp at 1× and 6 tbsp at 2×. Two measures joined by plus add together into one number when they’re the same kind of measure — both volume, or both weight — and that total scales like any other amount: 1 cup plus 2 Tbsp reads 1⅛ cups at 1× and 2¼ cups at 2×. A comma before the plus reads the same way, so 1 cup, plus 2 Tbsp adds up too. But when what follows the number is really a second measurement that can’t be added in — it carries another number joined by + or an about, or a plus mixing volume and weight (1 cup plus 30 g) — the whole amount is kept as one phrase, in your own words, and doesn’t scale. 1/3 block + 1 Tbsp, about 3 oz reads ⅓ block + 1 Tbsp, about 3 oz whether you’re cooking one batch or four.

A quantity can carry a second, equivalent measure in parentheses at the end. Inside goes a clean number followed by one of three things: a unit (2 cups (250 g), 1 can (360 mL)), a portion word (1 cup (2 sticks), 1 box (2 packets)), or nothing at all — a bare count (100 g (2)). Units follow the same flexible spelling rules, so 1 can (360 mL) works. Both measures show together and scale as a pair — 1 cup (2 sticks) at 2× becomes 2 cups (4 sticks), and 2 cups (250 g) at 2× becomes 4 cups (500 g). The parenthetical is the one amount that shows the exact spelling you typed — it does so at 1×, and picks up the standard lowercase abbreviation once you scale. The main quantity uses the standard spelling at every factor when Mirepoix knows the unit; see Scaling. A range works on either side and scales on both ends — 2-3 tbsp (30-45 mL) grows at both the 2-3 and the 30-45 when you scale. Anything that isn’t a clean number plus a unit, portion, or count, like (about 15 oz), (8 oz each), or (16 Tbsp; 226 g), stays in the quantity as plain text and doesn’t scale.

A package is written as a count and a container word, a comma, then the size of one package and each: 2 cans, 14.5 oz each. At a count of exactly one, each is optional and an export leaves it off — 1 can, 15 oz. The ways recipe pages write a can’s size read as packages too, and in each the size is the size of one: a size before the container word (2 8-ounce cans, 1 13 oz. can, 1 15oz.can, 1x 400 g tin, One 28-ounce can, 1-2 15-ounce cans), a size in parentheses before it (6 (6-ounce) cans, 1 (12 oz.) box, 1 (28-ounce can)) — which may be a range (1 (14 to 16-ounce) bag) or carry its metric twin (2 (15 oz / 425g) cans, 1 (15-ounce; 425 g) can) — or a hyphenated size in parentheses after it (1 can (15-ounce)). A count of one, a or an, or no count at all as in 14 oz can, is one package. The container word is one like can, jar, box, bottle, bag, package, tin, tub, pouch, carton or container, and the size is in a weight or volume Mirepoix knows. A line in any of these shapes reads into the editor’s Package boxes, and an export or Copy as text writes it as 2 cans, 8 oz each. Anything else stays an ordinary amount: 2 cans, 15 oz doesn’t say whether the 15 oz is per can or in all, and 2 (15 oz) loaves stays as written, since a loaf isn’t a container word. 2 cans (28 oz), with no hyphen, is a second measure, as above — 28 oz for the two cans together.

A quantity with no number in it behaves the same way. Mirepoix keeps it as written, on any ingredient, and it doesn’t scale. Salt, to taste and Active dry yeast, q.b. both read back as typed — q.b. is short for quanto basta: as much as it takes. A parenthetical measure still works on such a line and still scales: Butter, a knob (30 g) reads a knob (60 g) at 2×, with your words untouched.

On a written line, a comma phrase after the parentheses goes to the prep note, so - Rice flour, 30 g (1/4 cup), for dusting keeps 30 g (1/4 cup) as its quantity and for dusting as its note. The phrase moves only when the part before the parentheses is in a unit Mirepoix knows or a portion word, and the phrase isn’t a measure of its own — 1 can (15 oz), about 425 g stays whole.

Automatic metric weight

When an amount is in a US measure — cups, tablespoons, teaspoons, fluid ounces, pints, quarts, gallons, ounces, or pounds — the app shows a metric weight in grams or kilograms with it. On the recipe page the weight follows the amount in a small outlined pill, so Flour (all-purpose), 2 cups reads 2 cups ≈250 g; a screen reader says “about 250 g”. When you print the recipe, it follows the amount in parentheses instead: 2 cups (~250 g). A line that lists a substitute after ; or shows it that way on screen too. The weight is computed from the ingredient catalog, by density for volumes and directly for ounces and pounds, and it scales with the recipe. Dash and pinch are recognized units too, converted directly at standard culinary approximations (a dash ≈ 0.6 g, a pinch ≈ 0.3 g) rather than by density — in practice the estimate rarely shows, since a single dash or pinch falls under the 10 g floor below.

The same weight appears with a portion the catalog knows by name — a stick of butter, a slice of cheese, a can of beans. The examples below show the printed form:

- Butter, 1⅔ sticks       → 1⅔ sticks (~190 g)
- American cheese, 2 slices → 2 slices (~55 g)
- Beans (any canned), 1 can → 1 can (~440 g)

And it appears with a bare count of an ingredient the catalog can weigh — produce you buy by the piece, eggs:

- Onion, 1   → 1 (~150 g)
- Eggs, 2    → 2 (~100 g)

A size word — small, medium, large, or extra large — can sit in the quantity next to the count, and the weight follows the size:

- Onion, 1 large  → 1 large (~150 g)
- Eggs, 6 large   → 6 large (~300 g)

A hyphenated spelling reads as the same size, so 1 medium-size, 1 medium-sized, and 2 extra-large weigh like 1 medium and 2 extra large.

The app uses that size’s weight when the catalog lists one. Extra large is the one size with a stand-in: with no extra-large weight listed, it uses the large weight. Otherwise the app falls back to the ingredient’s per-item weight if it has one — a small item with no small weight doesn’t borrow the medium one.

Like the US-measure case, these scale with the recipe — two sticks of butter weigh twice as much as one.

The ≈ on screen, or the leading ~ in print, marks it as an estimate the app worked out. That’s the difference from the alternate measure above: when you write your own measure in parentheses, like 2 cups (250 g), it shows as part of the amount, with no ≈ or ~ — it’s your figure, not an estimate the app computed. So you can always bake in your own conversion.

The weight appears only when it’s useful. It’s left off an amount already in metric (like g, kg, or ml), an ingredient that isn’t in the catalog, a portion or count the catalog can’t weigh, and any amount under about 10 grams — a teaspoon of vanilla or a single leaf of arugula isn’t worth weighing. And if you’ve written your own measure in parentheses, that wins and no estimate is added.

In this text form the colon and comma are reserved delimiters. The first colon starts the prep note; everything before it is the name and quantity, split at the first comma. (A comma after the colon stays in the prep note.) A comma inside parentheses doesn’t count, so Sugar (brown, packed), 150 g keeps its full name. A prep note with no quantity needs a colon — a comma puts the word in the quantity slot instead:

- Onion: diced      ← prep note
- Onion, diced      ← "diced" becomes the quantity

That’s a rule about written lines only. In the recipe editor the name, the amount, and the prep note each have their own box, and a comma or colon typed in the name box or the prep-note box is ordinary text.

The quantity is the exception, on a written line and in the editor’s amount box alike, and it works in your favor. A phrase after a comma in the quantity that isn’t a measure of its own — 1 1/2 cups, divided, 2/3 cup, plus more for drizzling, 2 cups, or to taste — moves to the prep note, and the quantity keeps the part before the comma. So - Sugar, 1 1/2 cups, divided in a recipe file reads as 1 1/2 cups of sugar with the prep note divided, just as typing 1 1/2 cups, divided in the amount box does when you save. If the line also has a prep note after a colon, the moved phrase joins it at the end: - Sugar, 1 1/2 cups, divided: sifted gets the prep note sifted, divided. The line then scales and joins the grocery list like any other, instead of carrying cups, divided as its unit. It only moves when the part before the comma reads as an amount — either in a unit Mirepoix knows or in a portion word of your own, so 2 large eggs, divided and 3 cloves, minced move too; something that names a second measurement after the comma, like 1/3 block + 1 Tbsp, about 3 oz or 2 cans, 15 oz, is kept whole as written. On a written line, a package such as 2 cans, 14.5 oz each is read as a package instead.

When two recipes share an ingredient, the grocery list combines the quantities. Two recipes calling for Flour, 190 g add up to 380 g on one line.

A line that leads with the amount

A line doesn’t have to lead with the name and a comma. A line that leads with the amount instead — - 1 cup sugar, - 1 cup parsley, chopped — is read the same way when Mirepoix can tell the amount from the name: it pulls the amount out and files the ingredient normally. This applies to a recipe file you import and to a whole recipe you paste in, not to the boxes in the editor.

When Mirepoix can’t tell them apart with confidence, the line falls back to the ordinary rules above, with one exception. A line with a comma splits there as usual, the words after the comma landing in the quantity slot. A comma-less line that’s only a number, a unit, and the ingredient still keeps its amount, and the rest of the line becomes the ingredient: - 1 tsp crushed red pepper reads as 1 tsp of crushed red pepper, with no prep note. A packing phrase still goes to the prep note, as it does on any line: - 1 cup crushed pineapple packed in juice reads as 1 cup of crushed pineapple with the prep note packed in juice. Any other comma-less line, such as one with a parenthetical after the ingredient, is kept whole, exactly as written. Sort it out in the recipe editor. A line kept whole sits in the ingredient box with the other boxes empty, and the row’s panel can then offer Split into …, which puts the amount, the ingredient, and any prep note in their own boxes with one tap (see Check ingredients). A line split at its comma already has words in the amount box, so move them into the right boxes yourself.

The standard Name, quantity: prep note form is unaffected by any of this — it’s already unambiguous, so Mirepoix uses it as written and never runs it through this extra reading step.

Alternatives and optional ingredients

An ingredient’s substitutes and its optional mark ride at the end of its line, as ; or and ; optional tails.

- Buttermilk, 1/2 cup; or Milk, 1/2 cup             ← a substitute
- Basil (fresh), 1/4 cup; optional                  ← skippable
- Butter, 2 tbsp; or Olive oil, 2 tbsp; optional    ← both

Each ; or tail takes the same Name, quantity shape the line itself uses, and the quantity is optional. One line takes up to eight substitutes. In a recipe file a substitute carries a name and an amount and nothing else. A prep note written after a colon belongs to the line as a whole:

- Butter, 2 tbsp; or Olive oil, 2 tbsp: For the pan.

In the editor a substitute can also carry a prep note of its own, for a version you prep differently. That note is kept in the recipe and in its .json export, but the text format has no way to write it, so an exported .md leaves it out.

; optional marks the whole line — every version of it — as one you can skip. It has to come last, after any ; or tails.

Nutrition counts the version your kitchen has picked: the ingredient written first, until someone swaps in a substitute. An optional line counts either way.

In the editor these are controls rather than punctuation, both in the panel an ingredient row’s three-dot button opens. Add a substitute adds an or line with its own ingredient, amount, unit, and prep note boxes; the Optional ingredient checkbox marks the line. See Adding & editing recipes for the row’s full set of controls.

A semicolon inside parentheses stays part of the name, the same protection a comma gets. Anything else after a semicolon is a parse error, with a hint to write or <ingredient>, <quantity> or optional. A line that leads with its amount doesn’t combine with these tails: on a line carrying ; or or ; optional, write Name, quantity on the line and on each substitute.

On the recipe page the line shows the version your kitchen has picked — the ingredient written first, until someone swaps — with its name and amount, and the other versions sit under it, quieter and lowercased:

Buttermilk ½ cup
or milk, ½ cup

Kitchen members see each other version as a chip instead, swap to milk, ½ cup ⇄. Tap it to switch your kitchen to that version: the line then reads Milk ½ cup, with swap to buttermilk, ½ cup ⇄ under it. A line with more than one substitute gets a chip for each, so you can pick any of them directly. A printed recipe lists the other versions as text.

Every amount on the line scales with the recipe — the picked version’s and the others’ — and so does the weight estimate, which belongs to the picked version. A line marked ; optional carries an optional pill after its name. The prep note shown under the line is the one belonging to the version currently picked — the line’s own while it’s the ingredient written first, that substitute’s once you’ve swapped to it, and none at all when the substitute has no note.

Which version your kitchen shops for is the same choice wherever you make it — on the recipe page, on Groceries, or on Pantry. It never changes the recipe text, and editing the recipe keeps it as long as the line still offers the version you picked.

Cross-references

A step can pull in another recipe’s steps. The embedded form sits inside a step on its own line:

## Make the sauce.

> @[Simple Tomato Sauce]

A bare @[Recipe Title] in prose — step text or footer — renders as a clickable link without embedding. The editor writes the embedded form for you from a step’s + Cross-reference button; the full syntax, including multipliers and prep notes, is on Cross-references.

Prose takes ordinary Markdown links — step instructions, ingredient and cross-reference prep notes, and the footer.

Adapted from [Bake with Jack](https://bakewithjack.co.uk).

A link address must be a web address (http:// or https://), a mailto: address, or an ftp:// address; any other scheme is rejected. A rejected link renders as the plain text you typed, brackets and all — the words stay, so fix the address and the link comes back. That covers a hand-typed path to another recipe, too: use @[Recipe Title], which links a recipe by title and isn’t affected.

Emphasis, lists, and other marks

The same prose takes the rest of Markdown’s ordinary marks: *italic* and **bold**, a ## heading, a - or 1. list, a > quotation, backticks or a four-space indent for text left exactly as written, and ![A pie](https://…) for a picture at a web address. Quotes, dashes, and ellipses are smartened as the recipe renders. The editor lists the whole set behind its Formatting link, and that list is the same one this format is read with.

A table, ~~strikethrough~~, and raw HTML are not read, and print exactly as typed. A fenced code block (triple backticks) is read partway: the text stays but the backticks don’t, so it prints in a plain code style instead of as written. A footnote’s marker stays but the note it points to is dropped — not a way to add a note Mirepoix will show.

Scalable numbers

A * after a number in step instructions, ingredient prep notes, cross-reference prep notes, or the footer marks it as scalable. When a reader changes the serving count, marked numbers update.

Divide the dough into 8* equal pieces.

- Eggs, 2: Beat with a fork until uniform, about 30* seconds.

> @[Pizza Dough], 2: Make a double batch — about 90* minutes total.

---

Yields about 12* cookies.

Numerals, fractions, and English number words from zero* through twelve* are all scalable. Type the * in the editor box the number lives in. See Scaling for what scales automatically without *.

The first --- on its own line ends the recipe body and starts the footer — the editor’s footer box. Everything after it is rendered as Markdown — good for notes, tips, and variations. Any link in it follows the rules under Links. Where the recipe came from has its own Source: line in the front matter, which renders just above the footer text.

That rule belongs to the text form, not to the editor. Type a --- on its own line into a step’s Instructions box and it renders as a thematic break, the way any other Markdown in that box does — nothing reads your instructions back as a recipe file, so nothing turns it into a footer. Reading the text is where the rule bites: paste a recipe whose instructions contain a ---, or hand-edit an exported .md that has one, and that line starts the footer and swallows everything after it. An export’s recipes/ copy is unaffected, so a --- in your instructions survives export and re-import.

---

A good basic pancake. Pairs well with @[Maple Syrup].

Things to know

See also

Last updated October 15, 2026