Starts by default

Buckets and objects, with the edges tested.

The Cloud Storage JSON and XML APIs: buckets, objects, uploads, versioning, lifecycle and notifications to Pub/Sub.

Backed by: CloudBurrow's own server (next release); v0.1.0 uses fake-gcs-server CloudBurrow next release

In the console

Cloud Storage buckets listed in the local console
Captured 2026-09-28 from main @5da2bd0. Product icons hidden.
Objects in the example-assets bucket, with folders and object actions
Captured 2026-09-28 from main @5da2bd0. Product icons hidden.

What it covers

Cloud Storage is started by default. In v0.1.0 it is backed by fake-gcs-server; on main it is CloudBurrow’s own server, built to the API, and the only Cloud Storage backend (next release). Methods it has not built answer 501 naming the method, rather than a plausible empty answer.

  • Buckets and objects over the JSON API
  • Resumable uploads, ranged reads, generation preconditions and compose
  • Notifications to Pub/Sub
  • Object versioning, soft delete, retention policies and holds next release
  • Lifecycle rules, CORS and HMAC keys next release
  • The XML API with multipart uploads next release

Tested snippet

From docs/examples/ at main 82a2eb9. CI runs these blocks against CloudBurrow.

Python · Cloud Storage
import uuid
from google.cloud import storage

client = storage.Client()
bucket = client.create_bucket(f"example-{uuid.uuid4().hex[:12]}")
bucket.blob("hello.txt").upload_from_string("hello")
assert bucket.blob("hello.txt").download_as_text() == "hello"
bucket.delete(force=True)

This block is run by CloudBurrow's Python suite in CI. If it stops working, CI fails. docs/examples/python.md

Node.js · Cloud Storage
import assert from 'node:assert/strict';
import { randomUUID } from 'node:crypto';
import { Storage } from '@google-cloud/storage';

const apiEndpoint = process.env.STORAGE_EMULATOR_HOST;
delete process.env.STORAGE_EMULATOR_HOST;
const storage = new Storage({ apiEndpoint, projectId: process.env.GOOGLE_CLOUD_PROJECT });

const [bucket] = await storage.createBucket(`example-${randomUUID()}`);
await bucket.file('hello.txt').save('hello', { resumable: false });
const [data] = await bucket.file('hello.txt').download();
assert.equal(data.toString(), 'hello');
await bucket.deleteFiles({ force: true });
await bucket.delete();

This block is run by CloudBurrow's Node.js suite in CI. If it stops working, CI fails. docs/examples/node.md

What's verified

Cloud Storage (JSON API)

15 of 32 RPCs Verified in v0.1.0

Cloud Storage (JSON API) in v0.1.0: 15 Verified of 32

34 of 87 RPCs Verified on main next release

Cloud Storage (JSON API) on main: 34 Verified of 87
Every Cloud Storage (JSON API) RPC, with its test →

Not supported

  • Signed URLs: v0.1.0 accepts signed URLs on shape alone; on main, CloudBurrow's Storage server verifies V2 and V4 signatures and fails closed next release
  • Bucket IAM is stored, never enforced (#504) next release
  • ACLs, object IAM, managed folders (#828), folders, bulkRestore and the gRPC API answer 501 next release
  • Bucket listing is not scoped by project

Source: docs/compatibility.md at main 82a2eb9.

Questions

What backs Cloud Storage?

v0.1.0 uses fake-gcs-server. On main, CloudBurrow's own server, built to the API, is the only backend (next release).
Link to this answer

Are signed URLs checked?

v0.1.0 accepts them on shape alone. On main they are verified and fail closed (next release).
Link to this answer

Build against Google Cloud APIs, locally

Free and open source under Apache-2.0. No account, no sign-up, no Google Cloud bill.

Get started