I’ve been wanting to build a game for a long time. Not a big one - just something small and self-contained that I could actually finish. So when I had a few free weekends, I sat down with Three.js and built Tiny Planet.

It’s a short browser game. You’re an astronaut who’s made a bad landing on an uncharted moon. Your communicator is in pieces, scattered across a tiny procedural world, and you need to repair it and call for rescue.

No install, no sign-up. Open the page, hit start, play.

The pitch

You wake up next to a crashed landing pod. The planet is small - genuinely small, you can walk around it in a minute or two - so there’s no map, no fast travel, nothing to get lost in. You just explore.

As you wander, you find things: an ancient altar with empty sockets that want to be filled, a still pond with something glinting under the surface, a cave mouth you can’t walk into without waking whatever’s sleeping in there. Each of these is hiding a piece of your broken communicator. Put the pieces back together and you can signal the rescue shuttle.

That’s the whole game. It takes about fifteen minutes to finish.

Why tiny

The “tiny” isn’t just aesthetic - it’s a design constraint that made the whole project tractable. A small world means a small scope. I didn’t need quest systems, map UI, save files, or a HUD full of icons. The player can see most of the world from anywhere on the surface, so I could lean on sightlines for storytelling rather than markers or objective text.

It also meant I could afford to be generous with detail: bioluminescent plants, drifting fireflies, footprints that fade behind you, a rescue ship with a working tractor beam. The budget I’d have spent on a large world went into small-world atmosphere instead.

Technically

It’s pure Three.js on top of Vite, no game engine. The planet is a subdivided icosahedron with a noise function driving surface height. Props are placed by raycasting onto the mesh, so trees and rocks sit properly on the curvature. Collision is a cylindrical collider registry that ejects the player horizontally when they walk into something - simple but enough for a game where you don’t jump on things.

Systems communicate through a tiny pub-sub I wrote in about twenty lines. When you pick something up, a pickup.collected event fires, the inventory reacts, the story system reacts, and whatever spawned the pickup cleans itself up. Nothing knows about anything else it doesn’t need to. That decoupling was the single most useful decision in the codebase - it meant each puzzle could be written as a self-contained module that subscribed to a handful of events.

The atmosphere is a Fresnel shader on a slightly-larger sphere around the planet. The fog blends the horizon into space. The starfield is a single Points mesh with a custom shader for twinkle. Everything renders in one scene.

Controls

W / S        run forward / backward
A / D        turn left / right
Shift        walk (hold while moving)
Space        jump
E            interact / pick up
F            throw held item
I            toggle inventory
Scroll       zoom camera

No mouse required. This was deliberate - I wanted it to feel like an arcade game you could play on a laptop trackpad on a train.

A reminder

The thing I didn’t expect when I started this was how much fun I had.

When you write software for a living, it’s easy to forget that the activity itself is enjoyable. Most of the day-to-day is shaped by things that aren’t the code: deadlines, stakeholders, reviewers, the weight of a system that thousands of people depend on. You start to measure your work by whether it shipped, not by whether you liked making it. I think that’s a fair trade for the work I do - the stakes are part of why it matters - but it means the pleasure of just building a thing gets a bit squeezed out.

Tiny Planet had none of that. Nobody was waiting for it. There was no ticket, no standup, no design review, no postmortem hanging over a decision. If I wanted the fireflies to glow a different colour, I just did it. If I wanted to spend an evening making footprints fade behind the player, that was allowed. I’d forgotten how good that feels.

So this is partly a release post and partly a nudge - if you write software for work, and you haven’t built anything silly lately, go build something silly. Not a side project with a business plan. Not a startup idea. Just a thing. You might enjoy yourself more than you remember.

Play it

tinyplanet.tucker.wales - runs in any modern browser, keyboard only, no install. It takes about fifteen minutes. Headphones recommended.

If you finish it, I’d love to hear what you thought.