Writing a Recipe Note
A Recipe Box recipe is a normal Markdown note with some frontmatter properties and two headings - one for ingredients, one for instructions. Everything else in the note is yours; Recipe Box only reads what it needs.
Minimal Example
---
type: recipe
servings: 4
prep: 10
cook: 20
diet: [vegetarian]
allergens: [dairy, gluten]
---
# Spaghetti Aglio e Olio
## Ingredients
- 1 lb spaghetti
- 1/2 cup olive oil
- 6 cloves garlic, thinly sliced
- 1/2 tsp red pepper flakes
- Fresh parsley, chopped #Herb
## Instructions
1. Boil the spaghetti for 9 minutes until al dente.
2. While the pasta cooks, gently warm the olive oil and garlic in a pan for 5 minutes.
3. Toss the drained pasta with the garlic oil, pepper flakes, and parsley.
## Notes
Additional sections below the instructions are shown in the recipe view. Use this area for notes, variations, extra images, etc.
Frontmatter Properties
All properties are optional unless noted. Property names are configurable in Settings → Recipe Box (the table below shows the defaults); Recipe Box also accepts a few common aliases for convenience.
| Property | Default key | Description |
|---|---|---|
| Type | type |
Set to your configured Recipe type value (default recipe) so Recipe Box recognizes the note as a recipe. |
| Image | image |
Hero image. Accepts a vault-relative path or a URL. Falls back to a placeholder if missing or unresolved. |
| Multiplier | multiplier |
Portion scale factor (default 1). Written automatically when you use the +/- stepper in the recipe view. |
| Servings | servings |
Number of servings the recipe makes as written. |
| Calories / Protein / Fat / Carbs | calories, protein, fat, carbs |
Nutrition values. Whether these represent the whole recipe or a single serving is controlled by Nutrition source in settings. |
| Prep time / Cook time | prepTime, cookTime |
In minutes. totalTime is computed from prepTime + cookTime if omitted. |
| Diet | diet |
A diet tag or list of tags (e.g. vegan, [vegan, gluten-free]). Shown as badges in the recipe view. |
| Allergens | configurable, default allergens |
CSV text or a YAML list of allergens (e.g. [dairy, tree nuts]). Compared against My allergens to show warnings. |
| Favorite | favorite |
true to mark the recipe as a favorite. |
| Last made | configurable, default lastMade |
Auto-stamped YYYY-MM-DD date. Derived from the cookHistory array whenever cook history is on. |
| Cooked count | cookedCount |
Auto-derived from the number of cook history entries whenever cook history is on. |
| Cook history | configurable, default cookHistory |
Array of {id, date, note} objects written by Recipe Box. Do not edit by hand - use the Cook History modal or tab. |
| Rating | configurable, default rating |
A 1-5 rating, shown as stars in the recipe view title. |
Source Link
If your frontmatter includes any of source, url, link, website, or recipe_url, Recipe Box shows it as a clickable link in the recipe view's mobile Info tab.
The Ingredients Section
Add a heading matching your Ingredients heading setting (default ## Ingredients), followed by a bullet list. Recipe Box extracts every list item under that heading, until the next heading of the same or higher level.
How an Ingredient Line Is Parsed
Each line is run through a parsing pipeline that extracts a quantity, unit, and ingredient name:
- List markers (
-,*,+,1.) are stripped. - Markdown emphasis (
*,_,**) is stripped. - Trailing tags (
#Tag, e.g.#Produce,#IgnoreIngredient) are pulled off and recorded separately. - Trailing notes in parentheses or after a comma are stripped from the name but kept in the raw line.
- Quantity is parsed from the start. Supported: whole numbers, decimals, fractions (
1/2,1 1/2), unicode fractions (½), and articles (a pinch of salt→ quantity 1). - Unit is normalized through a synonym table (
tbsp,tablespoon,tbs→ same unit;g,gram,grams→ same unit). - The remainder becomes the normalized ingredient name.
Examples:
| Line | Quantity | Unit | Name |
|---|---|---|---|
2 cups flour |
2 | cup | flour |
1/2 cup milk |
0.5 | cup | milk |
1 1/2 lbs ground beef |
1.5 | lb | ground beef |
a pinch of salt |
1 | - | pinch of salt |
Fresh parsley, chopped #Herb |
- | - | fresh parsley (tag: Herb) |
Excluding a Line from the Grocery List
Add #IgnoreIngredient as a trailing tag to keep the ingredient visible in the recipe but exclude it from grocery list generation:
- Salt and pepper, to taste #IgnoreIngredient
Tagging Ingredients for Category Grouping
Trailing #Tags double as category hints when Category source is set to "recipe tags" or "tag, then dictionary" - see Categorizing Grocery Items.
Subheadings within Ingredients
You can group ingredients under subheadings (e.g. ### For the sauce) - Recipe Box preserves these groups when displaying the recipe, though grocery list aggregation flattens them.
The Instructions Section
Add a heading matching your Instructions heading setting (default ## Instructions), followed by a numbered or bulleted list of steps.
- Steps can be grouped under subheadings - these are shown as section headers in the recipe view.
- Any duration phrase in a step is detected and turned into a clickable timer button - see Recipe Timers.
The Cook History Section
If Track cook history is enabled, Recipe Box manages a ## Cook History section in the note body. This section is fully generated by the plugin from the cookHistory frontmatter array - do not edit it by hand, as your changes will be overwritten on the next cook. Use the Cook History modal (desktop) or the Cook History tab (mobile) to add, edit, or delete entries.