---
slug: cloudflare-os-xl-08-reaching-private-things
title: Cloudflare OS: reaching private things
canonical: https://miscsubjects.com/a/cloudflare-os-xl-08-reaching-private-things
---

*Part 8 of [Cloudflare OS XL](/a/cloudflare-os-xl), an inventory of the Cloudflare platform this build does not have installed.*

Everything this build reaches is reachable over the public internet. Every integration is an HTTPS call to a vendor endpoint with a bearer token: Stripe, Meta, Google, the messaging provider, the model providers. Every one of those is public by design and the arrangement is correct.

The exceptions are the interesting part. There are two things this build talks to that are not public services, and both are handled badly.

The first is the owner's machine. Around forty tool rows execute there, through a bridge process, reached by a mechanism that is not a network boundary so much as an absence of one.

The second is any database that is not D1. There is a `CLI_PSQL` row. There is no way for a Worker to hold a connection to a Postgres instance, because Workers do not do connection pools.

Four products address this space, and this is the part of the series where the honest answer is mostly "not yet".

## Hyperdrive

Hyperdrive accelerates access to an existing database from Workers with global connection pooling and query caching. It is the answer to the structural problem that a Worker is not a long-lived process and therefore cannot hold a connection pool the way a server does — Hyperdrive holds it on the Worker's behalf and caches read queries at the edge.

```
wrangler hyperdrive create loop-pg --connection-string="postgres://..."
```

```toml
[[hyperdrive]]
binding = "PG"
id = "<config-id>"
```

The account has zero configs, which is correct today: there is no external Postgres. Everything relational lives in D1.

What would change that is a specific, foreseeable thing. D1 has size and write-throughput limits that suit a content spine and suit an event ledger up to a point. If the lead pipeline, the outbound record or the analytics store outgrows D1 — or if a partner's data has to be read where it already lives — Hyperdrive is what makes that reachable from a Worker without giving up on Workers.

**Verdict: no, today. Install the day an external database exists.** Listing it as a current gap would be inventing a need.

## Workers VPC

Workers VPC securely connects a private cloud to Cloudflare, so a Worker can reach services that have no public endpoint.

Same shape of answer as Hyperdrive: this build has no private cloud. There is no VPC, no internal service, no bastion. Every dependency is either a public SaaS API or a binding.

It is worth naming for one reason. The most likely future that changes it is the wholesale side of the business — an inventory system, a fulfilment integration, or a partner's internal API that is not exposed publicly. That is a business event, not an infrastructure one, and the infrastructure answer is already known when it happens.

**Verdict: no, today.**

## Cloudflare Tunnel

This one is different, because the private thing already exists.

The owner's Mac runs a bridge process, and Workers reach it. Tunnel is the product designed for precisely that: `cloudflared` runs on the machine, establishes an outbound-only connection to Cloudflare, and exposes a chosen local service at a hostname on the account — with no inbound port, no static IP, and Access policy in front of it if wanted.

The improvements over what exists are concrete rather than theoretical:

- **Outbound-only.** Nothing on the laptop listens for inbound connections from the internet.
- **A real hostname with a real certificate.** The bridge becomes `bridge.<domain>` rather than an arrangement.
- **Authentication in front of it.** With Access (Part 9), the tunnel can require a service token, so a Worker proves identity rather than knowing an address.
- **Observability.** Tunnel connection state is visible on the account. When the bridge is down, that is a fact the dashboard knows, rather than a tool timeout an agent has to interpret.

The important thing this does *not* do is fix the underlying liability. A tunnel to a sleeping laptop is a tunnel to nothing. Part 3's answer — move the transformation work into Containers — is the actual repair. Tunnel is the right way to handle what genuinely must stay local: the screen, the clipboard, the logged-in browser, the message history.

**Verdict: install, alongside the Containers migration.** Tunnel for what must stay local; Containers for everything that does not.

## mTLS certificates

A Worker can hold a client certificate as a binding and present it when calling an API that requires mutual TLS.

No current integration requires it. Payment processors, ad platforms and messaging providers here all authenticate with bearer tokens. Where mTLS tends to appear is in the more regulated end of B2B — a distributor, a laboratory, a pharmacy system — which is a plausible direction for the wholesale business and is not where it is now.

**Verdict: no, today.** One binding away when a partner asks.

## Why three "no"s in one part

This is the part of the platform this build has least need of, and that is a finding rather than a gap. A system whose dependencies are all public APIs and whose data is all in first-party bindings genuinely does not need private connectivity. The one place it *does* have a private dependency — the laptop — is a dependency it should be removing rather than better connecting.

The exception is worth stating precisely: install Tunnel for the residue that is irreducibly local, and treat the size of that residue as a number that should be going down.

## Verdicts

| Product | What it replaces here | Verdict |
| --- | --- | --- |
| Cloudflare Tunnel | An ad-hoc bridge to the owner's Mac with no identity or hostname | **install** — for the irreducibly local |
| Hyperdrive | Nothing today; there is no external database | **no** — until one exists |
| Workers VPC | Nothing today; there is no private cloud | **no** — until one exists |
| mTLS certificates | Nothing today; every partner uses bearer tokens | **no** — one binding away when asked |

Next: [Part 9 — the security surface](/a/cloudflare-os-xl-09-the-security-surface).

