Services Overview
floci-gcp emulates GCP services on a single port (4588). All services use real GCP wire protocols — your existing GCP SDK calls and gcloud CLI commands work without modification.
Service Matrix
| Service | Protocol | Endpoint |
|---|---|---|
| Cloud Storage (GCS) | REST XML (objects) + REST JSON (management) | /{bucket}/{object}, /storage/v1/b/{bucket} |
| Pub/Sub | gRPC | google.pubsub.v1.Publisher, google.pubsub.v1.Subscriber |
| Firestore | gRPC | google.firestore.v1.Firestore |
| Datastore | HTTP/protobuf | /v1/projects/{project}:{method} |
| Secret Manager | gRPC | google.cloud.secretmanager.v1.SecretManagerService |
| IAM | REST JSON | /v1/projects/{project}/serviceAccounts |
| Managed Kafka | REST JSON | /v1/projects/{project}/locations/{location}/clusters |
Single-Port Design
All services — gRPC and REST — are available on port 4588 via ALPN negotiation:
http2=true— enables HTTP/2 supportgrpc.server.use-separate-server=false— gRPC and REST share the same port
Clients using plain HTTP/1.1 are served REST endpoints. Clients using HTTP/2 (gRPC) are served gRPC endpoints. No separate ports or proxy configuration is required.
Common Setup
Before calling any service, set the appropriate emulator environment variable:
export PUBSUB_EMULATOR_HOST=localhost:4588
export FIRESTORE_EMULATOR_HOST=localhost:4588
export DATASTORE_EMULATOR_HOST=localhost:4588
export STORAGE_EMULATOR_HOST=http://localhost:4588
export SECRET_MANAGER_EMULATOR_HOST=localhost:4588
GCP SDKs automatically bypass credential validation when these variables are set.
For gcloud CLI:
Auth Bypass
floci-gcp does not validate credentials. All requests are accepted unconditionally. This matches the behavior of GCP official emulators when *_EMULATOR_HOST is set.
Multi-Project Isolation
All resources are namespaced by GCP project ID. Resources in project-a are invisible to project-b. See Multi-Project Isolation.