One SIM, Every Site: We Shipped Private-5G Roaming
Six weeks ago we stood up our first private 5G core — our own mobile network, running on hardware we own, serving SIM cards we write ourselves. This week we stood up the second one, on a customer’s construction jobsite. And with two cores running, a question I’d been waiting for finally became real:
why should a SIM card care which of my networks it’s standing on?
On the public carriers, that problem was solved decades ago — it’s called roaming, and it works because carriers sign agreements and exchange subscriber data behind the scenes. On private 5G, there is no “behind the scenes.” Every core is an island. A SIM written for the lab network is a brick at the jobsite, unless someone copies its credentials onto the second core by hand — and hand-copying secret key material between production networks is exactly the kind of chore that stops happening the week it gets busy.
Roaming as an approval list
So we built roaming into the platform. Every SIM we issue is recorded in WestHub — our operations platform — including its credentials, encrypted at rest. Each deployed core runs a small agent that dials home. That combination turns roaming into something almost embarrassingly simple: an approval list.
Open the SIM, tap the globe, check the sites it’s allowed to visit. The platform pushes the subscriber record onto each approved core over the management channel, in seconds. Uncheck a site and the record is removed just as fast. Because all our cores broadcast the same network identity, the SIM simply attaches to whichever approved site’s radios it can hear. The visited site’s dashboard shows its guests; the home site shows “Roaming @” wherever the SIM is actually standing. Revoke is one click, and deleting a SIM cleans it off every core it was ever granted to — no orphaned credentials left behind on somebody’s jobsite.

The part that still surprises people
There is no data center in this story. The entire 5G core — the same class of software that runs inside a carrier’s regional facility — runs as a workload on the Peplink Balance 1350 EC’s edge compute, the same appliance that handles the site’s bonded SD-WAN internet. One box: private cellular core plus resilient WAN.

Keeping the core on the site it serves is why the numbers look the way they do: on this deployment we’re measuring 9 ms of latency at three-quarters of a mile from the radio. Local traffic never leaves the property — a camera talking to a recorder on the same jobsite doesn’t ride anyone’s backhaul, including ours. And because every core dials home to the West Private 5G platform, the whole fleet — health, radios, SIM inventory, roaming approvals, per-second telemetry — sits in one pane of glass that our NOC watches.
What shipping it actually looked like
The honest version of the story is that the feature worked on the first try — and then verification caught three real bugs the same afternoon, which is the part I care about.
The first core was built from source; the second was installed from packages. Same software, different filesystem layout, different database shell. The provisioning path assumed the first layout, and — this is the insidious part — one of its failure modes reported success. The push claimed the SIM was “already present” on the new core when in fact the tooling it needed wasn’t there at all. If we had trusted the green checkmark, we’d have shipped a roaming feature that quietly did nothing. Instead we checked the core’s actual subscriber database, found it empty, and fixed both the compatibility gap and the false-success bug before dinner.
The third bug was subtler: a default value for the network slice identifier that didn’t match what the radios broadcast. The SIM would provision perfectly and then never register — the radio and the subscriber record politely disagreeing about which slice they were on. Same root cause had bitten us once before in a different code path. Recurring bugs are the tax you pay for defaults that live in more than one place; that default now lives in exactly one.
The moment it worked
The proof was anticlimactic in the best way. The SIM in my backpack router — written weeks ago for the lab — was approved onto the jobsite core with one checkbox. The router’s status page flipped to Connected to WestP5G, the jobsite dashboard showed one visiting SIM, online, and traffic started flowing through a core a thousand miles from where that SIM was born.

That’s the actual product, by the way. Not the checkbox — the shape of it. Private 5G stops being a collection of islands and starts being a fleet: one pane of glass, one SIM inventory, one approval model, however many sites. A crew that moves between jobsites takes their connectivity with them. A demo kit works in any building we’ve lit up. And the customer never thinks about any of it, which is the point.
More on the private 5G program at west5g.com/private-5g.