Coffee recipes, in plain text

For people who weigh their coffee and tweak their recipes.

Write your recipe in a few simple lines. Brewlang turns it into a brew sheet you can scale, share and follow step by step.

What you type
my-v60.brew
1---
2title: My V60
3---
4
5@V60 15g 250g 94°C
650g
7150g
8250g
What you get
V60 · Pour-over

My V60

Dose
15 g
Water
250 g
Temp
94 °C
Ratio
1:16.7
  1. 01
    Pour to 50 g
    +50 g
    50 g
  2. 02
    Pour to 150 g
    +100 g
    150 g
  3. 03
    Pour to 250 g
    +100 g
    250 g

That's a whole recipe. Add details when you need them ↓

Why Brewlang

A recipe you can read, and a sheet you can use.

Write it like you'd jot it down

No forms, no JSON. Just text.

0:45when
150gpour to
spiralhow

One format, every brewer

V60 to siphon, every recipe reads the same.

@V60 15g 250g 94°C
V60 · Pour-over

Scale in one tap

Change the dose, every pour follows.

1@V60 15g 250g 94°C
20:00 50g
30:45 150g
41:30 250g

Your units, their units

Written in grams and °C, read in ounces and °F.

Dose
15 g
Water
250 g
Temp
94 °C

Errors that help

It catches what doesn't add up, and tells you how to fix it.

1@V60 15g 250g 94°C
20:00 50g
30:45 240g
1:10The header announces 250g but the pours end at 240g. Make them match

Brew with

Your brewer is already there.

  • V60
  • Chemex
  • Origami
  • Kalita
  • AeroPress
  • French press
  • Switch
  • Clever
  • Siphon
  • +and moreMelitta, UFO, Phin, Pulsar, or any brewer you name.

Real recipes

Five brewers, one way to write them.

Pick a recipe, then edit the code: the brew sheet follows.

switch-hybrid.breweditable
  • No problems
Switch · Hybrid

Switch hybrid, two temperatures by Tetsu Kasuya

Dose
20 g
Water
300 g
Temp
90 °C
Ratio
1:15

Before you start

  • Close the valve
  1. 0:00
    Pour to 40–50 g
    +40–50 gbloom
    just enough to cover the coffee (immersion)
    40–50 g
  2. 0:40
    Open the valve
  3. 0:40
    Pour to 120 g
    +80–70 g
    percolation
    120 g
  4. 1:30
    Pour to 200 g
    +80 g
    percolation
    200 g
  5. 2:10
    Close the valve
  6. ·
    Water at 70–80 °C
  7. 2:10
    Pour to 300 g
    +100 g
    immersion
    300 g
  8. 2:45
    Open the valve

Aim to finish at3:30

Developers

Building a coffee app? Brewlang is open source.

GitHub

Parse, check, export

A TypeScript library with no runtime dependencies. Diagnostics never throw.

import { check, toJson } from "brewlang";

const { recipe, diagnostics } =
  check(source);
const json = toJson(recipe);
The library →

Drop a card in any page

The <brew-recipe> element renders the sheet, styled with plain CSS variables.

import "@brewlang/render/element";

<brew-recipe
  src="v60.brew"
  scale="1.5">
</brew-recipe>
Recipe cards →

For AI agents

Point your assistant to llms.txt: the whole language on one page, so it writes valid recipes.

brewlang.github.io/llms.txt

Write your next recipe in plain text.