CO2

Carbon dioxide (CO₂)

The single nutrient that decides whether a planted tank lights up or limps along. Calculated from pH and KH, dangerous when over-injected.

Ideal range15–35 mg/L
Critical above> 40 mg/L

Where the gas comes from

Dissolved carbon dioxide. Plants pull it from the water column to drive photosynthesis; fish exhale it as a metabolic waste. In a non-injected tank, CO₂ sits at the equilibrium with the atmosphere (~3 mg/L) — enough for slow-growing low-tech plants, not enough for the demanding stems, carpets, and red species that planted-tank hobbyists are usually after.

CO₂ injection rigs push pressurised gas through a diffuser; the dissolved concentration is what matters, and it's not what the rig flow rate tells you.

One product to see clearly: "liquid CO₂" (glutaraldehyde and its relatives) is a mild algicide with a small carbon side-effect. It does not raise dissolved CO₂, a drop checker won't register it, and overdosing melts Vallisneria and stresses shrimp. If the choice is between a bottle of gas and a bottle of liquid, they are not the same product.

The 15–35 mg/L band — and the wall at 40

The difference between 5 mg/L CO₂ and 25 mg/L CO₂ is the difference between a tank that grows algae and a tank that grows plants. CO₂ is the limiting nutrient in 90% of "I dose everything but nothing grows" cases.

It's also the parameter most likely to kill fish suddenly. Above 40 mg/L sustained, fish can't unload metabolic CO₂ across their gills into water already saturated with it, and they suffocate even though oxygen is plenty. The schema treats 15–35 mg/L as the working band and 40 mg/L as the hard ceiling — I run tanks toward the top of the band by day and make sure the number falls off overnight.

As a quick reference: below 10 mg/L — slow plant growth, algae bias toward green hair and brown diatoms. 15–30 mg/L — target band for most planted tanks. Above 35 mg/L — fish gasping at the surface, particularly at lights-off when the photosynthetic O₂ production stops.

The pH and KH connection

CO₂ isn't measured directly by most hobbyists — it's inferred. Dissolved CO₂ forms carbonic acid, which pushes pH down, and how far it pushes depends on how much KH is there to resist it. That's why the CO₂ calculator needs both a pH reading and a KH reading to spit out a CO₂ number: the same carbonate chemistry that buffers your pH is the thing that lets you back-calculate the gas. A rough rule that falls straight out of it: a 1.0 pH drop from the fully de-gassed overnight baseline puts you around 10× the resting CO₂ (about 3 mg/L → 30 mg/L), comfortably inside the target band for most tanks.

The formula behind the calculator is compact enough to sanity-check by hand:

CO₂ (mg/L) ≈ 3 · KH (°dKH) · 10^(7 − pH)
KH pH ≈ CO₂
4 °dKH 7.0 12 mg/L
4 °dKH 6.8 19 mg/L
4 °dKH 6.6 30 mg/L
8 °dKH 7.0 24 mg/L

Same gas target, very different pH landing spots depending on the buffer — which is why "inject until pH X" advice from someone else's tank transfers badly to yours.

Signs there's too little

Below 10 mg/L the tank tells on you before any test does. New growth comes in small and pale, demanding carpets like HC cuba and Monte Carlo melt from the base instead of knitting together, and red plants stubbornly stay green — deep reds need strong light and CO₂, not one or the other. Pearling (the fine oxygen bubbles off healthy leaves) stops. Algae fill the vacuum the plants can't: green dust on the glass, brown diatom films on slow-growing leaves, and black brush algae on the leaf edges in the low-flow corners. If you're deliberately running without a bottle, that's a legitimate choice — the planted-without-CO₂ guide covers how to pick plants and light for it — but demanding species in an under-injected tank is the worst of both worlds.

Signs there's too much

Too much CO₂ shows up as respiratory distress, and it shows up on a clock. CO₂ peaks at the end of the photoperiod and dissolved oxygen bottoms out before dawn, so the danger window is lights-off through early morning: fish hanging at the surface gulping, gill covers pumping fast, shrimp clustered at the outflow or climbing the glass toward the waterline. Shrimp and small tetras crack first — they have the least respiratory reserve. Snails crawling out above the waterline is the same message. Anything above 35 mg/L sustained is a warning; above 40 mg/L is the acute ceiling where fish suffocate in oxygen-rich water.

Heat narrows the margin. Warm water holds less oxygen while every fish's demand rises with its metabolism, so the bubble count that was comfortable at 23 °C can tip into gasping during a heatwave at 28 °C — the temperature page covers why summer is when CO₂ accidents happen. The one consolation: unlike copper or ammonia, CO₂ leaves as fast as it arrived. Aerate hard and the level is back to safe within the hour, and fish that were gasping usually recover fully.

Measuring it — and when the numbers lie

Three options. A drop checker (4 °dKH solution + bromothymol indicator) lags by 24 hours but reads honestly — yellow = too much, green = target, blue = not enough. A pH probe + KH reading runs through the pH + KH formula; the free guide explains the chemistry and when the formula lies. A direct CO₂ meter is most accurate but expensive.

Two protocol traps catch people. First, the drop checker uses a 4 °dKH reference solution, never tank water — fill it with tank water and the reading is meaningless. And its 1–2 hour lag means the green you see at noon reflects mid-morning CO₂, not the current level, so don't chase it minute to minute. Second, the pH/KH formula assumes carbonate is the only thing buffering your pH. Tannins from driftwood and leaf litter, phosphate buffers, and commercial "pH-stabiliser" products all add non-carbonate buffering, which makes the formula report a CO₂ level higher than what's really dissolved. Blackwater tanks and anything running peat should treat the calculated number as a loose upper bound and trust the drop checker or a fish-behaviour check instead.

Raising it safely

Too low — add or increase CO₂ injection; aim for a 1.0 pH drop from non-injected baseline. Bring the injection up gradually over a week rather than in one jump, start it 1–2 hours before lights-on and cut it an hour before lights-off (a solenoid on a timer does this for you), and log the daily pH swing so you can see the band stabilise.

If a pressurised system isn't in the budget yet, DIY yeast and citric-acid generators work, but their output drifts with room temperature — it can double over a warm weekend — so keep them for lightly stocked tanks and pair them with a drop checker you actually look at.

Bringing it down fast

Too high — back off injection, increase surface agitation (CO₂ off-gasses through any turbulent surface), and run an air stone on a timer for the dark period as a fail-safe. Tilting a spray bar up toward the surface or dropping the water line an inch both raise gas exchange without touching the injection rate — the fastest way to buy an oxygen margin overnight while you re-tune the bubble count.

What is a good Carbon dioxide level in a freshwater aquarium?
The ideal Carbon dioxide range is 15–35 mg/L.
When is Carbon dioxide too high?
Above 40 mg/L it is considered critical.
Stormy

Stormy watches this number over time and tells you before it drifts. Inside the app, on every tank you keep.

Open a free reefnotes account →