1. Overview
Recipes is built on the philosophy of open, future-proof data. Every recipe in your collection is stored as an ordinary, human-readable .md (Markdown) text file.
There are no proprietary databases, vendor locks, or binary formats. If you ever stop using Recipes, your recipes remain exactly as they were: clean, organised Markdown files that you can open in any text editor, note-taking app, or browser.
The app adds what a text editor can't: a three-column library, recipe-aware search, servings that rescale ingredients as you change them, a grocery list that combines duplicates, and integration with Spotlight, Siri and Shortcuts.
Search
Search looks at recipe titles and the full text of every recipe. Every word you type has to appear, in any order and anywhere in the recipe, so chicken lemon finds a recipe that mentions both. Title matches are listed first under Top Hits, then recipes that match in their text. Inside a folder, choose Current Folder (including its subfolders) or All Recipes.
You can edit your recipe files directly in Obsidian, VS Code, Bear, iA Writer, or standard TextEdit. Changes reflect in Recipes instantly.
Available in nine languages: British English, American English, French, German, Spanish, Greek, Japanese, Korean and Simplified Chinese. Recipes written in any of these are parsed correctly too — not just the interface.
Recipes written in unsupported languages will still display cleanly in the app, but the interface won’t localise to that language, and servings scaling or ingredient parsing may have issues if number and measurement conventions differ.
2. Storage & Sync
By default, Recipes creates a dedicated folder in your iCloud Drive (or local documents folder):
iCloud Drive/Recipes/
├── Breakfast/
│ └── Shakshuka.md
├── Mains/
│ ├── Pasta/
│ │ ├── Carbonara.md
│ │ └── Creamy Pasta with Burnt Aubergine.md
│ └── Curry/
└── Desserts/
Folders in the app are folders on disk. Creating a folder creates a real directory; moving a recipe moves the file. Nesting is unlimited, and you can freely organise, rename and nest folders in Finder or Files.
You can choose a different location in Settings → Recipe Location → Change Location…, and go back with Reset to Default. On macOS that can be any folder on your Mac or an external drive; on iPhone and iPad, any folder you can reach in Files.
Opening files from elsewhere
Open a .md file with Recipes from Files or Finder and it opens straight away if it's already in your library. If it lives somewhere else, Recipes asks before copying it in — it never edits a file outside your library. If the name is already taken, the copy is numbered (Pasta 2.md) and the confirmation tells you so.
Syncing
Sync is iCloud's, not ours. Edit a recipe on your Mac and the change reaches your iPad the way any iCloud Drive file does.
If a recipe changes on another device while you have it open, the app quietly adopts the newer version — unless you have unsaved edits. In that case, your typing is never interrupted, and on save your edits are written to a new sibling file named Recipe Name (conflicted copy from iPhone/iPad/Mac).md (numbered if there's more than one), the same way iCloud itself resolves a conflict. The other device's version is left untouched at the original file name, so nothing is silently overwritten or lost.
A recipe's file name is its title in the library, and renaming in the app renames the file. Names must be unique within a folder: creating or renaming refuses a name that's taken rather than silently changing it, so you always know what happened. Moving something onto a name that's taken asks you to Keep Both (the moved item is numbered, like Finder), Replace, or Stop. Duplicating a recipe names the copy Pasta copy.
3. Recipe Format
The minimum is a file with some text in it. Everything below is optional, and the app degrades gracefully — a recipe with no frontmatter and no headings still opens and displays.
Below the frontmatter block, standard Markdown defines the structured sections:
- Summary / description: any freeform text below the frontmatter and above the first heading.
- An ingredients heading (in your language — see below): a bulleted list of ingredients.
- A numbered list, anywhere in the file: read as the recipe's steps. Recipes finds it by the numbering itself, not by the heading above it, so
## Recipe,## Instructions,## Methodor no heading at all all work identically. - Any other heading (e.g.
## Notes): rendered as normal Markdown — a nice convention, not something Recipes parses specially.
The ingredients heading
Recipes looks for an ingredients heading to know which lines are ingredients. Any of these work, at any heading level:
| Language | Recognised headings |
|---|---|
| English | Ingredients, Ingredient List, What you'll need |
| Italian | Ingredienti |
| French | Ingrédients |
| German | Zutaten |
| Spanish | Ingredientes |
| Greek | Συστατικά |
| Japanese | 材料 |
| Korean | 재료 |
| Chinese | 食材, 配料 |
Everything from that heading until the next same-or-higher heading is treated as ingredients. Sub-headings below it (### Filling, ### Topping) stay part of the list, so you can group ingredients by component.
Writing ingredients
Two styles both work:
- Chicken thighs (900g, diced) ← name first, quantity in brackets
- 900g chicken thighs, diced ← quantity first
Anything after a comma inside the brackets is treated as a preparation note. It's always kept in the recipe, and it's ignored when the grocery list combines duplicates — "diced" isn't something you buy.
900g and 900 g are read identically, and both scale correctly. Write whichever you prefer, and feel free to mix the two across a collection — Recipes doesn't normalise your files, so what you type is what stays on disk.
4. YAML Frontmatter
Frontmatter goes at the very top of the file, fenced by --- lines. Every key is optional.
---
title: Chocolate Chip Cookies
servings: 24
prep: 15 mins
cook: 12 mins
source: https://example.com/cookies
tags: [baking, dessert, quick]
---
| Key | Type | Description |
|---|---|---|
title |
String | The display name of the recipe. If omitted, the first # heading is used, then the file name. |
servings |
Number | Enables the servings stepper. Must be between 1 and 100. Without frontmatter, a line such as Serves 6 in the recipe is read instead. |
prep or prep time |
String | Preparation time (e.g. 15 mins, 1h). Both prep and prep time are recognised. |
cook or cook time |
String | Cooking or baking time (e.g. 45m). Both cook and cook time are recognised. |
type |
String | Recipe (or unset) shows the servings stepper. Any other value, such as Note, hides it. |
source or sources |
URL / Array | One link, or several: source: [url1, url2], or one per line as a YAML list (- url). |
cookbook or book |
String | A book reference, e.g. Salt Fat Acid Heat (p112). |
author or by |
String | The recipe's author. |
tags |
Array / String | Searchable tags (e.g. [pasta, quick, vegan]), or one per line as a YAML list. |
notes or note |
String | Free text. |
Keys in your language
Frontmatter keys are recognised in all supported languages, so a Greek recipe can use Greek keys throughout:
---
τίτλος: Μακαρόνια του Φούρνου
μερίδες: 12
προετοιμασία: 1h
μαγείρεμα: 45m
---
The same applies to title / titre / titel / título / タイトル / 제목 / 标题, and to every other key in the table above.
When you create a recipe with a colon or line break in its name — New Recipe, Create Recipe, or Import Recipe — Recipes uses the file name instead of writing that title into frontmatter, to avoid a broken title: ... line. An existing recipe's frontmatter can have a colon in its title with no issue; if you want one on a brand-new recipe, add it by hand afterwards, or put it in the # heading.
5. Servings Scaling
If a recipe declares servings in its frontmatter, the preview shows a stepper. A recipe without frontmatter gets one too if its text states the servings — Serves 6, Makes 8 buns, Für 4 Personen, 4人分 and so on, in every supported language. Changing it rescales every ingredient quantity on screen and in the grocery list. It's a view, not an edit: the file itself isn't changed.
Scaling is deliberately conservative: it only changes numbers it is confident about, and leaves everything else exactly as written.
What scales
| Written as | At 2× | Notes |
|---|---|---|
400 ml | 800 ml | Plain quantity and unit |
1½ cups | 3 cups | Mixed numbers and fraction glyphs |
1/2 tsp | 1 tsp | Written fractions |
2 cloves | 4 cloves | Countable units |
1-1.5 kg | 2-3 kg | Ranges |
4 to 6 sheets | 8 to 12 sheets | Word ranges |
100+50g | 200+100g | Sums stay as sums (the grocery list totals them) |
~500 g | ~1000 g | Approximate markers preserved |
half a leek | 1 leek | Word quantities |
a dozen eggs | 24 eggs | Dozens |
800g / 2 cans | 1600g / 4 cans | Both halves move together |
225 g / 1 large | 450 g / 2 large | Size words don't pluralise |
大さじ2 | 大さじ4 | Japanese, Korean and Chinese measure words stay in place |
半小勺 | 1小勺 | Number words in Chinese, Japanese and Korean |
Compound quantities — two ways of describing the same amount, separated by / or ; — scale on both sides. 800g / 2 cans is one thing measured two ways, so both halves move together.
What doesn't scale
Salt to taste,少々and similar — there's no number, so there's nothing to scale.- Quantities in the instructions. Only the ingredients section is rescaled. A step saying "add 100 ml of the water" is left alone, because it refers back to an ingredient already counted.
- Anything ambiguous. If a quantity can't be parsed confidently, the line is left untouched rather than guessed at.
Plurals and units
Units pluralise as the number changes — 1 clove becomes 2 cloves, and back again when you scale down. Abbreviations are never inflected: g stays g, never gs. Size words like large and medium never pluralise either.
For non-Latin scripts, pluralisation is skipped entirely rather than applying English grammar to a Japanese or Greek word.
2,5 is read as two and a half, as written in French, German and Greek recipes. Recipe quantities essentially never use a comma as a thousands separator, so this isn't ambiguous in practice.
6. Grocery Lists
Export Grocery List turns the current recipe's ingredients into a shopping list, scaled to whatever servings you've selected.
It differs from the ingredients list in three ways:
- Duplicates are combined. A recipe using butter in the filling and again in the topping gives you one line with the total.
- Preparation notes don't split an ingredient.
Garlic (2 cloves, minced)andGarlic (1 clove, sliced)become one line,Garlic (3 cloves)— you're buying garlic, not minced garlic. An ingredient that only appears once keeps its original wording. - Sums are totalled.
Sugar (100+50g)becomesSugar (150g).
Things that genuinely differ aren't merged: ground cinnamon and cinnamon sticks stay separate lines, because they're different things to buy. Different units are never added together either — 2 cloves and 1 tsp of garlic stay as two lines.
7. Settings
| Setting | Options | What it does |
|---|---|---|
| Appearance | System, Light, Dark | Overrides the system appearance for this app only. |
| Sidebar density | Compact, Default, Spacious | Controls row height in the library. |
| Recipe Location | Any folder | Where recipes are stored. Defaults to iCloud Drive. Reset to Default switches back. |
| Format with Apple Intelligence | On / Off | Controls whether importing or formatting a recipe uses the on-device model. Only shown on hardware that supports Apple Intelligence. |
| Restore Sample Recipes | All, Vegetarian, Vegan | Adds the sample recipes matching your preference to a Sample Recipes folder, and creates any starter folders you don't have. Nothing is overwritten: if a sample with the same name is already there, the new copy is numbered (Tzatziki 2). |
The edit/preview mode isn't a setting — the app simply reopens in whichever you last used.
Format with Apple Intelligence
Paste or type a recipe in however rough a shape it's in, and formatting organises it into ingredients, instructions, and (where the text states them) servings, prep time, cook time, source and cookbook fields.
- Entirely on-device. Your recipe never leaves your device to be formatted.
- Won't invent information. If your text doesn't state a servings count, a time, or a source, formatting leaves that field out rather than guessing.
- Never overwrites what you've written. Reformatting a recipe that already has frontmatter fills in gaps — a field you haven't already specified — but never replaces a value you've entered yourself. Your intro text, your own headings,
###ingredient sub-sections and any custom frontmatter keys are kept. - Won't add ingredients. Anything the model suggests that isn't in your text is dropped.
- Tidies as it goes. Temperatures get a proper degree sign (
180ºC→180°C), times are normalised, and a one-line## Notessection moves into thenotesfield if you don't already have one.
Use the Format with Apple Intelligence button while editing a recipe. You can keep typing while it works; if the recipe changes before it finishes, the result is discarded rather than overwriting your edits. One recipe formats at a time, and a single Undo puts the recipe back as it was.
Formatting works for recipes in English, French, German, Spanish, Italian, Portuguese, Japanese, Korean and Chinese. Greek recipes display and scale normally, but can't be formatted yet.
8. Keyboard Shortcuts & Gestures
Keyboard shortcuts work with any hardware keyboard on iPad and iPhone, not just on Mac.
| Shortcut | Action | Platforms |
|---|---|---|
⌘N | New recipe | All |
⇧⌘N | New folder | All |
⌥⌘N | Open in new window | macOS |
⌘F | Search | All |
⌘R | Toggle edit / preview | All |
⌘E | Export grocery list | All |
⌥⌘S | Toggle sidebar | macOS |
⌘⌦ | Delete recipe | macOS |
⇧⌘. | Increase servings | All |
⇧⌘, | Decrease servings | All |
⌃⌘F | Toggle full screen (iPhone: landscape only) | iPad, iPhone |
⌘, | Settings | macOS |
⎋ | Cancel / dismiss | All |
Gestures
- Swipe a row in the library for quick actions.
- Long press a row for the full context menu — rename, duplicate, move, share, delete.
- Pinch out on a recipe (iPad) to expand it full screen; pinch in to return to the split view.
- Two-finger swipe on a trackpad (Mac and iPad) to hide or show the sidebar.
- Drag a recipe onto a folder to move it. Several can be dragged at once.
9. Apple Shortcuts
Recipes provides ten actions to the Shortcuts app, on all platforms.
| Action | Input | Returns |
|---|---|---|
| Open Recipe | A recipe, optionally a view (Editor or Preview) | — |
| Open a Random Recipe | Optionally a folder, optionally including subfolders, optionally a view | The recipe it picked |
| Get Grocery List | A recipe, optionally a servings count | The list, as text |
| Open Folder | A folder | — |
| Create Folder | A name, optionally a destination | The new folder |
| Create Recipe | A name, optionally a destination | The new recipe |
| Get Recipes in Folder | Optionally a folder, optionally including subfolders | The recipes |
| Read Recipe Instructions | A recipe | The steps, as text — also spoken aloud |
| Get Recipe Step | A recipe and a step number | The step, as text — also spoken aloud |
| Import Recipe | A photo or text, optionally formatted with Apple Intelligence (keeping your wording or rewriting it for clarity), a title, and a destination | The new recipe |
Notes
- Only the Open actions bring the app forward. The others run silently, so a Shortcut that files a recipe away doesn't drag you into the app on the way past.
- To create something and then open it, chain the actions: put Create Recipe first, then Open Recipe and pass the result through. The create actions return what they made precisely so this works.
- Destination is optional. Leave it blank and the item goes to the top level of your library.
- Duplicate names are refused, not silently renamed, so a Shortcut that would have overwritten something tells you instead.
- Import Recipe reads photos, including a two-page cookbook spread. Wording defaults to keeping the recipe's own words (fixing only obvious mistakes); Rewrite for clarity rephrases the steps without changing any ingredient, amount, time or temperature. If handwriting can't be read reliably, the recipe is imported as-is rather than guessed at.
A Shortcut built on your Mac works on your iPad, because recipes are identified by their position in your library rather than by a file path that differs per device. Renaming or moving a recipe does break a Shortcut pinned to it — reselect the recipe to fix it.
10. Siri & Spotlight
Six actions can be run by voice. Include the app's name — Siri uses it to know which app you mean.
| Action | Say |
|---|---|
| Open a random recipe | "Open a random recipe in Recipes" "Pick a random recipe in Recipes" "Surprise me with a Recipes recipe" "What should I cook in Recipes" |
| Open a specific recipe | "Open Chocolate Chip Cookies in Recipes" "Show me Chocolate Chip Cookies in Recipes" "Open a recipe in Recipes" — Siri will ask which |
| Get a grocery list | "Get a grocery list for Chocolate Chip Cookies in Recipes" "What do I need to buy for Chocolate Chip Cookies in Recipes" |
| Create a recipe | "Create a recipe in Recipes" — Siri will ask for a name "Add a recipe to Recipes" |
| Read a recipe's instructions | "Read me the instructions for Chocolate Chip Cookies in Recipes" "How do I make Chocolate Chip Cookies in Recipes" "What are the steps for Chocolate Chip Cookies in Recipes" |
| Get a specific step | "Read me a step from Chocolate Chip Cookies in Recipes" — Siri will ask which step |
Notes
- You don't need the exact title. Spoken names are matched the same way the in-app search field works, so "chocolate cookies" finds Chocolate Chip Cookies.
- On macOS, Spotlight is the more reliable way to run these. Press
⌘Spaceand start typing the phrase — the action appears as a runnable result. - With a recipe open (iOS 27), you can ask Siri about what's on screen without naming it.
- The first time you ask, iOS may request permission to use the app's shortcuts with Siri. Say yes, then repeat the request.
Spotlight
Recipes are indexed for system search. Search a recipe name from the Home Screen, Lock Screen or ⌘Space on Mac, and tap the result to open it directly.
Partial words work: searching chocolate finds Chocolate Chip Cookies. Newly created recipes are indexed automatically — no need to relaunch.
11. External Editors
If you already use Obsidian for personal knowledge management, you can point your Recipes folder directly inside your Obsidian vault (or open your Recipes folder as a dedicated vault).
Recipes respects standard Markdown syntax. Only .md files appear in the library — canvas files, attachments and hidden folders such as .obsidian are ignored.
12. Example Recipe
Here is a complete, copy-pasteable Markdown recipe template:
---
title: Horiatiki (Greek Salad)
servings: 4
prep time: 25m
notes: This has no right to be so delicious. An attempt to replicate the nostalgic village salads you'd order by default when dining in Greece
---
# Horiatiki (Greek Salad)
## Ingredients
- Cucumber (1, peeled, halved and chopped)
- Tomatoes (6, chopped into large chunks)
- Red onion (1, finely sliced)
- Green pepper (1, deseeded and chopped)
- Kalamata olives (to taste)
- Feta (half a block)
- Red wine vinegar (2 tbsp, optional)
- Greek oregano (1 tsp)
- Olive oil (3 tbsp)
- Salt (to taste)
## Recipe
1. Soak the red onion in a bowl of water for 15 minutes
2. Meanwhile, mix the cucumber and tomatoes then season generously with salt. Let them sit for a few minutes. You can drain the juice, or leave it to form part of the dressing, depending on your preference
3. Drain the red onion, then add to the cucumber and tomatoes along with the green pepper and olives
4. In a separate bowl, whisk the olive oil with the salt, oregano and optional vinegar
5. Pour over the salad and toss well
6. Place feta on top and sprinkle more oregano over the top. The feta should be broken up upon serving