About

Why CloudBurrow exists.

Deploying to Google Cloud for every change is slow, and an emulator that quietly returns plausible answers is worse than one that says UNIMPLEMENTED. CloudBurrow's rule is simple: never claim support you have not demonstrated.

Proof, not promises

Every operation CloudBurrow emulates has exactly one status, and the status is generated, not written by hand. These are the values the compatibility matrix uses (docs/coverage):

Verified
An official-SDK compatibility test, linked from the row, exercises it.
Served, not yet verified
Served, with no official-SDK test yet.
Refused, field named
A compatibility test proves the upstream emulator refuses it.
Returns UNIMPLEMENTED
CloudBurrow returns UNIMPLEMENTED, proven in-process.
Not served
Not registered on any port.
Not claimed: no test covers it
An upstream-backed method no test covers, so nothing is claimed.

The promotion rule

An operation becomes Verified only in a pull request that adds a test driving it through an official Google SDK, such as cloud.google.com/go/… or google-cloud-* for Python. A curl invocation, a handwritten HTTP request or an internal unit test does not count: those test an understanding of the API, not the client (docs/compatibility.md).

From Unknown to Verified An operation moves from Unknown to Served to Verified. The gate before Verified is a merged test through an official Google SDK; a curl script bounces off it, because it does not count. Off to the side, an operation that is not served returns UNIMPLEMENTED, and a field the adapter cannot map is refused with the field named. merged test through an official Google SDK curl does not count Unknown Not claimed: no test covers it Served Served, not yet verified Verified Verified Returns UNIMPLEMENTED Refused, field named

Coverage is generated, and checked

The per-RPC coverage tables are generated from the Go proto descriptors and the // covers: annotations on the compatibility tests. CI re-runs the generator in check mode and fails when the checked-in copy is stale or an annotation is wrong (docs/coverage/README.md).

The acceptance flow runs on every merge

Every merge runs the compatibility suite against a live instance, and the acceptance workflow on an instance of its own: an object is uploaded, a notification goes to Pub/Sub, a Cloud Run worker reads the object and writes a result, and the result is read back. None of those tests may skip; the job fails unless every one passes (what CI runs, and why).

The acceptance flow Five steps, each through an official SDK: Upload an object, then Notification to Pub/Sub, then Cloud Run worker reads it, then Writes a result, then Result read back. Step 1 Upload an object official SDK Step 2 Notification toPub/Sub official SDK Step 3 Cloud Run workerreads it official SDK Step 4 Writes a result official SDK Step 5 Result read back official SDK

Independent of Google

CloudBurrow is built by SweetTech, which also runs this website. It is free and open source under Apache-2.0; see open source and credits.

CloudBurrow is not affiliated with, endorsed by, or sponsored by Google LLC. "Google Cloud", "Cloud Storage", "Pub/Sub", "Cloud Tasks", and "Cloud Run" are trademarks of Google LLC, used here only to describe the APIs this project aims to be compatible with.

From the project's NOTICE file. More on names and logos: trademarks.

Read the code and the tests behind every claim

The source, the coverage tables and the issue tracker are all on GitHub.

Get started