[Kert Gartner]’s ASCII Aquarium turns a cheap yellow display (CYD) into a tiny simulated aquarium, complete with ASCII sea creatures each with their own behaviors. There’s all kinds of options and even timekeeping functionality, so the miniature water world can also pull its weight as a desk clock.
The fish and other animal movements are not a series of canned animations; each creature has its own behaviors and responses to things like feeding, which is accomplished by tapping on the screen. A hidden menu offers a wide range of configuration and display options, and there’s even an option to export screen contents as bitmaps.
Add a 3D-printed enclosure and the whole thing looks like a pretty nice weekend project. There’s even a display flip mode, just in case you have a spare 50 mm beamsplitter kicking around.
It’s a very clever use of a CYD that shows how good color and graphics can look when one designs with the hardware’s capabilities (and limitations) in mind.
The CYD is an ESP32-based development board with integrated touchscreen display, and is known for its affordable price and wide availability. This one would look great next to a CYD electric jellyfish.

If there was to be an originality contest on hackaday I’m sure that this one could be a potential winner.
Why don’t we have an originality contest?
That sounds like a great idea!
Geezus I just wrote paragraphs as to why that is a bad idea, and I think it was filtered out. Can I just say creativity is too subjective? If even my objections are filtered out…
Regardless of the subjectivity of the judging process, creativity contests exist. https://www.contestwatchers.com/
As hackers, we could have entry requirements that reinforce our values of accessibility, documentation, novelty, etc. And then apply the subjective random process to ranking.
If there was to be an antagonistic complaints contest on hackaday I’m sure that this one could be a potential winner.
Not really ASCII. Especially the plants. (Though it looks really cool and relaxing.)
I was about to write it doesn’t seem character-grid aligned. But it is really cute.
I know what you mean, but although it’s graphical and not everything is ASCII, I think it still definitely counts as an ASCII aquarium.
After all, a shark tank can have plants, gravel, and even other fish and still be a shark tank because it’s full of sharks.
And the fish and other animals in this tank are indeed rendered from glyphs using the ASCII encoding. You can see them in the source code as their genuine ascii selves.
That is honestly adorable. I’m thinking of how you could, reasonably subtly, use system performance values to adjust the behavior of the ecology onscreen.
That is lovely!
Do I feed the fish with a Matrix screen saver?
I’m an aquarium nerd before a tech nerd, but this comment tickled me as I use a product called Matrix in most of my tanks. It’s excellent at housing your filter’s beneficial bacteria which is the basis of which you keep fish alive (nitrogen cycle).
is this available in a terminal?
https://www.cyberciti.biz/tips/linux-unix-apple-osx-terminal-ascii-aquarium.html
Or even a graphics window. Why do we need more specialized hardware?
I have been running asciiquarium on my argon40 tiny little rpiZ2w pod display for several years. It is one big perl script.
Going to check this out.
For those who want ASCII Aquarium in the terminal I found this…
https://www.cyberciti.biz/tips/linux-unix-apple-osx-terminal-ascii-aquarium.html
So, it’s an Ascquariium?
There’s something fishy about that comment and this story.
Fantastic
Thousand thanks to [Kert Gartner] for this great project!
I’ve had lots of fun bulding it yesterday and adpoting the code to my H/W. I also learned some new things… The kids love it too!
Now I’m watching the fish, which is very relaxing…
About the character-grid alignment: I think it’s neccecary to keep the fish-motion ‘naturally’ even if real fish do not move like this at all…
Great project, thanks for sharing!
It makes hack a day. Sound really daft calling this ASCII when it obviously isn’t. ASCII is a character encoding, not a vibe.If you’re not literally sending ASCII codepoints to a terminal or display buffer, you’re not doing ASCII.You’re doing graphics that look like ASCII.That’s cosplay, not the real thing.Why don’t they call it something appropriate like, off the top of my head-
“bitmap‑font aquarium”
“monospace‑glyph aquarium”
“text‑styled graphical aquarium”
Read the code. You are incorrect.
void drawSeahorse(TFT_eSprite& s) {
if (!seahorse.active) return;
static const char* seahorseLeftRows[] = {
” ^^ “,
” / o) “,
“[__-/ “,
” /| “,
” / | “,
” \ | “,
” ( ) “,
” \_/ “,
};
Neat-looking project but won’t work on my V3 CYD (apparently it has an ST7789 display, not the ILI9341) and the display is interleaved weirdly. Oh well, off to download the project and modify it locally.
For anyone who’s never done this before: Download the .ino from Github, copy the user setup template to a new file and make the appropriate changes (in my case, replace the ili9341 driver include with that of the st7789, and set various parameters), comment out the include of user_setup.h in user_setup_select.h, and then include your new custom setup file.
Thanks for sharing this. Made my day. Love The “Sea Horsies”