Methodology
Every calculator on this site is a pure function with unit tests. Every constant comes from a citable source. Here's where each number originates, which assumptions we made, and what we explicitly chose to leave out when the primary source wasn't solid enough to publish.
The citation rule
If a number appears in a calculator, it must trace to a primary source we can link to. The hierarchy:
- Peer-reviewed marine chemistry literature where it exists.
- Randy Holmes-Farley's Reefkeeping, Advanced Aquarist, and Reefs.com articles — the most rigorous and consistently primary-sourced hobby chemistry writing in the field.
- Manufacturer technical documentation for proprietary products (Tropic Marin, Red Sea, Triton).
- BRS technical posts when they cite the underlying chemistry rather than asserting it.
- Established hobby references like WetWebMedia for stocking rules of thumb that don't have a peer-reviewed source.
Numbers that only appear on forums or in unsourced product marketing don't make it into a calculator. If you find one, email us with a link and we'll cite it or remove it.
The flagship constants
Two-part dosing (Recipe 1)
594 g baking soda, baked at 300 °F for an hour to sodium carbonate, made up to 1 gallon = 1,900 meq/L stock. 500 g calcium chloride dihydrate made up to 1 gallon = 37,000 ppm Ca stock. Both numbers come directly from Randy Holmes-Farley's Recipe 1. The dosing yield — 1 mL per gallon raises alkalinity by about 0.50 meq/L (1.41 dKH) and calcium by 9.8 ppm — derives by dilution from those stock concentrations: 1,900 ÷ 3,785 and 37,000 ÷ 3,785. Put the other way, 0.71 mL per gallon raises alk 1 dKH. Equal volumes deliver about 7 ppm Ca per dKH, close to the 7.15 ppm the CaCO₃ stoichiometry consumes.
Kalkwasser
Saturated kalkwasser at 25 °C is 1.5 g Ca(OH)₂ per liter, delivering about 800 ppm Ca (≈ 20 mmol/L) and, at two equivalents of hydroxide per calcium, about 40 meq/L (≈ 112 dKH) of alkalinity. Replacing 1% of tank volume with saturated kalk raises tank Ca by 8 ppm and alkalinity by 1.1 dKH — the same dilution the kalkwasser and kalk drip calculators both use. Sources: BRS kalkwasser guide and Randy's parallel calculations on Reefs.com.
Magnesium
7¼ cups MgCl₂·6H₂O flake + ¾ cup MgSO₄·7H₂O (Epsom salt) dissolved in 1 gallon of water — Recipe #3 from Randy's DIY magnesium article. Randy gives it by volume; using his stated bulk densities (0.85 and 1.05 g/cm³) that is about 1,460 g and 185 g. At 11.96 % Mg in the chloride hexahydrate and 9.86 % in Epsom salt, the blend carries ~193 g Mg in ~4.8 L of finished stock: ≈ 40,000 ppm Mg, so 1 mL per tank-gallon raises Mg by ~10.6 ppm. Chloride to sulfate works out to ~7:1 by mass, matching natural seawater. The stock concentration is our stoichiometry; the article doesn't state one.
Underwater PAR
Apogee quantum sensors calibrated in air read low underwater (the immersion effect). Apogee's published correction factors, from its Underwater PAR Measurements page: × 1.32 for the SQ-500-series head (MQ-500 meter) and × 1.08 for the SQ-110/120 head (MQ-200). The MQ-510 applies the correction in firmware, so the PAR calculator uses × 1.00 for it.
CO₂ ↔ pH ↔ alkalinity
CO₂ (ppm) = 15.7 × dKH × 10^(6.35 − pH), using the first carbonate dissociation constant pK₁ ≈ 6.35 at 25 °C in seawater. Cross-validated against the UKAPS pH-dKH-CO₂ table. The calculator reports ranges, because real-tank pH measurement carries roughly ±0.05 systematic error from probe drift.
Volume and weight
1 US gal = 3.785411784 L = 231 cu in (NIST definition). Freshwater: 8.345 lb/gal. Saltwater at SG 1.025: 8.554 lb/gal. Rectangular and cube volume are exact. Cylindrical uses πr²h. Hexagonal uses (3√3/2)·s²·h. Bowfront is approximated (see Known Approximations below).
Salinity and specific gravity
Natural seawater is 35 ppt salinity, 1.0264 specific gravity at 25 °C. The PSS-78 (Practical Salinity Scale 1978) is the formal definition, summarized at Salinometry. Refractometer-to-density conversions follow Randy's specific gravity article.
Heater wattage
The heater calculator uses the watts-per-gallon rule of thumb from the BRS heater guide: 3 W/gal in a warm room (70 °F or above), 4 W/gal in a cool room (60–70 °F), 5 W/gal in a cold room (below 60 °F), plus 1 W/gal for tanks under 30 gallons, rounded up and split across two heaters for redundancy. As a cross-check it reports the watts needed to raise the tank from room to target temperature in one hour (1.16 W per litre per °C) and warns when that dwarfs the rule-of-thumb figure.
Substrate
Aragonite sand and crushed coral densities from CaribSea product specs: 85 lb per cubic foot bulk density for Arag-Alive Special Grade, ranging from 72 lb/ft³ (crushed coral) to 96 lb/ft³ (oolite) across the listed products. The calculator converts your target sand depth in inches and footprint in inches² to pounds and bag count.
Known approximations
Bowfront volume
We treat a bowfront tank as a rectangular prism plus a half-cylinder bulge, with the bulge contributing ~6% of the rectangular volume. The exact figure depends on the bow geometry of your specific tank brand — we've seen 5–8% in published specs. The 6% midpoint is disclosed in the calculator UI and here. For an exact answer, check your manufacturer's published gallon spec.
Saltwater stocking density
The stocking calculator uses a 0.25-points-per-gallon heuristic for saltwater, where points scale by fish adult size and aggression. This is a hobbyist rule of thumb without a single citable primary source — it derives from WetWebMedia's stocking essay calibrated to modern reef filtration. The calculator labels its output as a guideline, not a hard limit.
Live rock
We accept live-rock input as pounds directly rather than computing volumetric displacement from rock dimensions. Live rock density varies enormously with porosity — there's no useful single number. For planning, the weight calculator is built around the hobby rule of 0.75–1.5 lb of rock per display gallon.
Hydrometer temperature correction
The salinity calculator uses pure-water density ratios from the CRC Handbook as the temperature anchor, then applies the seawater salinity adjustment. Refractometer measurements are temperature-stable if your unit has automatic temperature compensation (ATC); manual refractometers should be calibrated at the same temperature you measure tank water.
Freshwater fish stocking surface area
The freshwater stocking heuristic uses a 36 × 12 in = 432 in² surface-area baseline. Wider/shorter tanks gas-exchange better and tolerate slightly heavier stocking. The calculator reports a points-with-surface-area-adjusted band.
What we explicitly chose not to include
- Pea gravel substrate. No reputable published density for pea gravel in aquarium use. The numbers floating around online (90–110 lb/ft³) don't cite a source. Skipped.
- A UV sterilizer calculator. Manufacturers publish wildly different formulas and the "rated tank size" claims don't survive scrutiny, so there is no calculator. The UV sterilizer sizing guide covers the variables that matter — wattage, flow, dwell time — and points you to each manufacturer's own flow-rate ratings instead of a formula of ours.
- "Trace element" dosing calculators. Unless your specific tank has an ICP result showing a measurable deficiency, dosing trace elements blind is hobbyist folklore. We don't enable it.
- Wave/flow calculations. Modern wavemakers have variable output, and the "X× turnover per hour" folklore doesn't map cleanly to gyre-flow setups. Use the qualitative guidance in our starting a reef tank guide instead.
Code, tests, and transparency
Every calculator on this site is a pure function in TypeScript with a Vitest unit-test file — known inputs producing known outputs from the cited sources. The test suite runs before each push to the site's repository; the deploy build itself (next build) does not run tests, so a push is the checkpoint, not the deploy. There's no "close enough" in chemistry.
Last reviewed by hand, end to end, on 2026-09-30.
Last reviewed