Claude Agent Skill · by Firebase

Firebase Data Connect

A comprehensive assistant for building Firebase SQL Connect (formerly Data Connect) backends with PostgreSQL and GraphQL. It handles the full workflow from sche

Install
Terminal · npx
$npx skills add https://github.com/firebase/agent-skills --skill firebase-data-connect
Works with Paperclip

How Firebase Data Connect fits into a Paperclip company.

Firebase Data Connect drops into any Paperclip agent that handles this kind of work. Assign it to a specialist inside a pre-configured PaperclipOrg company and the skill becomes available on every heartbeat — no prompt engineering, no tool wiring.

S
SaaS FactoryPaired

Pre-configured AI company — 18 agents, 18 skills, one-time purchase.

$27$59
Explore pack
Source file
SKILL.md111 lines
Expand
---name: firebase-data-connectdescription: Build and deploy Firebase SQL Connect (aka Firebase Data Connect) backends with PostgreSQL. Use for schema design, GraphQL queries/mutations, authorization, and SDK generation for web, Android, iOS, and Flutter apps.--- # Firebase Data Connect Firebase Data Connect is a relational database service using Cloud SQL for PostgreSQL with GraphQL schema, auto-generated queries/mutations, and type-safe SDKs. > [!NOTE]> **Product Rename**: Firebase Data Connect was renamed to **Firebase SQL Connect**. All instructions, references, and examples in this skill repository referring to "Data Connect" or "Firebase Data Connect" apply to "SQL Connect" and "Firebase SQL Connect" as well. ## Project Structure ```dataconnect/├── dataconnect.yaml      # Service configuration├── schema/│   └── schema.gql        # Data model (types with @table)└── connector/    ├── connector.yaml    # Connector config + SDK generation    ├── queries.gql       # Queries    └── mutations.gql     # Mutations``` ## Operation Strategies: GraphQL vs. Native SQL Always default to **Native GraphQL**. **Native SQL lacks type safety** and bypasses schema-enforced structures. Only use **Native SQL** when the user explicitly requests it or when the task requires advanced database features. | Strategy | When to use | Implementation ||----------|-------------|----------------|| **Native GraphQL** (Default) | Almost all use cases. Standard CRUD, basic filtering/sorting, simple relational joins. Requires full type safety. | Auto-generated fields (`movie_insert`, `movies`). Strong typing and schema enforcement. || **Native SQL** (Advanced) | PostgreSQL extensions (e.g., PostGIS), window functions (`RANK()`), complex aggregations, or highly tuned sub-queries. | Raw SQL string literals via `_select`, `_execute`, etc. Requires strict positional parameters (`$1`). No type safety. | ## Development Workflow Follow this strict workflow to build your application. You **must** read the linked reference files for each step to understand the syntax and available features. ### 1. Define Data Model (`schema/schema.gql`)Define your GraphQL types, tables, and relationships.> **Read [reference/schema.md](reference/schema.md)** for:> *   `@table`, `@col`, `@default`> *   Relationships (`@ref`, one-to-many, many-to-many)> *   Data types (UUID, Vector, JSON, etc.) ### 2. Define Operations (`connector/queries.gql`, `connector/mutations.gql`)Write the queries and mutations your client will use. Data Connect generates the underlying SQL.> **Read [reference/operations.md](reference/operations.md)** for:> *   **Queries**: Filtering (`where`), Ordering (`orderBy`), Pagination (`limit`/`offset`).> *   **Mutations**: Create (`_insert`), Update (`_update`), Delete (`_delete`).> *   **Upserts**: Use `_upsert` to "insert or update" records (CRITICAL for user profiles).> *   **Transactions**: use `@transaction` for multi-step atomic operations.> > **Read [reference/native_sql.md](reference/native_sql.md)** for Native SQL operations:> *   Embedding raw SQL with `_select`, `_selectFirst`, `_execute`> *   Strict rules for positional parameters (`$1`, `$2`), quoting, and CTEs> *   Advanced PostgreSQL features (PostGIS, Window Functions) ### 3. Secure Your App (`connector/` files)Add authorization logic closely with your operations.> **Read [reference/security.md](reference/security.md)** for:> *   `@auth(level: ...)` for PUBLIC, USER, or NO_ACCESS.> *   `@check` and `@redact` for row-level security and validation. ### 4. Generate & Use SDKsGenerate type-safe code for your client platform.> **Read [reference/sdks.md](reference/sdks.md)** for:> *   Android (Kotlin), iOS (Swift), Web (TypeScript), Flutter (Dart).> *   How to initialize and call your queries/mutations.> *   **Nested Data**: See how to access related fields (e.g., `movie.reviews`). --- ## Feature Capability Map If you need to implement a specific feature, consult the mapped reference file: | Feature | Reference File | Key Concepts || :--- | :--- | :--- || **Data Modeling** | [reference/schema.md](reference/schema.md) | `@table`, `@unique`, `@index`, Relations || **Vector Search** | [reference/advanced.md](reference/advanced.md) | `Vector`, `@col(dataType: "vector")` || **Full-Text Search** | [reference/advanced.md](reference/advanced.md) | `@searchable` || **Upserting Data** | [reference/operations.md](reference/operations.md) | `_upsert` mutations || **Complex Filters** | [reference/operations.md](reference/operations.md) | `_or`, `_and`, `_not`, `eq`, `contains` || **Transactions** | [reference/operations.md](reference/operations.md) | `@transaction`, `response` binding || **Environment Config** | [reference/config.md](reference/config.md) | `dataconnect.yaml`, `connector.yaml` | --- ## Deployment & CLI > **Read [reference/config.md](reference/config.md)** for deep dive on configuration. Common commands (run from project root):```bash# Initialize Data Connectnpx -y firebase-tools@latest init dataconnect # Start local emulatornpx -y firebase-tools@latest emulators:start --only dataconnect # Generate SDK codenpx -y firebase-tools@latest dataconnect:sdk:generate # Deploy to productionnpx -y firebase-tools@latest deploy --only dataconnect``` ## Examples For complete, working code examples of schemas and operations, see **[examples.md](examples.md)**.