A modern web interface for managing Google Cloud Platform emulator services ๐ฎ
demo.mp4
Supports
amd64andarm64container images
This is an unofficial third-party application and is not affiliated with, endorsed by, or sponsored by Google LLC or Google Cloud Platform.
-
Google Cloud Pub/Sub (gcloud)
- Create, view, and manage Pub/Sub topics
- Handle subscriptions with pull/push configurations
- Publish messages with attributes and template variables
- Import/export topics, subscriptions, and message templates
-
Google Cloud Storage (fake-gcs)
- Create, view, and manage Storage buckets
- Support drag'n'drop files and folders
- Import/export bucket configurations
-
Google Firestore (gcloud)
- Create, view, and manage Collections
- Document CRUD operations with field editing
- Multiple databases support
- Import/export collections and documents
-
Google Firestore (datastore-mode) (gcloud)
- Create, view, and manage entities across namespaces and databases
- Query/Read operations on named databases
- Import/export functionality
Use Docker Compose:
git clone git@github.com:drehelis/gcp-emulator-ui.git
cd gcp-emulator-ui
docker-compose upOr start individual container:
# Start Google Pub/Sub emulator
docker run \
--rm \
--publish 8085:8085 \
gcr.io/google.com/cloudsdktool/google-cloud-cli:emulators sh -c 'gcloud beta emulators pubsub start --host-port=0.0.0.0:8085'
# Start Google Firestore emulator
docker run \
--rm \
--publish 8086:8086 \
gcr.io/google.com/cloudsdktool/google-cloud-cli:emulators sh -c 'gcloud beta emulators firestore start --host-port=0.0.0.0:8086'
# Start Google Firestore datastore-mode emulator
docker run \
--rm \
--publish 8087:8087 \
gcr.io/google.com/cloudsdktool/google-cloud-cli:emulators sh -c 'gcloud beta emulators firestore start --database-mode=datastore-mode --host-port=0.0.0.0:8087'
# Start fake-gcs emulator
docker run \
--rm \
--publish 4443:4443 \
--env PUBSUB_EMULATOR_HOST="host.docker.internal:8085" \
fsouza/fake-gcs-server -scheme http
# Now start the UI
docker run \
--rm \
--env PUBSUB_EMULATOR_URL="host.docker.internal:8085" \
--env FIRESTORE_EMULATOR_URL="host.docker.internal:8086" \
--env DATASTORE_EMULATOR_URL="host.docker.internal:8087" \
--env DATASTORE_FILE_SERVER_URL="host.docker.internal:9999" \
--env STORAGE_EMULATOR_URL="host.docker.internal:4443" \
--publish 9090:80 \
ghcr.io/drehelis/gcp-emulator-ui:mainBrowse to http://localhost:9090
Runtime Config (/config.json)
The UI can load optional runtime settings from /config.json at startup. This file is intended for container deployments where you want to inject configuration without rebuilding the app.
Currently supported runtime fields:
{
"pubsub": {
"pubsubPreConfiguredMsgAttr": {
"key": "value"
}
}
}To set pubsubPreConfiguredMsgAttr, provide a JSON object in the PUBSUB_PRE_CONFIGURED_MSG_ATTR environment variable when starting the container. Example:
docker run \
--rm \
--env PUBSUB_PRE_CONFIGURED_MSG_ATTR='{"source":"local","env":"dev"}' \
--publish 9090:80 \
ghcr.io/drehelis/gcp-emulator-ui:main-
Clone and install dependencies
git clone git@github.com:drehelis/gcp-emulator-ui.git cd gcp-emulator-ui code . (run in devcontainer) bun install
-
Configure environment
cp -v .env.example .env # Edit .env with your settings -
Start the development server
bun run dev
-
Open your browser
- Navigate to
http://localhost:5173
- Navigate to
| Variable | Default | Description |
|---|---|---|
VITE_PUBSUB_BASE_URL |
/pubsub |
Pub/Sub emulator endpoint |
VITE_FIRESTORE_BASE_URL |
/firestore |
Firestore emulator endpoint |
VITE_DATASTORE_BASE_URL |
/datastore |
Firestore datastore-mode emulator endpoint |
VITE_STORAGE_BASE_URL |
/storage |
Storage emulator endpoint |
VITE_FILE_SERVER_BASE_URL |
/fs |
File server endpoint for Datastore import/export operations |
src/
โโโ api/ # API client configurations
โโโ assets/ # Static assets and styles
โโโ components/ # Reusable Vue components
โโโ composables/ # Vue composition functions
โโโ layouts/ # Page layout components
โโโ plugins/ # Vue plugins and global configurations
โโโ router/ # Vue Router configuration
โโโ stores/ # Pinia state management
โโโ types/ # TypeScript type definitions
โโโ utils/ # Utility functions and helpers
โโโ views/ # Page components organized by feature
- Vue 3 - Progressive JavaScript framework
- TypeScript - Type-safe development
- Vite - Fast build tool and dev server
- Tailwind CSS - Utility-first CSS framework
This project uses Heroicons - a set of free MIT-licensed high-quality SVG icons created by Tailwind Labs.
- License: MIT
- Repository: github.com/tailwindlabs/heroicons
- Copyright: ยฉ 2020 Refactoring UI Inc.
All icons are used in accordance with the MIT License. See Heroicons License for details.
Feedback and contributions are welcome! Please feel free to:
- Open an issue for bug reports or feature requests
- Submit a pull request for bug fixes or new features
This project is licensed under the MIT License.