# Configuration Reference ## Contents - [Project Structure](#project-structure) - [dataconnect.yaml](#dataconnectyaml) - [connector.yaml](#connectoryaml) - [Firebase CLI Commands](#firebase-cli-commands) - [Emulator](#emulator) - [Deployment](#deployment) --- ## Project Structure ``` project-root/ ├── firebase.json # Firebase project config └── dataconnect/ ├── dataconnect.yaml # Service configuration ├── schema/ │ └── schema.gql # Data model (types, relationships) └── connector/ ├── connector.yaml # Connector config + SDK generation ├── queries.gql # Query operations └── mutations.gql # Mutation operations (optional separate file) ``` --- ## dataconnect.yaml Main Data Connect service configuration: ```yaml specVersion: "v1" serviceId: "my-service" location: "us-central1" schemaValidation: "STRICT" # or "COMPATIBLE" schema: source: "./schema" datasource: postgresql: database: "fdcdb" cloudSql: instanceId: "my-instance" connectorDirs: ["./connector"] ``` | Field | Description | |-------|-------------| | `specVersion` | Always `"v1"` | | `serviceId` | Unique identifier for the service | | `location` | GCP region (us-central1, us-east4, europe-west1, etc.) | | `schemaValidation` | Deployment mode: `"STRICT"` (must match exactly) or `"COMPATIBLE"` (backward compatible) | | `schema.source` | Path to schema directory | | `schema.datasource` | PostgreSQL connection config | | `connectorDirs` | List of connector directories | ### Cloud SQL Configuration ```yaml schema: datasource: postgresql: database: "my-database" # Database name cloudSql: instanceId: "my-instance" # Cloud SQL instance ID ``` --- ## connector.yaml Connector configuration and SDK generation: ```yaml connectorId: "default" generate: javascriptSdk: outputDir: "../web/src/lib/dataconnect" package: "@myapp/dataconnect" kotlinSdk: outputDir: "../android/app/src/main/kotlin/com/myapp/dataconnect" package: "com.myapp.dataconnect" swiftSdk: outputDir: "../ios/MyApp/DataConnect" ``` ### SDK Generation Options | SDK | Fields | |-----|--------| | `javascriptSdk` | `outputDir`, `package` | | `kotlinSdk` | `outputDir`, `package` | | `swiftSdk` | `outputDir` | | `nodeAdminSdk` | `outputDir`, `package` (for Admin SDK) | --- ## Firebase CLI Commands ### Initialize Data Connect ```bash # Interactive setup npx -y firebase-tools@latest init dataconnect # Set project npx -y firebase-tools@latest use ``` ### Local Development ```bash # Start emulator npx -y firebase-tools@latest emulators:start --only dataconnect # Start with database seed data npx -y firebase-tools@latest emulators:start --only dataconnect --import=./seed-data # Generate SDKs npx -y firebase-tools@latest dataconnect:sdk:generate # Watch for schema changes (auto-regenerate) npx -y firebase-tools@latest dataconnect:sdk:generate --watch ``` ### Schema Management ```bash # Compare local schema to production npx -y firebase-tools@latest dataconnect:sql:diff # Apply migration npx -y firebase-tools@latest dataconnect:sql:migrate ``` ### Deployment ```bash # Deploy Data Connect service npx -y firebase-tools@latest deploy --only dataconnect # Deploy specific connector npx -y firebase-tools@latest deploy --only dataconnect:connector-id # Deploy with schema migration npx -y firebase-tools@latest deploy --only dataconnect --force ``` --- ## Emulator ### Start Emulator ```bash npx -y firebase-tools@latest emulators:start --only dataconnect ``` Default ports: - Data Connect: `9399` - PostgreSQL: `9939` (local PostgreSQL instance) ### Emulator Configuration (firebase.json) ```json { "emulators": { "dataconnect": { "port": 9399 } } } ``` ### Connect from SDK ```typescript // Web import { connectDataConnectEmulator } from 'firebase/data-connect'; connectDataConnectEmulator(dc, 'localhost', 9399); // Android connector.dataConnect.useEmulator("10.0.2.2", 9399) // iOS connector.useEmulator(host: "localhost", port: 9399) ``` ### Seed Data Create seed data files and import: ```bash # Export current emulator data npx -y firebase-tools@latest emulators:export ./seed-data # Start with seed data npx -y firebase-tools@latest emulators:start --only dataconnect --import=./seed-data ``` --- ## Deployment ### Deploy Workflow 1. **Test locally** with emulator 2. **Generate SQL diff**: `npx -y firebase-tools@latest dataconnect:sql:diff` 3. **Review migration**: Check breaking changes 4. **Deploy**: `npx -y firebase-tools@latest deploy --only dataconnect` ### Schema Migrations Data Connect auto-generates PostgreSQL migrations: ```bash # Preview migration npx -y firebase-tools@latest dataconnect:sql:diff # Apply migration (interactive) npx -y firebase-tools@latest dataconnect:sql:migrate # Force migration (non-interactive) npx -y firebase-tools@latest dataconnect:sql:migrate --force ``` ### Breaking Changes Some schema changes require special handling: - Removing required fields - Changing field types - Removing tables Use `--force` flag to acknowledge breaking changes during deploy. ### CI/CD Integration ```yaml # GitHub Actions example - name: Deploy Data Connect run: | npx -y firebase-tools@latest deploy --only dataconnect --token ${{ secrets.FIREBASE_TOKEN }} --force ``` --- ## VS Code Extension Install "Firebase Data Connect" extension for: - Schema intellisense and validation - GraphQL operation testing - Emulator integration - SDK generation on save ### Extension Settings ```json { "firebase.dataConnect.autoGenerateSdk": true, "firebase.dataConnect.emulator.port": 9399 } ```