The game viewport is a Canvas surface. It owns projection, culling, labels, sprites, trails, particles, picking, and camera-local interaction. It does not own mining rules, faction meaning, NPC behavior, or durable object lifecycle.

That is the difference between rendering an authored world and quietly building a second simulation in the browser.

server projection -> viewport frame -> primitive draw commands -> Canvas

A ship, station, asteroid field, or event marker can have rich meaning in the world model. By the time it reaches the renderer, it should be concrete draw data: mask sprite, text, line, arc, reticle, particle burst, pick id, layer, and style hints.

The payoff is boring in the best way: React does not know about actors, the renderer does not know gameplay semantics, and the server remains authoritative.