What your result means
Final pH is where the milk ends up once your acid has been swallowed by its buffering — milk resists pH change hard, which is why a splash of lemon barely moves it. Curdles below is the threshold for the temperature you set, and it is the number most kitchen advice leaves out: it climbs steeply with heat.
Put those two together and you get the verdict. Drained curd estimates what you would actually lift out of the pan, wet: the casein, plus the fat it traps, plus whatever whey protein the heat has cooked into it. That is the difference between a ruined sauce and a bowl of fresh paneer.
Why this one is different
The final pH is shown against the threshold curdling actually begins at, so a result that looks safe by a tenth of a point is visibly marginal rather than merely passed. A verdict interprets it, and the drained curd yield is estimated, which is the part that tells you whether the batch is worth straining.
How it works
Milk is not a solution, it is a suspension of casein micelles — protein bundles held apart by two things: a fuzzy layer of κ-casein on the outside, and a shared negative charge that makes them repel each other. Take the charge away and they stop repelling, collide, and stick. Acid does exactly that: as pH falls, the negative groups pick up protons until, at casein's isoelectric point of pH 4.6, the charge is gone entirely and the micelles collapse into curd.
Heat gets there sooner. Above about 70 °C the whey proteins unfold and stick themselves to the micelle surface, and the calcium phosphate cementing each micelle together starts to dissolve out. Both make the micelles far easier to destabilise, so hot milk gives way well above 4.6 — near 5.9 at simmering point. That is precisely how ricotta and paneer are made, and precisely why an acidic sauce splits when you let it boil.
The pH here is not guessed. The simulator solves the acid's own dissociation against milk's measured buffering capacity, which is why lemon juice and vinegar of the same volume land in different places: vinegar is a much more concentrated acid per millilitre, while citric acid carries three protons but only lets go of them gradually.
How to use this simulator
- Set the milk volume and pick a fat level — fat changes the yield, not the chemistry.
- Choose your acid and pour some in. Watch how little the pH moves at first.
- Now drag the temperature from fridge-cold to simmering and watch the threshold rise to meet your pH.
- Press just enough acid to snap to the smallest dose that curdles at the current temperature.
Formula
Three terms below carry the whole argument, and all three are explained in plain English under How it works above: buffering capacity (how much acid milk absorbs before its pH moves at all), dissociation (how readily an acid actually lets go of its protons — the reason lemon juice and vinegar behave differently at equal volume) and the isoelectric point (the pH at which casein loses its charge and the milk collapses into curd).
milk demand: n(pH) = β · ( 6.7 − pH ) · Vₘ
final pH: solve supplied = demand
threshold: pHₜ = 4.6 + 0.0186 · ( T − 20 ) for T > 20 °C
curdles when: pH ≤ pHₜ
- C — acid concentration, mol per litre of the juice or vinegar
- n̄(pH) — protons actually released per acid molecule at that pH, from its dissociation constants
- β — buffering capacity of milk, 0.030 mol per litre per pH unit
- Vₐ, Vₘ — volumes of acid and milk, in litres; 6.7 — pH of fresh milk
- T — milk temperature in °C; the 4.6 floor is casein's isoelectric point
Example calculation
250 ml of whole milk with 15 ml of lemon juice — one tablespoon — held at 85 °C:
solving against β = 0.030 gives pH 5.68
threshold = 4.6 + 0.0186 × 65 = 5.81
5.68 ≤ 5.81, so it curdles
drained curd ≈ 54 g
Those are the simulator's starting values and the panel shows the same figures. Drop the temperature to 20 °C without touching anything else: the pH is unchanged at 5.68, but the threshold falls to 4.60 and the milk stays perfectly smooth. Heat, not acid, is what decides it here — and if you want that in Fahrenheit, the temperature converter has it.
Where the threshold sits
The same milk tolerates roughly twice as much acid cold as it does at a simmer. Cheesemakers work at the top of this range on purpose; sauce cooks stay at the bottom of it.
Frequently asked questions
Why does hot milk curdle so much more easily than cold?
Because heat lowers the amount of acid needed. Cold milk holds together until about pH 4.6, where casein loses its charge entirely. Near boiling it gives way at about pH 5.9, because heat has already unfolded the whey proteins and loosened the calcium phosphate holding the micelles together. That is why the same tablespoon of lemon juice does nothing to milk from the fridge and curdles it instantly in a hot pan.
Is curdled milk safe to eat?
Curdling on purpose with fresh milk and a clean acid is exactly how paneer, ricotta and cottage cheese are made, so yes. Milk that curdles on its own in the fridge is a different matter: there the acid came from bacteria growing in it, and that milk should be thrown away. The clue is smell, not texture.
Why does milk split in coffee or tomato sauce?
Both are acidic and usually hot, which is the exact combination this simulator shows to be the worst case. Coffee sits near pH 5 and tomato near pH 4.3, so adding either to hot milk drops it past the threshold before you can stir. Tempering the milk first, or adding a little starch or flour, keeps the proteins apart long enough to survive.
Related calculators
Assumptions & limitations
- Buffering is treated as constant at 0.030 mol/L per pH unit. Real milk buffers unevenly, peaking near pH 5.1 as calcium phosphate dissolves, so the true curve is slightly flatter there than the one drawn here.
- The threshold line is a straight fit. It is anchored on casein's isoelectric point of 4.6 cold and about 5.9 at simmering, which is where heat–acid cheeses are made, but coagulation is a gradual process rather than a switch.
- Fresh milk is assumed to start at pH 6.7. Older milk has already begun souring and needs less added acid.
- Juice strength varies. Lemon and lime juice are taken at typical citric acid content; a particular fruit can be well off that.
- Yield is an estimate, not a weigh-in. Drained curd is computed as casein plus retained fat plus heat-bound whey protein at about 70% moisture; how hard you press it changes the number more than the chemistry does.
- Rennet is out of scope. This models acid and heat only — the enzymatic route used for most hard cheeses works by cutting the κ-casein layer off instead.
Further reading
Our guide to kitchen chemistry explains the isoelectric point behind curdling and why the same mechanism sets custard and whips egg white. The rest of The Kitchen & Gut Lab follows food onwards from the pan.
Sources & references
The buffering figure, the isoelectric point and the milk composition used here come from the following, all specific to dairy chemistry.
- Salaün, Mietton & Gaucheron (2005), International Dairy Journal — buffering capacity of dairy products, the source of the 0.030 mol/L/pH figure
- Tetra Pak Dairy Processing Handbook — casein micelles, milk pH and acid coagulation at the isoelectric point of 4.6
- USDA FoodData Central — whole milk composition, the protein and fat percentages behind the yield estimate
- Lucey (2000), Lait — acid and heat-acid coagulation of milk, and why heated milk gels at a higher pH