Skip to content

Firebase Vector Store

Firestore supports native vector similarity search, making it a fully managed vector store for RAG applications. The Firebase plugin automatically handles embedding generation, document indexing, and vector queries.

<dependency>
<groupId>com.google.genkit</groupId>
<artifactId>genkit-plugin-firebase</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
import com.google.genkit.plugins.firebase.FirebasePlugin;
import com.google.genkit.plugins.firebase.retriever.FirestoreRetrieverConfig;
Genkit genkit = Genkit.builder()
.plugin(GoogleGenAIPlugin.create(apiKey))
.plugin(FirebasePlugin.builder()
.projectId("my-project")
.addRetriever(FirestoreRetrieverConfig.builder()
.name("my-docs")
.collection("documents")
.embedderName("googleai/gemini-embedding-001")
.vectorField("embedding")
.contentField("content")
.distanceMeasure(FirestoreRetrieverConfig.DistanceMeasure.COSINE)
.defaultLimit(5)
.build())
.build())
.build();

Documents are embedded automatically when indexed. The plugin generates embeddings using the configured embedder and stores them alongside the content in Firestore.

List<Document> docs = List.of(
Document.fromText("Genkit is a framework for building AI apps"),
Document.fromText("Firebase provides cloud services for apps")
);
genkit.index("firebase/my-docs", docs);
List<Document> results = genkit.retrieve("firebase/my-docs", "What is Genkit?");
genkit.defineFlow("ragQuery", String.class, String.class, (ctx, question) -> {
List<Document> context = genkit.retrieve("firebase/my-docs", question);
return genkit.generate(GenerateOptions.builder()
.model("googleai/gemini-2.5-flash")
.prompt(question)
.docs(context)
.build()).getText();
});

The plugin can automatically create the Firestore database and the required composite vector index:

FirestoreRetrieverConfig.builder()
.name("my-docs")
.collection("documents")
.embedderName("googleai/gemini-embedding-001")
.vectorField("embedding")
.contentField("content")
.createDatabaseIfNotExists(true)
.createVectorIndexIfNotExists(true)
.build()

You can also create the vector index manually via the Firebase CLI:

Terminal window
gcloud firestore indexes composite create \
--collection-group=documents \
--field-config=field-path=embedding,vector-config='{"dimension":"768","flat":{}}' \
--database="(default)"
Option Default Description
name (required) Retriever name — used as firebase/{name}
collection (required) Firestore collection name
embedderName (required) Embedder to use (e.g., googleai/gemini-embedding-001)
vectorField "embedding" Firestore field storing the vector
contentField "content" Firestore field storing the text content
distanceMeasure COSINE COSINE, EUCLIDEAN, or DOT_PRODUCT
defaultLimit 10 Number of results to return
distanceThreshold none Maximum distance threshold
metadataFields none Additional fields to include in document metadata
embedderDimension 768 Embedding vector dimension
databaseId "(default)" Firestore database ID
createDatabaseIfNotExists false Auto-create Firestore database
createVectorIndexIfNotExists false Auto-create composite vector index
  • Firebase project on the Blaze (pay-as-you-go) plan
  • Application Default Credentials or a service account JSON
  • GCLOUD_PROJECT or GOOGLE_CLOUD_PROJECT environment variable (auto-detected)

See the firebase sample for a complete RAG pipeline with Firestore vector search.