Skip to content
FishCompat

How we calculate

Every number FishCompat shows comes from the open, versioned method on this page. Where a value is a heuristic, we say so plainly.

Tank volume

Rectangular tanks: length × width × height in centimeters, divided by 1000, gives liters. Cylinders: π × radius² × height. Corner tanks are modeled as a quarter cylinder: π × side² × height ÷ 4. Bow-front tanks: the rectangular base plus a parabolic-segment approximation of the bow (⅔ × length × bow depth) — accurate for typical bows, an estimate for very deep ones.

These are gross volumes. Water displaced by substrate, rocks, and the fill line is accounted for in the stocking calculator, not here. Unit conversion (gallons, inches) is display-only: the core always computes in metric.

Stocking (fill percentage)

We assume about 85% of a tank's gross volume is actually water once substrate, decor, and the fill line are subtracted.

Each species carries a bioload — how much waste it produces relative to an adult neon tetra (3.5 cm). Where our editors haven't set an expert value, bioload is derived from adult length: waste output scales with metabolic rate, metabolic rate scales with body mass to the power 0.75, and mass grows with the cube of length — so bioload ≈ (length ÷ 3.5)^2.25.

A tank's capacity is one neon-equivalent unit per 4 liters of usable water. Your fill percentage is the total bioload of the stock divided by that capacity. This is an honest heuristic (version 1), tuned to be conservative for beginner community tanks — not a law of nature.

On top of the fill percentage, the planner warns when the tank is smaller than a species' documented minimum and when a schooling species is kept below its minimum group size.

Compatibility verdicts

Every pair of selected species runs through six rules. Three compare water-parameter ranges — temperature, pH, and hardness: no shared range means incompatible; a shared window narrower than 2 °C, 0.4 pH, or 3 dGH is a caution (unless one range sits fully inside the other — that's accommodation, not a compromise). Temperament: aggressive next to peaceful is incompatible; two aggressive species is a caution. Size: a fish more than 3× longer than its tankmate gets a caution, or an incompatible verdict if the bigger fish is not peaceful. Known fin-nippers get a caution next to peaceful fish and an incompatible verdict with long-finned ones.

Generic rules can't express well-known specifics, so a curated exception list overrides them — two male bettas, angelfish with dwarf shrimp, and similar documented cases. A pair's final verdict is the worst of everything that triggered.

Verdicts describe typical, documented behavior. Individual fish vary, and tank size, planting, and stocking order all shift the odds.

Where the species data comes from

Species parameters are compiled from at least two independent, species-specific references — Seriously Fish, FishBase, and specialist care guides — and stored together with the source list and the date each source was checked. Records move through an editorial pipeline (draft → sourced → reviewed → published) and only published records appear in the tools. We never invent water parameters: when sources disagree, we take the conservative common range and note it.

Spotted an error? Every page has a “Report an error” button — reports land in the maintainer's queue with the page and data version attached. FishCompat is reference information, not a substitute for professional advice.