Kyle Givler

projects/packetgarden

PacketGarden

I have servers that spend their days being poked by scanners and bots. PacketGarden takes those unsolicited connections and grows something nicer out of them: a little garden you can leave open and watch.

Public alpha · .NET 10 · C# · NATS · SSE · PixiJS / Canvas

Composting Internet noise

A TCP listener on a public server attracts an endless supply of random connection attempts. Most aren't interesting individually, but together they make a constantly changing stream of activity. I was already collecting that with tcpnoise and Noise Observatory.

Instead of another dashboard, I wanted something worth glancing at. Listening ports become plant species. Repeated sightings affect how substantial the plants look. Sometimes something rare grows. The connections are real; the botanical interpretation is ridiculous.

From connection attempt to garden

Small C sensors observe traffic on exposed hosts and publish events to NATS. The ASP.NET Core backend validates incoming messages and turns them into deliberately small growth events. Each connected browser receives them over Server-Sent Events and maintains its own garden locally.

Weather comes from a different feed. The Noise Observatory reports aggregate traffic and a weather level. PacketGarden polls the snapshot for rain, puddles and the occasional lightning strike. A thunderstorm is not a security alert — it's just a dramatic way to show that the network has been busy.

The garden doesn't need a gardener

The 32 × 20 grid has space for 640 plants. They sprout, mature, fade and eventually disappear. A strong newcomer may displace a weaker specimen when the garden is full, although a few rare species are protected. Wild grass grows and spreads on its own, then clears out of the way when a new plant takes its cell.

There are tiny visitors, pointless collectibles, occasional mutations, and a Gnome Incident in which four combatants fight over absolutely nothing and leave. Optional synthesized audio adds growth sounds and thunder. Visitors don't need to click anything or keep score.

The default garden uses cached PixiJS artwork; the original Canvas version is still available. The visuals — particularly the grass — are a work in progress, but the garden is already growing from live input.

Real input, small public output

Public growth events include a plant type, listening port and vigor, plus an optional bounded sensor label and sighting count. The browser never receives raw source IP addresses, captured payloads or banners. Those aren't needed to draw a flower.

Garden state belongs to each browser. Refreshing starts again, and events missed during a disconnect aren't replayed. SSE subscribers have bounded queues so a stalled connection cannot accumulate an unlimited history in the server's memory.

Technology

.NET 10 / ASP.NET CoreC#C sensors NATSServer-Sent EventsPixiJS / WebGL CanvasWeb AudioLinux / systemd

Live public alpha

PacketGarden's first public alpha is online. It's meant to be watched, not played or managed. Fuller grass, longer-term testing, and perhaps a gnome landscaping crew are still on the wishlist.

If it looks quiet when you first open it, give it a little time. The plants arrive with actual network traffic.