Install CloudBurrow.
Releases are published for macOS and Linux on arm64 and amd64. Each archive has a SHA-256 checksum and a GitHub build attestation, and the install script refuses an archive it cannot verify.
1Before you install
Docker, kind v0.33.0 and kubectl. Go only if you build from source. Give Docker at least 4 CPU and 6 GB; the full stack measures about 1.5 GiB and 2.1 CPU.
| Status | Engines |
|---|---|
| Supported | Docker Desktop on macOS; rootful Docker Engine on Linux |
| Unverified | colima, OrbStack, Rancher Desktop |
| Unsupported | Podman, rootless Docker |
Windows is unsupported; WSL2 is untested. Container engines, with the evidence for each
2Install
Homebrew
brew install cloudburrow/tap/cloudburrowcloudburrow version Install script
curl -fsSL https://raw.githubusercontent.com/cloudburrow/cloudburrow/main/scripts/install.sh | sh It verifies the SHA-256 checksum and, when gh is installed, the GitHub build attestation. It refuses an archive it cannot verify.
From source
git clone https://github.com/cloudburrow/cloudburrow.gitcd cloudburrowmake build A plain go install build has no embedded Storage server, and up refuses it. Use make build.
Needs Docker (4 CPU / 6 GB), kind v0.33.0 and kubectl. macOS and Linux only; Windows is
unsupported and WSL2 is untested. macOS binaries in v0.1.0 are not yet signed or notarized
(#605). The console opens at http://127.0.0.1:9090 and
is labelled LOCAL.
macOS binaries in v0.1.0 are not signed or notarized yet (#605). See Gatekeeper in docs/install.md.
3Check
cloudburrow doctor changes nothing, and fails only on what would stop up.
cloudburrow doctor ok docker /usr/local/bin/docker ok kind /opt/homebrew/bin/kind (v0.33.0) ok kubectl /usr/local/bin/kubectl ok docker daemon 29.8.0 (Docker Desktop) ok docker engine Docker Desktop (in a VM) ok docker memory 39.1 GiB ok docker cpus 16 ok disk space 24.2 GiB free on ~ (the host volume backing the Docker Desktop VM disk, not the VM filesystem) ok port control 127.0.0.1:9000 is free ...All checks passed. ok- Passed.
warn- Will probably work: an untested kind release, or disk below the 20 GiB margin.
FAIL- up will not succeed. Exit code 1. Only FAIL blocks.
unknown- Could not be measured. Deliberately not ok, and does not block.
4Run
cloudburrow up In another shell, point Google tooling at it:
eval "$(cloudburrow env)" That exports endpoint overrides, the project, a local metadata server and a generated ADC file. The credentials authorise nothing; they exist so tooling that insists on them runs offline.
stop, reset and delete are distinct commands, and none implies another.
5Make your first call
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
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
Go is tested through CloudBurrow's own compatibility suite. Java, .NET, Ruby and PHP are untested (#718).
6gcloud and Terraform
cloudburrow gcloud-setup configures the Google Cloud CLI. Verified command families:
storage, kms, secrets, tasks, scheduler, logging and projects list. gcloud pubsub is
partial; gcloud run is untested.
cloudburrow terraform sets endpoints only for Verified services and names the enabled
services it left out. Verified with Terraform's hashicorp/google
8.4.0 and OpenTofu
1.12.6.
7How long does up take?
One measured run on Ubuntu, 2026-09-24: the default profile started cold in 85 s and warm in 30 s. It is a single measurement, not a benchmark.
Source: Footprint, in docs/status.md
8Offline next release
cloudburrow prefetch downloads what up needs; up --offline then
runs without a network.
Build against Google Cloud APIs, locally
Free and open source under Apache-2.0. No account, no sign-up, no Google Cloud bill.