Hi everyone!
I’ve been building GitHub Planet, a Three.js project that turns GitHub activity into a living 3D planet.
Website: https://githubplanet.dev
Instant demo — no login required:
Source: https://github.com/nitr0yukkuri/githubplanet
A developer’s GitHub activity affects the appearance of their planet — programming languages, contributions, and development history are reflected in the world.
But I wanted to go a little further than simply changing the planet’s color.
Each programming language has its own visual identity.

CSS — Directional Color Flow
The CSS planet uses an animated directional color flow across its surface.
I wanted it to feel fluid and constantly changing, while still keeping the shape of the planet readable.

C++ — Plasma + Lightning
The C++ planet uses an animated plasma-like surface together with lightning effects.
Compared with the CSS planet, this one is intentionally much more energetic and unstable.

TypeScript — Defensive Shell
The TypeScript planet is surrounded by multiple transparent shell layers.
The idea was to visually represent the defensive nature of strong typing as structures protecting the planet.
There are currently 7 language-specific planets:
- CSS — directional color flow
- C++ — plasma + lightning
- Go — atmospheric wind
- TypeScript — defensive shell layers
- JavaScript — reactive golden surface
- Rust — desert terrain + animated dust
- Vue — reactive wind
On the Three.js side, I’m experimenting with:
- custom GLSL shaders
ShaderMaterialMeshStandardMaterial.onBeforeCompile()- transparent layered meshes
- additive blending
THREE.Points- animated shader uniforms
- particles and atmospheric effects
- language-specific materials
One of my favorite parts of the project is connecting real GitHub activity to the 3D world itself.
When someone pushes code, the event goes through:
GitHub Push → Webhook → Socket.IO → Three.js
and appears as a shooting star in real time.
So the planet isn’t just generated once from GitHub data — development activity can actually leave a visible trace in the universe.
I’d love to hear some thoughts from people with more experience building shader-heavy Three.js projects:
For effects like these, would you keep extending MeshStandardMaterial with onBeforeCompile(), or would you move more of the language-specific planets toward dedicated ShaderMaterial / TSL implementations?
And visually, I’m also curious:
Which of the language-specific planets feels the most distinct at first glance?
Thanks for checking it out!