An LLM wrote 100,000 lines putting Kubernetes in a browser; he read every one
Almost none of the code was written by a human. That's usually the setup for a disaster. Sam Rose's defense: he reviewed every line and wrote 2,000 tests asserting his browser cluster behaves exactly like a real one.
An ngrok developer educator ported a slice of Kubernetes to TypeScript so a cluster runs entirely in the browser: pods, DNS, deployments, garbage collection, all client-side. LLMs wrote almost all of it, roughly 100,000 lines across 552 commits in two months.
His answer to the inevitable 'is this just slop?': read every line, plus 204 integration tests and 1,855 unit tests asserting it matches a real cluster via the official k8s client. An SRE in the thread noted the easy 80% is done; ConfigMaps, Secrets and Ingress are where the pain lives.
A Kubernetes cluster that boots in a browser tab

Sam Rose, a senior developer educator at ngrok, ported enough of Kubernetes to the browser that a cluster runs entirely client-side. He calls it webernetes: a partial TypeScript reimplementation of the kubelet binary (the node agent that runs pods), plus several controllers and a browser-based container runtime. It handles pod lifecycles, cluster DNS, networking, container garbage collection, IP allocation, and Deployment/ReplicaSet tracking. The point isn't production; it's interactive Kubernetes teaching material, where an educator can spin up a specific workload to illustrate one concept, fresh in every reader's browser.
He deliberately did not compile real Kubernetes to WebAssembly. A Go "hello world" alone is about 540 KiB gzipped, already larger than webernetes' entire ~140 KiB footprint, and Kubernetes leans on system-level APIs a browser doesn't have, which would panic on contact.
The honest part: almost none of it was hand-written
Rose is upfront that nearly all the code came from an LLM: roughly 100,000 lines across 552 commits in 629 files over two months, with one brutal week of Deployment work costing $1,811.64 in tokens. He anticipated the obvious objection and answered it with two claims of discipline:
"I did two things that I think make this a slop-free project: 1. I reviewed every line of code. 2. I created hundreds of tests that assert webernetes behaves the same as a real cluster." — Sam Rose, quoted from the post via the thread
Those tests aren't decorative: 204 integration tests and 1,855 unit tests, many ported from Kubernetes itself, checked against the official kubernetes-client/javascript API so the browser cluster's responses match a real one's.
The thread: the review discipline is the actual product
What resonated in the discussion wasn't the browser trick. It was the workflow. A recurring read: when an LLM can emit a shocking volume of code, the value migrates entirely to review and tests.
"AI can generate a shocking amount of code, but the actual value is in the review discipline, and tests around it… testing behaviour against k8s instead of just trusting 'looks right.'" — an engineer building an offline plant-identification app
One founder who is rewriting Postgres in Rust with AI described the same lesson turned into process: an audit skill that isolates a small chunk of code, checks it against a growing list of known anti-patterns, and blocks the merge if the audit doesn't pass, a discipline he keeps extending as new slop patterns surface.
The counter: the easy 80% is done; the pain is everything after
The skeptics didn't dispute the craft. They disputed the finish line. An SRE pointed at Rose's own list of what's missing (ConfigMaps, Secrets, pod resources, persistent volumes) and named it the start of the real work:
"Deployment, Replica Sets and Services are generally the easy part… this is initial start to the madness followed by Ingress Controller and all little weird crazy stuff that Developers do that drive our lives crazy." — an SRE who runs clusters for 100+ devs
A harder objection questioned the title itself: giving yourself (or your LLM) a fork of Kubernetes source to maintain forever is a liability, and "ported to the browser" oversells a reimplementation that runs no real containers. That tension is the honest edge of the whole project: as a teaching tool that behaves like a cluster it's genuinely clever, but every controller it adds is another slice of Kubernetes to keep in sync by hand, or by the same LLM that wrote it.
Get breakdowns like this every day
The top Hacker News stories, unpacked — by email, Telegram, or RSS.
'Parse, don't validate' in a language that fights you: TypeScript's structural typing problem
The idea is old and beloved: turn validation into a type the compiler remembers. The trouble, one blogger argues, is that TypeScript treats every same-shaped type as identical, so an 'Email' is just a string and the guarantee evaporates.