Hi everyone! I’m a solo indie dev, and over the last weeks I’ve been building a series of small, silly 3D games with three.js. I wanted to share them here, because three.js made the whole thing possible.
The constraint I set myself: no external assets at all. There are no .glb models, no textures and no audio files. Every character, prop and level is built from three.js primitives and merged geometry at runtime, and every sound effect and music track is synthesized with the Web Audio API. Each game ends up as one JS bundle of about 800–900 KB (around 210 KB gzipped), fonts included, so they start in a couple of seconds even on phones.
The games (all free, no sign-up, desktop + mobile):
Too Many Doggos! – walk up to 8 dogs at once with simulated rope leashes that tangle, braid and wrap around lamp posts
Too Many Doggos!: Play free online | Glowbit Games
Jelly Gulp! – jelly sumo on a crumbling hex-tile cake; swallow smaller jellies (you can see them through your translucent body) and spit them back out
Jelly Gulp!: Play free online | Glowbit Games
Kitty Vac! – a cat on a robot vacuum eats everything smaller than itself, from crumbs to skyscrapers
Kitty Vac!: Play free online | Glowbit Games
Gecko Yeet! – one-button swinging with a sticky tongue across 40 seeded procedural levels
Gecko Yeet!: Play free online | Glowbit Games
Achoo! Dragon – a baby dragon sneezes fireballs and gets launched backwards by the recoil
Achoo! Dragon: Play free online | Glowbit Games
Buzz Brigade! – survivor-style roguelite where your bee swarm is both your weapon and your health
Buzz Brigade!: Play free online | Glowbit Games
Conga Planet – lead a conga line around tiny spherical planets and loop around monsters to capture them
Conga Planet: Play free online | Glowbit Games
Stack: three.js r186, TypeScript, Vite, and pmndrs/postprocessing for bloom and the final grade. The game logic runs in a fixed-timestep simulation that is separate from rendering, which let me run bot players headless in Node to test difficulty and balance across every level without opening a browser.
A few things I learned:
- Merging procedural geometry and reusing a small set of materials keeps draw calls low, even with lots of props on screen.
- Metal-looking materials (spoons, crowns, gold) render almost black without an environment map, so a
RoomEnvironment+PMREMGeneratorgives you cheap reflections without shipping an HDR file. - Procedural Web Audio is tiny and surprisingly expressive: in Kitty Vac every slurp in a combo plays the next note of a scale.
I’d love any feedback on performance, especially on low-end phones, or on the visuals. Happy to answer questions about how any of it is built!


