Comparisons LocalCloud vs Google Emulators

LocalCloud vs Google Emulators

Google provides individual emulators for Pub/Sub, Firestore, and Spanner. For everything else - BigQuery, Bigtable, Cloud Storage, and 15 more services - there is no official local option.

LocalCloud is a single Docker container that bundles official emulators with custom and third-party ones to give you a complete Google Cloud local development environment.

Service Coverage & Fidelity

ServiceGoogle EmulatorLocalCloudWhy LocalCloud?
Pub/SubProvides persistence + console UI operations.
FirestoreDirectly bundled; no fidelity loss.
Spanner (In-Memory only) (Persisted data / Extended features)More closer to Spanner production, compare to Spanner emulator
BigQuery~96% BigQuery SQL coverage, DDL/DML, scripting, REST + gRPC Storage APIs.
Bigtable (In-Memory only) (Persisted data + Extended features)Extends Google’s Bigtable emulator with PostgreSQL-backed persistence and a console data browser.
Cloud StorageBucket and object CRUD, metadata, multipart uploads via fake-gcs-server.
Memorystore (Redis)Key operations, hashes, sets. Pub/Sub, Lua, streams, and MULTI/EXEC not yet supported.
Secret ManagerCreate, read, update, delete secrets. Rotation and CMEK not emulated.
Cloud TasksTask creation, dispatch, and queue management.
Cloud WorkflowsFull workflow execution with standard library.
Cloud SchedulerJob CRUD and cron firing.
Cloud LoggingLog ingestion and query. Metrics, sinks, exclusions, and audit logs not yet emulated.
Cloud MonitoringCustom metrics and descriptor management. Alerting, uptime checks, and dashboards not yet emulated.

Why BigQuery Matters

There is no official BigQuery emulator. Teams either pay for real queries during development or skip local testing entirely.

LocalCloud’s BigQuery emulator runs on DuckDB and covers ~96% of standard SQL, DDL, DML, scripting, and INFORMATION_SCHEMA. It exposes both REST and gRPC Storage APIs so your existing Python, Go, and Java SDKs work unchanged.

Built-In Web Console

Google’s emulators are terminal-only. LocalCloud includes a full web console at http://localhost:8080:

FeatureWhat It Does
DashboardHealth status, uptime, and request counts for all 23 services in one view.
Data BrowserPreview and mutate data across BigQuery, Cloud Storage, Spanner, Firestore, Pub/Sub, Memorystore, and Secret Manager.
SQL EditorRun BigQuery and Spanner queries directly in the browser with results in a table grid.
LogsReal-time request logs with filtering and auto-tail — no docker logs needed.
Usage MetricsAPI call counts per service and estimated GCP cost savings from staying local.
SettingsOne-click export of environment variables as shell, Terraform, or Docker Compose formats.

This removes the context switching between terminals, SDK scripts, and cloud consoles during daily development.

When to Use Google Emulators

Choose Google’s individual emulators when:

  • You need only Pub/Sub or Firestore in isolation.
  • Maximum fidelity for those specific services is critical.
  • You prefer managing infrastructure manually.

When to Use LocalCloud

Choose LocalCloud when:

  • Your stack uses 3+ GCP services.
  • You need BigQuery, Bigtable, or Cloud Storage locally.
  • You want a unified web console and single environment export.
  • You run integration tests in CI/CD and prefer one service container.
  • Your team wants one onboarding command instead of per-service docs.

The Setup Difference

Google emulators require the Cloud SDK, separate binaries, and per-service startup:

# Pub/Sub
gcloud components install pubsub-emulator
gcloud beta emulators pubsub start --host-port=localhost:8085

# Firestore
gcloud beta emulators firestore start --host-port=localhost:8086

# Spanner
gcloud components install spanner-emulator
gcloud emulators spanner start --host-port=localhost:9010

You manage ports, environment variables, and health checks for each process.

LocalCloud is one command:

docker run -d -p 8080:8080 -p 4443:4443 -p 8085-8087:8085-8087 \
  -p 9010:9010 -p 9020:9020 -p 9050:9050 -p 9060:9060 \
  -p 6379:6379 -m 4g --name localcloud \
  jaysen2apache/localcloud

eval "$(curl -s http://localhost:8080/_localcloud/env?format=shell)"

One container exports every emulator host automatically.

Next Steps

Last updated: May 2025