February 24, 2026
Gliders vs. loop wars
Show HN: Cellarium: A Playground for Cellular Automata
GPU pixel toy makes Rust devs lose their chill
TLDR: A new GPU playground lets you build grid-based simulations using a trimmed-down Rust that compiles to shader code. Commenters split between “this is fast and fun” and “this isn’t real Rust,” with the “vibe-coded” slogan fueling jokes, memes, and a lively Rust-versus-shader flame war.
Show HN dropped Cellarium, a flashy playground where grid worlds evolve on your graphics card, and the crowd instantly split into teams hype vs. eye-roll. It’s built in Rust with a twist: you write rules in a mini slice of Rust, a macro turns them into shader code, and the GPU does all the work. The author calls it “100% vibe-coded,” which became a running gag and a battleground.
Fans are obsessed with the speed and size—think Game of Life at wild resolutions—plus live-tweakable parameters and silky visuals. “Finally, CA without the CPU bottleneck,” cheered the zoomers. But the spicy takes came in hot: purists grumped that the Rust subset lacks loops and pattern matching, calling it “shader cosplay.” Others demanded compute shaders, not “fragment shader antics,” and argued you should just write WGSL (the shader language) directly. Pragmatists clapped back: who cares, it’s fun and accessible.
The memes? Endless. “Vibe-coded = no tests, only vibes” became the catchphrase, glider GIFs flooded the thread, and someone bragged they did a similar demo in 100 lines of JavaScript, igniting the eternal Rust-vs-everything war. Love it or loathe it, Cellarium turned a niche math toy into a popcorn-worthy dev drama.
Key Points
- •Cellarium compiles a subset of Rust cell behavior into WGSL shaders via a procedural macro and runs them on the GPU using wgpu.
- •Struct fields annotated with #[derive(CellState)] are packed into rgba32float GPU textures, with up to 8 textures (32 floats total).
- •Simulations use double-buffered render passes; all cells read tick-N and write tick-N+1, avoiding in-progress state visibility.
- •Developers define neighborhoods (moore, von_neumann, radius(N)) and implement update/view methods, with optional init for GPU-side initialization.
- •A Neighbors API provides aggregation, filtered aggregation, differential operators, and spatial accessors; constants are tunable via TUI or JSON.