A Tank of Light is our first-party idle aquarium game: tap the surface to feed, fish grow only if they eat and then produce glimmer, and breeding can drift into a pattern your book has never seen. 18 species, 12 recipes, 4 gene loci, 6 tank tiers, offline settles for up to 8 hours, and there is no death.
Illustration (AI-generated), not a game screenshot
One vertical tank, three fish, a pinch of food. Tap the surface to feed: fish grow only if they eat, grown fish produce glimmer, and two adults can lay a clutch that may hatch a pattern your book has never seen. Every new species raises total output. 20 species, 14 recipes, 4 gene loci, 6 tank sizes — no opponent and no fail state. The only thing it punishes is not coming back.
Offline:settles up to 8 hours at 55% of the online rate
Pace:simulated medians: 7 species at 30 minutes, 13 at 2 hours
Platform:Browser (portrait-first, English switchable, no ads)
The starting view: 68 glimmer at 1.2/s and water 92 top right, 5 portions of food top left, and four buttons along the bottom — Feed, Shop, Book 2/20, BreedThe breeding panel: pick two adults first, and it shows the species odds and the cost for this clutchThe shop: a pinch of food for 12 glimmer, the fry counter at 70 (greyed out because the purse is short), five kinds of kit, and "a bigger tank: capacity 4 → 6 for 320"The book: 15 of 20 species, headed by "each discovery adds +3% to output (currently +45%)", with the unseen ones left as grey silhouettes and ???
What it is
A Tank of Light is an idle aquarium collection game: you get a tank, a few fish and one verb — tap the surface to feed. Fish grow only if they eat, grown fish produce glimmer, and glimmer is the only money in the room.
Everything else is collecting. Two adults can breed, and the clutch may land on one of the parents or drift along a recipe into a slot your book has never had. Each discovered species adds +3% to global output, so the book is not decoration — it is compound interest.
There is no opponent, no timer, no failure. The only thing that trends downward is water quality: more fish and more feeding make the water dirtier, and dirty water cuts output and growth. That is the whole "lazy is fine, absent is not" boundary.
The game shipped on 2026-10-18 at yigang.gamestrategists.com. It is our own first-party title: free, no sign-up, and it never asks for real personal information.
The economy has three legs
Feeding first. A portion of food costs 12 glimmer; when a fish eats a grain it gains 0.55 satiation and 0.3 mood and leaves 0.03 waste in the water. Satiation drains at 1/180 per second, so a fed fish is hungry again in three minutes — that is why you come back.
Water second. Decay runs at (0.006 + 0.0018 × fish) × (1 − 0.22 × filter level) + 0.02 × waste, while plants restore 0 / 0.008 / 0.016 / 0.026 per second by level. Water feeds output through a factor between 0.35 and 1.10: in murky water the same fish earn a third less.
The book third. Global multiplier = 1 + 0.03 × species discovered + 0.10 × lamp level. The 15/20 tank in the screenshot sits at +45%.
The legs interlock: more fish means more output but faster decay, so you buy a filter or plants, or accept the slowdown, and save up for a bigger tank. It is a self-balancing ledger that happens to be drawn as water.
Eighteen species, twelve recipes
Five rarity tiers: common (Carp, Silver Minnow, Ink Tail, Orange Band, Moss Crucian), uncommon (Lantern Eye, Moon Carp, Coral Skirt, Blue Snow, Zebra Fish), rare (Gold Scale, Butterfly Tail, Ink Jade, Glass Cat), epic (Star Spot, Flame Fin, Glimmer Fish) and one legendary, Dragon Whisker. Adult base output runs from 0.50 glimmer/s (Silver Minnow) to 5.0 (Dragon Whisker), rarity premium already included.
The 12 recipes live in the species table, and each probability is the total chance for that clutch, not an extra roll. A pair not in the table falls back to a 5% low-level mutation; otherwise the offspring picks a parent species 68/32.
Four of the recipes bridge the three starters (Carp × Minnow → Orange Band, Minnow × Ink Tail → Moss Crucian, Ink Tail × Orange Band → Lantern Eye, Orange Band × Moss → Coral Skirt). They exist because measurement said so: without them a 30-minute book stalls around four species — the player hits a wall before they can afford a bigger tank.
Two other axes do not need breeding. The fry counter changes pool with tank tier (tier 1 commons only at 70 glimmer, tier 2 adds uncommons at 150, tier 4 adds rares at 420, with odds 100%, 72/28 and 55/33/12). Tide visitors arrive on their own with rarity weights 12 / 8 / 4 / 1.6 / 0.35, downweighted to 25% once you own them — and halved again for Dragon Whisker while it is missing. If the tank is full, the visitor leaves 60 + 40 × rarity index glimmer instead.
Genetics: four loci
Every fish carries four loci of two alleles. The six hue alleles (coral, gold, jade, indigo, ink, pearl) have no dominance: colours are mixed as a circular mean in HSL, so coral × ink can produce a colour neither parent has. When the two alleles sit near complementary, the mix leans 70% toward the more saturated one — otherwise everything would come out grey-brown.
Pattern has four levels with dominance marbled > banded > spotted > plain; fin length has three, veil > long > short. Those two loci are the part where you can see the parents.
Glow is recessive: only gg lights up, and an n carrier looks perfectly normal. Two carriers produce a glowing fry at 25%, and the gate pins exactly that — measured 25.0%, while (n,n) × (n,g) produced zero lit fish across 400 clutches.
Each allele also mutates into another allele of the same locus at 2%. The breeding panel shows you the odds for the clutch before you spend: you can roughly do the maths, and it still keeps a surprise.
Come back offline and the tank is still there (just cloudier)
Away time settles for at most 8 hours at 55% of the online rate, and it is actually simulated in 30-second steps — plants, filter and auto-feeder all run. In the harness, 24 hours away brings back 5.2k glimmer where the online ceiling for the same span is 10.7k, so idling never out-earns a reasonable expectation.
Water has a soft floor: below 22 the decay drops to 6% of itself. Waking up after a night away shows "cloudy water, slower output", not "your tank died". The cost of being away was chosen to be a slowdown, not a punishment.
You also never miss every tide: after more than four minutes away, a visitor is left in the tank waiting for you.
And there is no soft lock. A tank with 0 glimmer and 0 food recovers 779 glimmer by itself in 15 minutes (a portion of food costs 12) with water still at 82.
The numbers were run, not felt
The gameplay is a pure-data kernel that touches neither DOM nor canvas, so it can be simulated for dozens of hours in node. Its acceptance gate has 41 assertions and was fully green on 2026-10-20: the start has 3 fish, 2 species, 60 glimmer, 6 food, capacity 4 and 1.09 output per second; the 30-minute median unlocks 7 species and one upgrade with water never below 66; the 2-hour median is 15 species at tank tier 4; Moon Carp came out at 31.8% where the nameplate says 30% (tolerance 18–42%).
It also checks that nothing stalls: an empty-purse tank recovers on its own; a tampered save is rejected by its checksum and returns to the start rather than throwing; junk saves do not crash. And the species table is self-consistent: all 20 have drawable body parameters, all 14 recipes point at real species, no pair has two contradictory recipes, and output is monotonic in rarity.
The assertions themselves are tested: six deliberately corrupted states (glimmer, water, capacity, growth, satiation, mood out of range) must each turn the checker red. An assertion that cannot go red is not an assertion.
All randomness goes through a seedable mulberry32, so a run can be replayed. That matters more than it looks: whether a tuning change can be proven depends on rerunning the same seed.
Rendering and controls
Fish and water are procedural Canvas 2D, zero textures: one drawFish, shaped by species skeleton + genes + age and satiation, so adding a species is one row in a table;
a pixel budget of 2.4 million — phones get the full 2×, large windows drop to about 1.5×, because 1280×800 at 2× only reached 29 fps;
the background layer (water body, light shafts, vignette) is cached for 1.2 seconds and blitted once per frame; ctx.filter blur is deliberately unused, it pushed 60 fps down to 31;
on desktop the tank is capped at 640 px and centred (full bleed would give you an empty horizontal tub); on phones it is full-bleed portrait;
the only control is tapping the water surface to feed; the other four buttons are Shop, Book, Breed and Settings;
Settings holds the sound toggle, the language switch and a reset that asks for confirmation;
progress lives in this browser under yigang.save.v1, with a checksum, and does not travel between devices.
The price list (all from one data file)
Six tank tiers: capacity 4 / 6 / 9 / 12 / 16 / 20, costing 320 / 1100 / 3200 / 9000 / 24000 glimmer (the first tank is free).
Five equipment kinds across thirteen levels: plants 220 / 880 / 2600, filter 260 / 980 / 3000, lamp 300 / 1200 / 3800, auto-feeder 1500 / 5200, tide bell 900 / 2800. The auto-feeder only feeds fish that are actually hungry (every 18 seconds at level 2, 26 at level 1), so it saves food as well as water.
Breeding costs 120 + 60 × tank tier; eggs hatch in 150 seconds and a fry reaches adulthood in 420, provided it is fed and the water is above 25.
Recent changes
2026-10-20: the species table grew from 18 to 20, adding Ember Fin (rare) and Night Veil (epic) with one late-game recipe each; the book and this page now read 20 species and 14 recipes.
The game shipped on 2026-10-18, so "recent changes" is its whole history: on launch day it gained an onboarding illustration and a social card, two acceptance gates (41 simulated assertions plus a real-browser render gate with a negative control — stop the loop, clear the canvas, shrink the bitmap and it must go red), a README and a live URL.
Also on that day: the title moved off the main site's /yigang/ path to its own yigang.gamestrategists.com, with the homepage card and sitemap pointing at the subdomain. This page is the other half of that decision — the content stays on the main domain, the playing stays on the subdomain.
How the numbers on this page are checked
The 20 species and their rarity spread, the 14 recipes with probabilities, the three fry-counter pools and their odds, and the tide weights come from fishpond/src/data/species.js. Capacity tiers and costs, equipment levels and prices, food at 12, breeding at 120 + 60 × tier, 150-second eggs, 420-second adulthood, the 8-hour / 55% offline rule, the water floor at 22, the 0.35–1.10 water factor, +3% per species and +10% per lamp level, and the 1/180 satiation drain are all in src/game/kernel.js; the four loci and dominance order are in src/game/genetics.js.
The 30-minute, 2-hour, 24-hour-offline, 15-minute-neglect, 31.8%, 25.0% and 400-clutch figures came from running `npm run audit` in the fishpond repo on 2026-10-19 — they are not estimates, and the same command with the same seeds reproduces them.
Screenshots 01 and 04 were re-shot from the running game on 2026-10-20; the other two date from 2026-10-19. The book shot marks 15 species as found in the live game; that number matches the 2-hour simulated median. The hero image is an AI-generated illustration, not a game screenshot, labelled at the top of the page. If a number here disagrees with the game, the game is right; tell us in the changelog.
Who it is for
For people who want something running in another window that they tap now and then: the rhythm is minute-scale hunger and hour-scale income, not action density. Also for players who like breeding and codices — with four loci, every colour in your tank has a traceable pedigree.
Not for players who want objectives, levels, leaderboards or PvP: there is no win condition here, only the question of what colour your water is right now.
FAQ
Do I need an account or payment? No. It runs free in the browser, never asks for a phone number or ID number, and has no purchases.
Do I have to watch it? No. Offline settles for up to 8 hours at 55% and hands you a report; ignoring it will not kill the tank, it just slows output.
Can fish die? No. There is no death in this game — hunger and dirt cost output and growth, and water has a soft floor at 22.
How many species are there? 20. Exactly one is legendary (Dragon Whisker), and the tide pool downweights it further unless you are still missing it.
Why will this pair not produce that fish? Check that both are adult and fed above 0.25 satiation, and that the tank has room. Recipe odds are the total chance per clutch, not a guarantee.
Are there ads? No. This title has no ad slots and does not load any ad script.
Does progress sync? No. Saves live in this browser with a checksum against tampering; moving devices means moving your browser data.
What if it will not open? Try a current Chrome, Edge or Firefox. If it still fails, email contact@gamestrategists.com with your device and browser version.
Start keeping fish — Runs on its own subdomain · idle pace · progress saved on this device