Methodology

A calculator you can't audit is a calculator you have to take on faith. This page documents what brewwtr computes, where every constant comes from, how the models were validated, and exactly where — and why — its predictions differ from the classic spreadsheets.

The textbook layer

Water analysis, mineral additions, and acidification are settled chemistry, and brewwtr implements them from first principles: full carbonate equilibrium (pKa 6.38 / 10.33, alkalinity titrated to pH 4.3) with the free-H⁺ term kept exact and no safety fudge factors; Kolbach's residual alkalinity (1953); polyprotic acid dissociation for all nine supported acids with density curves fitted from published solution data; and the Morey equation for beer color. Every mineral's per-gram ion contribution is re-derived from atomic weights in the automated test suite — the shipped tables match pure stoichiometry to within 0.5%, and the acid density polynomials are checked against CRC handbook values.

The mash pH model

Mash pH is predicted with a charge-conservation ("proton deficit") model in the tradition of A.J. deLange and D.M. Riffe: at the true mash pH, the protons released by malt acidity, calcium/magnesium–phosphate reactions, and any acid additions exactly balance the protons absorbed by the water's carbonate system and the grist's buffering. The model solves for that root directly, and can run in reverse — goal-seeking the acid dose that lands a target pH. Kolbach's divisors (calcium ≈ 3.5, magnesium ≈ 7 equivalents to neutralize one of alkalinity) are used for the Ca/Mg term; Troester's 2009 measurements independently reproduce them.

Malt parameters come from published measurements wherever they exist: 31 of the 36 malts in the database carry a measured distilled-water mash pH and buffering coefficient, drawn from deLange's titration curves (MBAA Technical Quarterly 52(1), 2015), Riffe's linear fits, and Troester's 2009 experimental tables. Malts without published data fall back to class averages by type and color, and every grain row accepts a per-lot DI pH override — because lot-to-lot variation of ±0.1 pH is real and no database removes it.

Validation

The model was run against the appendix data of Kai Troester's “The effect of brewing water and grist composition on the pH of the mash” (2009) at his experimental conditions. Results: his full alkalinity curve is reproduced point-by-point within 0.1 pH worst-case (the worst point being water far more alkaline than anyone brews with unacidified); measured pH-versus-calcium slopes match within 0.008 pH·L/mEq and magnesium within 0.005; the mash-thickness scaling of alkalinity sensitivity matches his fitted relationship; and all three of his specialty-malt grist series track with mean error under 0.1 pH. Across his eleven base malts, a single class-average value can't beat the real spread (5.30–5.79 — his own finding that color only loosely predicts malt pH), which is exactly why the per-malt database and the DI pH override exist.

Cross-checked against the spreadsheets

The same inputs were run through Bru'n Water (v5.5) and compared line by line. The textbook chemistry agrees to within 0.4% everywhere — and to ~0.05% once two documented differences are accounted for: brewwtr omits the spreadsheet's +0.01 meq/L acid safety margin, and keeps the free-H⁺ term dimensionally exact. Beer color agrees to four decimal places. One genuine data difference was found and kept deliberately: brewwtr's sodium metabisulfite factors follow exact Na₂S₂O₅ stoichiometry.

The mash pH models agree within ±0.1 pH across typical brewing — pale-to-crystal grists on ordinary water — and diverge in two regimes. Dark grists: brewwtr predicts ~0.2–0.3 higher, because published titrations (Troester, deLange) show roasted-malt acidity plateaus rather than scaling with color. Very alkaline water (250+ ppm CaCO₃): brewwtr predicts ~0.3–0.4 lower, because the real alkalinity response flattens where a linear model keeps climbing — Troester measured ≈5.99 for a pale grist at the alkalinity where linear extrapolation says 6.34, and brewwtr predicts 5.97. In both divergence regimes, the published measurements side with brewwtr's approach. In both, respect is due: Bru'n Water set the standard for a decade, and this comparison exists because it was worth comparing against.

What to expect in practice

With measured per-malt data, expect predictions within roughly ±0.1 pH of a calibrated room-temperature reading; on class-average malts, ±0.15–0.2. Malt lot variation is the dominant remaining error, which no calculator removes — so treat every prediction as guidance, measure your mash at room temperature, and use the built-in pH meter offset to calibrate the model to your own meter and system over a few brews.

References

  • P. Kolbach, “Der Einfluss des Brauwassers auf das pH von Würze und Bier” (1953; trans. A.J. deLange)
  • Kai Troester, “The effect of brewing water and grist composition on the pH of the mash” (2009, braukaiser.com, CC BY-NC 3.0)
  • A.J. deLange, “Alkalinity, Hardness, Residual Alkalinity and Malt Phosphate: Factors in the Establishment of Mash pH” (MBAA TQ 52(1), 2015)
  • D.M. Riffe, published malt buffering fits
  • Daniel Morey, “Approximating SRM Beer Color”
  • John Palmer & Colin Kaminski, Water: A Comprehensive Guide for Brewers (2013)
  • CRC Handbook of Chemistry and Physics — aqueous acid solution densities
See the numbers for your own water →

The engine ships with an automated test suite pinning every worked example, stoichiometric derivation, and validation result described above. Questions or corrections: reach out.