CalculatorUpdated April 2026

Stocking density calculator

Propose a stocking. Get an honest verdict on whether it's safe, with the specific reasons. Not a "how many fish can I stock" tool — those are usually wrong.

Stocking analysis0 fish · 20 gal working

Add fish below to analyze.

Tank
gal

Working gallons (after substrate + fill-below-rim, not box gallons). Compute it on the volume calculator if unsure.

Stock

Neon tetra

common

Ember tetra

common

Guppy

common

Cherry barb

common

Corydoras catfish

uncommon

Mystery snail

uncommon

Betta

rare

Angelfish

legendary

Why this is "is it safe" not "how many can I stock"

Most stocking calculators answer the wrong question. "You can fit 20 neon tetras in a 10-gallon" is the prototype mistake — mathematically defensible (20 × 1.5 inches = 30 inches; 30/10 = 3 inches per gallon, well past the safe ceiling), and totally ignoring that neon tetras need 20 gallons of working volume to thrive, not 10. The inches-per-gallon rule is a single constraint out of five.

So this calculator inverts the question. You enter the stocking you're considering, the calculator runs five constraint checks against it, and you get back a verdict (safe / caution / overstocked / incompatible) plus the specific findings — which constraint is tightest, what to change if you want to move from caution to safe.

The five constraints checked

  1. Parameter compatibility. Species ranges from FishBase + the FishTankMath water-parameters reference. If two species don't share a workable temp / pH / GH window, both stress regardless of how much room they have. Flagged as incompatible.
  2. Predator-prey pairings. Drawn from the species deep-content guides — only pairings with strong sourced consensus (the canonical example is angelfish + neon tetras: angelfish eat anything that fits in their gape, neons fit). Flagged as incompatible.
  3. Per-species tank-size minimums. A 5-gallon can hold a betta and not much else. Each species has a realistic minimum from its deep guide; if the working gallons falls below that, the verdict is overstockedon a different axis than bioload — the species can't thrive in the tank.
  4. Schooling minimums. Obligate schoolers (neon, ember, cherry barb, cory) need 6+ to display normal behavior. Counts of 1–5 produce hiding fish, suppressed color, and higher disease rates. Flagged as cautionrather than overstocked because the fish survives, just doesn't thrive.
  5. Adjusted bioload. The classic inches-per-gallon rule with body-type and waste-output adjustments. Bottom-dwelling cories count for 0.8× their length (slim profile). Body-massive angelfish count for 1.5×. Snails count for 0.3× (very low invertebrate waste). Sum across the stocking and divide by working gallons.

Bioload thresholds

Three thresholds on the adjusted-inches-per-gallon ratio:

The 0.7 conservative target is intentionally lower than the standard inches-per-gallon rule. Beginner tanks with undersized filtration, inconsistent maintenance, and unstable biofilms run into problems before the rule says they should. Margin is the buffer that lets the tank tolerate a missed-water-change week without crashing.

Where the inches-per-gallon rule breaks down

The rule is a useful first-order approximation. Cases where it underestimates or overestimates real bioload:

Where hobbyists disagree

Frequently asked questions

Why doesn't this calculator just tell me how many fish I can stock?
Because that question doesn't have a single answer — and most calculators that pretend it does are giving you the wrong one. Saying "your 20-gallon can hold 20 neon tetras" ignores parameter compatibility, schooling needs, predator-prey concerns, body type, filtration capacity, and the experience level of the keeper. The honest version is what we do here: you propose a stocking, we tell you whether it's safe.
What does the bioload ratio mean?
It's an adjusted version of the classic 'one inch of fish per gallon' rule. We sum each species' adult length × bioload factor × count, then divide by working gallons. Bottom-dwelling cories count for 0.8 inches per inch of body length (slim profile, less waste). Body-massive species like angelfish count for 1.5×. Snails count for 0.3× (very low waste). Under 0.7 = comfortable margin. 0.7–1.0 = workable but tight. Above 1.0 = past the safe ceiling.
Why does my favorite stocking come back as 'overstocked' even though I see videos of bigger tanks?
Two reasons. First: 'working gallons' (after substrate + fill-below-rim) is usually 70–80% of stated tank gallons, so a '20-gallon long' is closer to 17 working gallons. Use the volume calculator to get an honest number before stocking math. Second: the calculator targets beginner-safe water-quality margins. Experienced keepers with strong filtration, weekly water-change discipline, and large biofilm colonies routinely run heavier loads. The calculator stays conservative on purpose.
Why are some pairings flagged as 'incompatible'?
Two cases trigger an incompatible verdict: (a) species water parameters that don't overlap (e.g., guppies want pH 7.0–8.5 alkaline, neon tetras want 6.0–7.0 acidic — they can't both be at their target at once), and (b) predator-prey pairings the species deep guides specifically warn against (angelfish + neon tetras is the canonical example). The calculator only flags pairings with strong sourced consensus.
Can I trust this for advanced setups (planted, low-stocking aesthetic, breeding)?
It's tuned for beginner community tanks. For specific advanced cases — high-density discus tanks with heavy filtration, intentionally lightly-stocked aquascapes, breeding programs with controlled fry counts — the inches-per-gallon model breaks down. Treat the calculator as a sanity check, not gospel. The species deep-content guides have the per-species nuance the calculator can't capture.

Related

Sources: FishBase species data, the per-species deep-content guides under /species/*, peer-reviewed aquaculture literature on bioload and filtration capacity, and mainstream beginner-safe hobby consensus on schooling minimums and predator- prey pairings. Math layer in lib/aquarium/stocking.ts + parameter-conflict detection in lib/aquarium/species-water-params.ts. By Jimmy L Wu.