I made a web game, List Animals Until Failure. You just name as many animals as you can. Play it and show me how far you get.
Inspired by a meme
Each animal grants a point. You can be vague, but you don’t get extra points for nesting categories. E.g. you only get one point for listing “mammal” & “primate” & “human”, since those aren’t different animals.
How it works

I used Wikidata and Wikipedia. Read on for technical details.
Datamining
This was the sort of datamining project that goes like this:
- I can parse [all these entities] and that will be a good start.
- That got me 90% of the way there, but there’s this other case I need to handle.
- Now I’m 95% of the way there, but there’s another edge case.
- Now I’m 98% of the way there, maybe if I parse this other thing too…?
General strategy
Mine Wikidata entities representing taxons. Use those to build a phylogenic (evolutionary) tree. Get the taxons’ names from Wikipedia (since Wikidata entities link to Wikipedia pages, and Wikipedia has good judgement about what things should be called, and has good redirects). If an entity lacks a Wikipedia article, it’s probably not worth including — or if it is, the player should write a Wikipedia article for it! Also get names from the Wikidata entity itself since I later realized this would cover some missing cases; e.g. Person is its own Wikipedia article, but Wikidata lists it as a name for Human.
Combining sources
The Wikidata entity doesn’t always have both taxon data and name data. For example, Cat represents the common name (and lacks taxon data), while Felis catus represents the species (and has poor name data).
How to reconcile this? The taxon known by this common name property links the two entities, so I use that. Get names from the common name entity and its Wikipedia page; get taxonomy from the species entity. I want to use common names as much as possible ingame; the phylogenic tree is just a means to construct a hierarchy of terminology.
More cases
Paraphyly
Ducks, egrets, gnats, buzzards, hawks, mites: none of these are defined solely by a phylogenic taxon; they’re what you might call “form taxa”. In other words: iff it looks like a duck and quacks like a duck, it’s a duck.
Sometimes the game uses the closest common ancestor of the group. So a player who lists “mite” only gets a point for “arachnid” and can’t score separately for “spider”. This is a bummer since tarantulas definitely aren’t mites, but it’s otherwise hard to define “mite” in a strict hierarchy.
In other cases, there are better solutions. For example, Trout doesn’t even have a paraphyletic group infobox, maybe because it’s so colloquial a term, and even if it did, many barely-related fish are called trout. So I manually add a redirect to a single representative for the group: “trout” becomes “brown trout”.
More extreme example: If you know of Carcinization, you can imagine the difficulty of defining crabs. So “crab” becomes “brown crab”.
Away from phylogeny
A wasp is any Apocritan that isn’t a bee or an ant.
(diagram by several Wikimedia Commons contributors)
Everything in Apocrita is a wasp, except bees and ants.
If you’re an entomologist, or an evolutionary biologist, you might say “well, bees and ants are just wasps, really”, and I respect that. But colloquially, bees and ants aren’t wasps. If this game insists on a purely phylogenic approach, then it’s like, come on, I can’t get a point for saying wasp and ant? That’s unreasonable. If I ask a 2-year-old to list animals and she lists wasp and ant, I’m not gonna break out the DNA sequences like “Ohh well evolutionarily ants are technically wasps”. I’m gonna say yeah, good job, that’s two animals.
So I promoted bees and ants to siblings of wasps rather than descendants. Now bee, wasp, and ant count as different animals. My animal term hierarchy is thus not phylogenic; phylogeny is just its starting point.
I sorted out other groups, too; for examples, these groups of groups of birds distinguished chiefly by size: crows/ravens, hawks/eagles, ducks/geese/swans. (Ravens are bigger; Eagles are bigger; Geese are bigger and swans are yet bigger.)
My friend Devin argued for a strictly phylogenic hierarchy:
evolutionary biologists are professional animal listers
so they should be the source of truth
and I think it’s cool to learn that wasps or egrets or stuff are paraphyletic
Phylogeny can be fun (e.g. Metazooa) but that's not the game I wanted to make. Maybe I’m failing to educate my players about phylogeny, but I’m learning a lot about phylogeny myself; so it averages out, you see.
Initial page load includes the full list of animals; the game avoids network calls to instantly respond to guesses. Initial load is 18MB compressed, 58 MB decompressed. That's about how much outlook.com loads while logged out (19MB compressed, 33MB decompressed) which makes you wonder why a marketing page needs as much information as a list of every animal known to humanity.
Visuals
I learned about SVG filters.
Here's the colorful background that shows up when you exceed 50 points. It's just the raw output of the builtin turbulence filter. I like it.
The source code is pretty short.
<svg width="400" height="400">
<filter id="f" x="0" y="0" width="1" height="1">
<feTurbulence numOctaves="1" baseFrequency="0.008" stitchTiles="stitch" />
</filter>
<rect width="400" height="400" filter="url(#f)" />
</svg>
These clouds show up if you list enough birds in a row.
The source code is only a little longer.
<svg viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg">
<filter id="f" width="1" height="1" x="0" y="0">
<feTurbulence numOctaves="5" baseFrequency="0.015" stitchTiles="stitch"
width="400" height="400" />
<feColorMatrix type="matrix"
values="0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 -.3 -.7 2 0" />
</filter>
<rect x="0" y="0" width="400" height="400" style="filter:url(#f)" />
</svg>
Emoji summary
At game over, you get an emoji summary like this:
https://rose.systems/animalist
144 animals listed
🦀🦞🐦🐦🕊🕊️🦅🦅🐦🐟🐠🦈🦁🐅🐻🙀🐜🐛🐌🐦🐦🐦⬛🐦⬛🐦𓆣🐪🐊🐬🦈🦈🦈🐟🐡🦔𓇼🕸️🐦⬛🕷🐛🐋🐳🐋🐄🦌🐺🐕🦬🦖🦕🐒🦍🦡🦨🐰🐙🐌🪱🪰🐛🦭🐓🦢🦆🐌🐛℥🐆𓅣𓆉🐢🪰🪰🪰🐛🪳🐛🦥🐦🐛🐛🐝
Internally I call the emoji “mononyms” because they aren’t all emoji. Any single-character alias for an animal is a possible mononym for that animal. (Or any more-specific version of that animal; any bird becomes 🐦, unless a more specific mononym applies, such as 🦅 or 🦉.)
Most of these aliases arise from Wikipedia redirects. Wikipedia typically redirects emoji to what they depict, unless the emoji itself is notable. For example, 🕷 redirects to Spider. Some mononyms I had to add manually; e.g. 🦖 is somehow notable enough for an article.
℥ means ounce (as in the unit), but “ounce” also archaically means snow leopard. This silly indirection is cute enough to leave in.
1600s bestiary excerpt: The Ounce
The Ounce is a moſt cruel Beaſt, of the quantity of a village or maſtiffe Dog, having his face and ears like to a Lions, his body, tail, feet, and nails like a Cats, of a very terrible Aſpect, his teeth ſo ſtrong and ſharp, that he can even cut Wood in ſunder with them; he hath alſo in his nails ſo great ſtrength, that he only fighteth with them, and uſeth them for his greateſt defence…
The gall of this Beaſt is deadly poyſon, it hateth all creatures, and deſtroyeth them, eſpecially men; and therefore it may well be ſaid to be poſſeſſed with ſome evill ſpirit. It loveth none but his own kinde. And thus much for the Ounce.
The History of Four-footed Beaſts and Serpents, p441-442
Remaining bugs
There are still animals requiring manual intervention. Goanna for example isn't easily dataminable; it's a normal article with no infobox, and its Wikidata entity lacks a taxon. Maybe I could iterate over every article in every category like “Reptile common names” and look for a list of animals under a Species heading, but sometimes it's headed Taxonomy or Classification or Genera, and sometimes it's in paragraph or table form. So these cases are staying manual for now.
Hit me up with bug reports. Or ideas. Or complaints, or whatever.