Wire is context containers for AI agents: isolated stores of processed knowledge (entries, embeddings, knowledge and provenance graphs) queried over MCP. Since day one, every container has been a Cloudflare Durable Object.
That is changing. We rebuilt the container runtime from the ground up, benchmarked it against the old one on identical data (same container, same questions, same judge), and the first workspaces have moved to a data plane we built ourselves. This is the story behind the benchmark.
This is not a “we left Cloudflare” post. I love Cloudflare and Wire stays on it everywhere it can: the API, the frontends, the control plane, and processing all still run on Workers. Durable Objects are close to a perfect fit for thousands of small, mostly idle stateful units, and I have not seen anything faster to build on. We left because of four structural limits, not reliability.
1. The vector index lived outside the object
Retrieval is the most important thing a container does, and the embeddings lived in Vectorize, a separate service. That is a network hop on the hottest path and a second copy of state that can drift. DO SQLite cannot load extensions, so the index could never come inside.
2. We wanted the compute next to the data
Retrieval is a multi-stage pipeline: hybrid candidate generation, fusion, query expansion, and a wide rerank. On Durable Objects only a thin slice of that could run where the data lives; the rest was exported to services around the object. Agents call containers inside tool loops, and every hop’s variance lands on the critical path.
3. Placement is creation-time only, and compute is always shared
Location hints exist at creation, but an object never moves afterward, so a container created from London serves an agent fleet in Virginia forever. And you cannot buy dedicated capacity for one tenant. We wanted placement that follows the callers, and isolation as a product tier: paid workspaces get their own process and machines.
4. You can’t self-host a Durable Object
... continue reading