From 3f4e49eca13bb7d69092d65a85b627f6af12adc5 Mon Sep 17 00:00:00 2001 From: Izaak Gough Date: Tue, 25 Aug 2026 11:32:07 +0100 Subject: [PATCH 1/5] Add a README for the kits directory Explains what a kit is, lists the kits with links to their READMEs, and covers the firebase.json kit stanza and instance ids. Links to it from the root README. --- README.md | 2 ++ kits/README.md | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 kits/README.md diff --git a/README.md b/README.md index e9de6a29a..23a0af721 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ Each directory in this repo contains the source code for the extension and a REA When you find an extension that solves a need for your app or project, all you do is install and configure the extension. With extensions, you don't spend time researching, writing, and debugging the code that implements functionality or automates a task for your app or project. +Several extensions are also available as [Firebase Function Kits](kits) in the [`kits`](kits) directory. A kit is the same functionality packaged as an npm package you add to your own Firebase Functions codebase and deploy yourself, rather than installing it as a managed extension instance. + You can also browse official Firebase extensions from the following sources: * [Firebase Extensions product page](https://firebase.google.com/products/extensions) diff --git a/kits/README.md b/kits/README.md new file mode 100644 index 000000000..2d34aba76 --- /dev/null +++ b/kits/README.md @@ -0,0 +1,80 @@ +# Firebase Function Kits + +This directory contains the source for Firebase Function Kits. A kit is a +Firebase Extension repackaged as an npm package that you add to your own +Firebase Functions codebase and deploy into your own project. + +Where an extension is installed as a managed instance you configure through the +Firebase console or CLI, a kit is code you own: you install the package, export +the functions you want from your functions entry file, configure it with a +`.env`, and deploy with `firebase deploy`. There is no hosted version, so the +functions run in your project, under your service account, on your deploy +schedule. That also means you can read the source, fork it, or import the +package's `./lib` entry point and register the triggers yourself. + +Each directory here contains the source code for a kit and a README explaining +how it works, including the roles it needs, the settings it reads, and the +functions it exports. + +## Available kits + +| Kit | Description | +|---|---| +| [`bigquery-firestore-export`](bigquery-firestore-export) | Reverse-sync rows from BigQuery into Firestore | +| [`delete-user-data`](delete-user-data) | Delete user data across Firestore, RTDB, and Storage on account deletion | +| [`firestore-bigquery-export`](firestore-bigquery-export) | Stream a Cloud Firestore collection to BigQuery | +| [`firestore-bundle-builder`](firestore-bundle-builder) | Build and serve Firestore data bundles | +| [`firestore-counter`](firestore-counter) | Distributed, sharded counters for Firestore | +| [`firestore-genai-chatbot`](firestore-genai-chatbot) | Conversational GenAI chatbot backed by Firestore | +| [`firestore-incremental-capture`](firestore-incremental-capture) | Incremental point-in-time capture of Firestore changes | +| [`firestore-send-email`](firestore-send-email) | Send emails based on documents written to Firestore | +| [`firestore-translate-text`](firestore-translate-text) | Translate text written to a Firestore collection | +| [`firestore-vector-search`](firestore-vector-search) | Vector similarity search over a Firestore collection | +| [`rtdb-limit-child-nodes`](rtdb-limit-child-nodes) | Limit the number of child nodes under a Realtime Database path | +| [`speech-to-text`](speech-to-text) | Transcribe Cloud Storage audio with Cloud Speech-to-Text | +| [`storage-resize-images`](storage-resize-images) | Resize images uploaded to Cloud Storage | + +## Using a kit + +Kits need Firebase CLI 15.25.1 or later with the `kits` experiment enabled: + +```sh +firebase experiments:enable kits +``` + +Install the package into your functions codebase, export the functions you want +from your entry file, and add a `kit` stanza to `firebase.json` naming the +instances to deploy: + +```json +{ + "functions": [ + { + "source": ".", + "kit": "firestore-send-email", + "instances": { + "default": "." + } + } + ] +} +``` + +Each instance id maps to the directory holding that instance's `.env`, and the +CLI prefixes every function name with `kit--`, so one kit can run +several independently configured instances side by side. See each kit's README +for its exports, its settings, and the roles the CLI grants on deploy. + +## Migrating from an extension + +A kit ports the extension's behaviour, but it is not a drop-in replacement for +an installed instance. Deploy still handles the platform setup for you: Firebase +CLI 15.23.0 or later creates the runtime service account, grants it the roles +the kit needs, enables the required APIs, and connects any secrets. What moves +to you is the configuration itself, so check the kit's README against your +installed instance's settings before deploying, rather than copying the `.env` +across unchanged. + +Extensions themselves are unaffected and remain available. To learn more about +Firebase Extensions, including how to install them, visit the +[Firebase documentation](https://firebase.google.com/docs/extensions). From 61ff5b792bd85dd9a7351944ec0b1e0af72bdee4 Mon Sep 17 00:00:00 2001 From: Izaak Gough Date: Tue, 25 Aug 2026 11:37:22 +0100 Subject: [PATCH 2/5] Update kits/README.md Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- kits/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kits/README.md b/kits/README.md index 2d34aba76..2787cd39b 100644 --- a/kits/README.md +++ b/kits/README.md @@ -67,8 +67,8 @@ for its exports, its settings, and the roles the CLI grants on deploy. ## Migrating from an extension -A kit ports the extension's behaviour, but it is not a drop-in replacement for -an installed instance. Deploy still handles the platform setup for you: Firebase +A kit ports the extension's behavior, but it is not a drop-in replacement for +an installed instance. Deployment still handles the platform setup for you: Firebase CLI 15.23.0 or later creates the runtime service account, grants it the roles the kit needs, enables the required APIs, and connects any secrets. What moves to you is the configuration itself, so check the kit's README against your From 10982423222eba47923ac1153a71a9b1271877c0 Mon Sep 17 00:00:00 2001 From: Izaak Gough Date: Tue, 25 Aug 2026 11:38:16 +0100 Subject: [PATCH 3/5] Update kits/README.md Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- kits/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kits/README.md b/kits/README.md index 2787cd39b..3830b50f6 100644 --- a/kits/README.md +++ b/kits/README.md @@ -8,7 +8,7 @@ Where an extension is installed as a managed instance you configure through the Firebase console or CLI, a kit is code you own: you install the package, export the functions you want from your functions entry file, configure it with a `.env`, and deploy with `firebase deploy`. There is no hosted version, so the -functions run in your project, under your service account, on your deploy +functions run in your project, under your service account, on your deployment schedule. That also means you can read the source, fork it, or import the package's `./lib` entry point and register the triggers yourself. From b2c2b439d2f0fe850b338ce762d06aa95188275d Mon Sep 17 00:00:00 2001 From: Izaak Gough Date: Tue, 25 Aug 2026 11:40:05 +0100 Subject: [PATCH 4/5] chore: use ID instead of id and use - placeholder --- kits/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kits/README.md b/kits/README.md index 3830b50f6..76596893b 100644 --- a/kits/README.md +++ b/kits/README.md @@ -60,8 +60,8 @@ instances to deploy: } ``` -Each instance id maps to the directory holding that instance's `.env`, and the -CLI prefixes every function name with `kit--`, so one kit can run +Each instance ID maps to the directory holding that instance's `.env`, and the +CLI prefixes every function name with `kit--`, so one kit can run several independently configured instances side by side. See each kit's README for its exports, its settings, and the roles the CLI grants on deploy. From c7a6c9a50c3deea32845d92d4e27f2e728f0838c Mon Sep 17 00:00:00 2001 From: Izaak Gough Date: Tue, 25 Aug 2026 11:42:55 +0100 Subject: [PATCH 5/5] chore: change wording in kit definition section --- kits/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kits/README.md b/kits/README.md index 76596893b..e9fa85ffe 100644 --- a/kits/README.md +++ b/kits/README.md @@ -4,7 +4,7 @@ This directory contains the source for Firebase Function Kits. A kit is a Firebase Extension repackaged as an npm package that you add to your own Firebase Functions codebase and deploy into your own project. -Where an extension is installed as a managed instance you configure through the +While an extension is installed as a managed instance configured through the Firebase console or CLI, a kit is code you own: you install the package, export the functions you want from your functions entry file, configure it with a `.env`, and deploy with `firebase deploy`. There is no hosted version, so the