Fish
Fish in EcoSym are modelled as a boundary condition on the ecosystem rather than a closed-mass-balance member — their biomass is a user-set stocking level held fixed (no growth or reproduction in V1; only death removes it), and the model instead reports their effect on the tank (bioload — an oxygen sink and an ammonia/CO₂/phosphate source) and their health (a continuous 0–1 gauge). See the conceptual page Fish & Feeding for the why, and the Parameter Reference → Fish for every numeric value with its rationale.
Each species page below explains the fish's biology, its tolerances, and why it is a good or bad fish-in-cycling candidate — the headline use case ("will my tank cope, and how are my fish doing?").
V1 roster
The roster was chosen to span the axes that matter for the cycling use case — tolerance (fragile ↔ hardy), behaviour, and bioload:
- Zebra danio (Danio rerio) — the hardiest, the fish-in-cycling workhorse.
- Betta / Siamese fighting fish (Betta splendens) — the air-breather; survives a low-oxygen bowl.
- Neon tetra (Paracheirodon innesi) — the fragile one; the cautionary "wrong fish, too soon" case.
- Guppy / Endler (Poecilia reticulata) — the hardy hard-water livebearer.
- Corydoras (Corydoras spp.) — the benthic detritivore; the only roster fish that grazes in-tank.
How the fish differ in the model
All five share the same FishSpecies engine machinery (fixed biomass, the health ODE, ammonotelic excretion). What makes a neon die where a danio shrugs is per-species tolerance thresholds — the unionized-ammonia, nitrite, oxygen, temperature, and pH bands each fish reads the same water against. Those thresholds feed both the direct toxicity kernels and the health stress blend, so the fragile ↔ hardy spread emerges from one set of calibrated numbers. Two species also carry a distinguishing trait: the betta's aerial_O2_access (it breathes air, so low dissolved oxygen barely dents its health) and the corydoras' benthic in-tank grazing (it eats settled detritus and periphyton on top of the prepared feed).