You might have tried out an alternative set of mobile or web client SDKs that
gave you access to theGemini Developer API.
Those client SDKs were not integrated into the robust Firebase ecosystem that
offers critical services for mobile and web apps. They are now deprecated in
favor of theFirebase AI Logicclient SDKs, which can give you
access to theGemini Developer API.
Security features for mobile and web apps
For mobile and web apps, security is critical and requires special
considerations because your code – including calls to theGemini API– is
running in an unprotected environment. You can useFirebase App Checkto
protect APIs from abuse by unauthorized clients.
When youuseFirebase App CheckwithFirebase AI Logic,
you never add yourGeminiAPI key for theGemini Developer APIdirectly into your mobile or web app's codebase. Instead, theGeminiAPI key stays on the server, unexposed to malicious actors.
Ecosystem built for mobile and web apps
Firebase is Google's platform for developing mobile and web apps. UsingFirebase AI Logicmeans that your apps are in an ecosystem that's focused on
the needs of full-stack apps and developers. For example:
Dynamically set run-time configurations or swap out values in
your app (like a model name and version) without releasing a new app version
usingFirebase Remote Config.
UseCloud Storage for Firebaseto include large files in your multimodal
requests (if you use theVertex AIGemini API). TheCloud Storageclient SDKs help you handle file uploads and downloads (even in
poor network conditions) and offer more security for your end-users' data.
Learn more in oursolution guide about usingCloud Storage for Firebase.
Manage structured data using database SDKs built for mobile and web apps
(likeCloud Firestore).
Migrate to theFirebase AI Logic SDKs
Overview of steps to migrate to theFirebase AI Logic SDKs:
Step 1: Set up a new or existing Firebase project and connect your app to
Firebase.
Step 2: Add theFirebase AI Logic SDKs to your app.
Step 3: Update your imports and initialization in your app.
Step 4: Update your code depending on the features that you use.
Step 1: Set up a Firebase project and connect your app
Sign into theFirebaseconsole,
and then select your Firebase project.
Don't already have a Firebase project?
If you don't already have a Firebase project, click the button to create a
new Firebase project, and then use either of the following options:
Option 1: Create a wholly new Firebase project (and its underlyingGoogle Cloudproject automatically) by entering a new project name in the
first step of the workflow.
Option 2: "Add Firebase" to an existingGoogle Cloudproject by
clickingAdd Firebase to Google Cloud project(at bottom of page).
In the first step of the workflow, start entering theproject nameof
the existing project, and then select the project from the displayed list.
If you'd like, you can add Firebase to the project that was created behind
the scenes when you created aGeminiAPI key inGoogle AI Studio.
Complete the remaining steps of the on-screen workflow to create a Firebase
project. Note that when prompted, you donotneed to set upGoogle Analyticsto use theFirebase AI Logic SDKs.
ClickGet startedto launch a guided workflow that helps you set up therequired APIsand resources for your project.
Select theGemini Developer API. You can always set up and use
the other API provider later, if you'd like.
The console will enable the required APIs and create a new, dedicatedGeminiAPI key in your project. Donotadd this newGeminiAPI key into your app's codebase.Learn more.
If prompted in the console's workflow, follow the on-screen instructions to
register your app and connect it to Firebase.
Continue in this migration guide to update the library and initialization in
your app.
Step 2: Add theFirebase AI Logic SDK to your app
With your Firebase project set up and your app connected to Firebase
(see previous step), you can now add theFirebase AI Logic SDK to your app.
Swift
Use Swift Package Manager to install and manage Firebase dependencies.
TheFirebase AI Logiclibrary provides access to the APIs for interacting
withGeminiandImagenmodels. The library is included
as part of the Firebase SDK for Apple platforms (firebase-ios-sdk).
If you're already using Firebase, then make sure your Firebase package is
v11.13.0 or later.
In Xcode, with your app project open, navigate toFile > Add Package Dependencies.
When prompted, add the Firebase Apple platforms SDK repository:
https://github.com/firebase/firebase-ios-sdk
Select the latest SDK version.
Select theFirebaseAIlibrary.
When finished, Xcode will automatically begin resolving and downloading your
dependencies in the background.
Kotlin
TheFirebase AI Logic SDK for Android (firebase-ai) provides
access to the APIs for interacting withGeminiandImagenmodels.
In yourmodule (app-level) Gradle file(like<project>/<app-module>/build.gradle.kts),
add the dependency for theFirebase AI Logiclibrary for Android.
We recommend using theFirebase Android BoMto control library versioning.
dependencies{// ... other androidx dependencies// Import theBoMfor the Firebase platformimplementation(platform("com.google.firebase:firebase-bom:34.2.0"))// Add the dependency for theFirebase AI Logiclibrary// When using theBoM, you don't specify versions in Firebase library dependenciesimplementation("com.google.firebase:firebase-ai")}
By using theFirebase Android BoM,
your app will always use compatible versions of Firebase Android libraries.
(Alternative)
Add Firebase library dependencies without using theBoM
If you choose not to use theFirebase BoM, you must specify each
Firebase library version in its dependency line.
Note that if you usemultipleFirebase libraries in your app, we
strongly recommend using theBoMto manage library versions, which
ensures that all versions are compatible.
dependencies{// Add the dependency for theFirebase AI Logiclibrary// When NOT using theBoM, you must specify versions in Firebase library dependenciesimplementation("com.google.firebase:firebase-ai:17.2.0")}
Java
TheFirebase AI Logic SDK for Android (firebase-ai) provides
access to the APIs for interacting withGeminiandImagenmodels.
In yourmodule (app-level) Gradle file(like<project>/<app-module>/build.gradle.kts),
add the dependency for theFirebase AI Logiclibrary for Android.
We recommend using theFirebase Android BoMto control library versioning.
For Java, you need to add two additional libraries.
dependencies{// ... other androidx dependencies// Import theBoMfor the Firebase platformimplementation(platform("com.google.firebase:firebase-bom:34.2.0"))// Add the dependency for theFirebase AI Logiclibrary// When using theBoM, you don't specify versions in Firebase library dependenciesimplementation("com.google.firebase:firebase-ai")// Required for one-shot operations (to use `ListenableFuture` from Guava Android)implementation("com.google.guava:guava:31.0.1-android")// Required for streaming operations (to use `Publisher` from Reactive Streams)implementation("org.reactivestreams:reactive-streams:1.0.4")}
By using theFirebase Android BoM,
your app will always use compatible versions of Firebase Android libraries.
(Alternative)
Add Firebase library dependencies without using theBoM
If you choose not to use theFirebase BoM, you must specify each
Firebase library version in its dependency line.
Note that if you usemultipleFirebase libraries in your app, we
strongly recommend using theBoMto manage library versions, which
ensures that all versions are compatible.
dependencies{// Add the dependency for theFirebase AI Logiclibrary// When NOT using theBoM, you must specify versions in Firebase library dependenciesimplementation("com.google.firebase:firebase-ai:17.2.0")}
Web
TheFirebase AI Logiclibrary provides access to the APIs for interacting
withGeminiandImagenmodels. The library is included
as part of the Firebase JavaScript SDK for Web.
Install the Firebase JS SDK for Web using npm:
npm install firebase
Initialize Firebase in your app:
import{initializeApp}from"firebase/app";// TODO(developer) Replace the following with your app's Firebase configuration// See: https://firebase.google.com/docs/web/learn-more#config-objectconstfirebaseConfig={// ...};// Initialize FirebaseAppconstfirebaseApp=initializeApp(firebaseConfig);
Dart
TheFirebase AI Logicplugin for Flutter (firebase_ai) provides
access to the APIs for interacting withGeminiandImagenmodels.
From your Flutter project directory, run the following command to
install the core plugin and theFirebase AI Logicplugin:
flutterpubaddfirebase_corefirebase_ai
In yourlib/main.dartfile, import the Firebase core plugin, theFirebase AI Logicplugin, and the configuration file you generated
earlier:
Step 3: Update your imports and initialization in your app
Update your imports and how you initialize theGemini Developer APIbackend service and create aGenerativeModelinstance.
Swift
// BEFOREimportGoogleGenerativeAIletmodel=GenerativeModel(name:"MODEL_NAME",apiKey:APIKey.default)// AFTERimportFirebaseAI// Initialize the Gemini Developer API backend serviceletai=FirebaseAI.firebaseAI(backend:.googleAI())// Create a `GenerativeModel` instance with a model that supports your use caseletmodel=ai.generativeModel(modelName:"gemini-2.5-flash")
Kotlin
// BEFOREimportcom.google.ai.client.generativeai.Chatimportcom.google.ai.client.generativeai.type.Contentimportcom.google.ai.client.generativeai.java.GenerativeModuleFutures...valgenerativeModel=GenerativeModel(modelName="MODEL_NAME",// Access your API key as a Build Configuration variableapiKey=BuildConfig.apiKey)// AFTERimportcom.google.firebase.Firebaseimportcom.google.firebase.ai.aiimportcom.google.firebase.ai.type.GenerativeBackend...// Initialize the Gemini Developer API backend service// Create a `GenerativeModel` instance with a model that supports your use casevalmodel=Firebase.ai(backend=GenerativeBackend.googleAI()).generativeModel("gemini-2.5-flash")
Java
// BEFOREimportcom.google.ai.client.generativeai.Chat;importcom.google.ai.client.generativeai.type.Content;importcom.google.ai.client.generativeai.java.GenerativeModuleFutures;...GenerativeModelgm=newGenerativeModel("MODEL_NAME",// Access your API key as a Build Configuration variableBuildConfig.apiKey);GenerativeModelFuturesmodel=GenerativeModelFutures.from(gm);// AFTERimportcom.google.firebase.ai.FirebaseAI;importcom.google.firebase.ai.GenerativeModel;importcom.google.firebase.ai.java.GenerativeModelFutures;importcom.google.firebase.ai.type.GenerativeBackend;...// Initialize the Gemini Developer API backend service// Create a `GenerativeModel` instance with a model that supports your use caseGenerativeModelai=FirebaseAI.getInstance(GenerativeBackend.googleAI()).generativeModel("gemini-2.5-flash");// Use the GenerativeModelFutures Java compatibility layer which offers// support for ListenableFuture and Publisher APIsGenerativeModelFuturesmodel=GenerativeModelFutures.from(ai);
Web
// BEFOREimport{GoogleGenerativeAI}from"@google/generative-ai";// Fetch your API_KEY and access your APIconstAPI_KEY="...";constgenAI=newGoogleGenerativeAI(API_KEY);...constmodel=genAI.getGenerativeModel({model:"MODEL_NAME"});// AFTERimport{initializeApp}from"firebase/app";import{getAI,getGenerativeModel,GoogleAIBackend}from"firebase/ai";// TODO(developer) Replace the following with your app's Firebase configuration// See: https://firebase.google.com/docs/web/learn-more#config-objectconstfirebaseConfig={// ...};// Initialize FirebaseAppconstfirebaseApp=initializeApp(firebaseConfig);// Initialize the Gemini Developer API backend serviceconstai=getAI(firebaseApp,{backend:newGoogleAIBackend()});// Create a `GenerativeModel` instance with a model that supports your use caseconstmodel=getGenerativeModel(ai,{model:"gemini-2.5-flash"});
Dart
// BEFOREimport'package:google_generative_ai/google_generative_ai.dart';finalapiKey=Platform.environment['API_KEY'];if(apiKey==null){print('No\$API_KEY environment variable');exit(1);}finalmodel=GenerativeModel(model:'MODEL_NAME',apiKey:apiKey);// AFTERimport'package:firebase_ai/firebase_ai.dart';import'package:firebase_core/firebase_core.dart';import'firebase_options.dart';// Initialize FirebaseAppawaitFirebase.initializeApp(options:DefaultFirebaseOptions.currentPlatform,);// Initialize the Gemini Developer API backend service// Create a `GenerativeModel` instance with a model that supports your use casefinalmodel=FirebaseAI.googleAI().generativeModel(model:'gemini-2.5-flash');
Unity
Support for Unity wasn't available fromGoogle AIclient SDKs.
Step 4: Update code depending on the features that you use
This step describes changes that may be required depending on which features you
use.
TheFirebase AI Logicclient SDKs don't support
code execution. If you use this feature, make sure to accommodate this in
your app.
Review the following lists for any changes that you might need to make in your
code to accommodate migrating to theFirebase AI Logicclient SDKs.
Required for all languages and platforms
Function calling If you implemented this feature, then you'll need to make updates to
how you define your schema. We recommend reviewing the updatedfunction calling guideto learn how to
write your function declarations.
Generating structured output (like JSON) usingresponseSchema If you implemented this feature, then you'll need to make updates to
how you define your schema. We recommend reviewing the newstructured output guideto learn
how to write JSON schemas.
Timeout
Changed the default timeout for requests to be 180 seconds.
Required based on platform or language
Swift
Enumerations
Replaced mostenumtypes withstructs with static variables. This
change allows more flexibility for evolving the API in a
backward-compatible way. When usingswitchstatements, you must now
include adefault:case to cover unknown or unhandled values,
including new values that are added to the SDK in the future.
Renamed theBlockThresholdenumeration toHarmBlockThreshold; this
type is now astruct.
Removedunknownandunspecifiedcases from the following
enumerations (nowstructs):HarmCategory,HarmBlockThreshold,HarmProbability,BlockReason, andFinishReason.
Replaced the enumerationModelContent.Partwith a protocol namedPartto allow new types to be added in a backward-compatible way. This
change is described in greater detail in theContent partssection.
Content parts
Removed theThrowingPartsRepresentableprotocol, and simplified
the initializers forModelContentto avoid occasional compiler errors.
Images that don't encode properly will still throw errors when being
used ingenerateContent.
Replaced theModelContent.Partcases with the followingstructtypes
conforming to thePartprotocol:
.texttoTextPart
.datatoInlineDataPart
.fileDatatoFileDataPart
.functionCalltoFunctionCallPart
.functionResponsetoFunctionResponsePart
Harm category
Changed theHarmCategoryto no longer be nested in theSafetySettingtype. If you're referring to it asSafetySetting.HarmCategory, that
can be replaced withHarmCategory.
Safety feedback
Removed theSafetyFeedbacktype, since it wasn't used in any of the
responses.
Removed values from the following enumerations:HarmBlockThreshold,HarmProbability,HarmSeverity,BlockReason, andFinishReason.
Blob methods
Renamed all methods that includedBlobas part of their name to useInlineDatainstead.
Safety settings
Changed the fieldmethodto be nullable.
Duration class
Removed all usages of Kotlin'sDurationclass, and replaced it withlong. This change provides better interoperability with Java.
Citation metadata
Wrapped all the fields previously declared inCitationMetadatainto a
new class calledCitation. Citations can be found in the list calledcitationsinCitationMetadata. This change allows better alignment
of types across platforms.
Count tokens
Changed the fieldtotalBillableCharactersto be nullable.
Total billable characters
Changed thetotalBillableCharactersproperty inCountTokensResponseto be optional to reflect situations where no characters are sent.
Instantiating a model
Moved therequestOptionsparameter to the end of the parameter list to
align with other platforms.
Java
Enumerations
Replacedenumclasses andsealedclasses with regular classes. This
change allows more flexibility for evolving the API in a backward
compatible way.
Removed values from the following enumerations:HarmBlockThreshold,HarmProbability,HarmSeverity,BlockReason, andFinishReason.
Blob methods
Renamed all methods that includedBlobas part of their name to useInlineDatainstead.
Safety settings
Changed the fieldmethodto be nullable.
Duration class
Removed all usages of Kotlin'sDurationclass, and replaced it withlong. This change provides better interoperability with Java.
Citation metadata
Wrapped all the fields previously declared inCitationMetadatainto a
new class calledCitation. Citations can be found in the list calledcitationsinCitationMetadata. This change allows better alignment
of types across platforms.
Count tokens
Changed the fieldtotalBillableCharactersto be nullable.
Total billable characters
Changed thetotalBillableCharactersproperty inCountTokensResponseto be optional to reflect situations where no characters are sent.
Instantiating a model
Moved therequestOptionsparameter to the end of the parameter list to
align with other platforms.
Web
Note that theGoogle AIclient SDK for JavaScript has had many
changes since the time that theFirebase AI Logicclient SDKs branched from it. The
following list are some potential changes that you might need to consider as
you migrate to theFirebase AI Logicclient SDKs.
Enumerations
Removed values from the following enumerations:HarmCategory,BlockThreshold,HarmProbability,HarmSeverity,BlockReason, andFinishReason.
Block reason
ChangedblockReasoninPromptFeedbackto be optional.
Search Grounding
Removed all usages of this feature, since it's not yet supported in theFirebase AI Logic SDKs.
Errors
Removed all usages ofGoogleGenerativeAIError, and optionally move toAIError.
Dart
Enumerations
Removed values from the following enumerations:HarmCategory,HarmProbability,BlockReason, andFinishReason.
Data part
RenamedDataParttoInlineDataPart, and thestaticdatafunction
toinlineDatato align with other platforms.
Request options
RemovedRequestOptionssincetimeoutwasn't functional. It will be
re-added in the near future, but it will be moved to theGenerativeModeltype to match other platforms.
Stop sequences
Changed thestopSequencesparameter inGenerationConfigto be
optional and to default tonullinstead of an empty array.
Citations
Renamed thecitationSourcesproperty tocitationsinCitationMetadata. TheCitationSourcetype was renamed toCitationto match other platforms.
Unnecessary public types, methods, and properties
Removed the following types, methods, and properties which were
unintentionally exposed:defaultTimeout,CountTokensResponseFields,parseCountTokensResponse,parseEmbedContentResponse,parseGenerateContentResponse,parseContent,BatchEmbedContentsResponse,ContentEmbedding,EmbedContentRequest,
andEmbedContentResponse.
Count tokens
Removed extra fields from thecountTokensfunction that are no longer
necessary. Onlycontentsis needed.
Instantiating a model
Moved thesystemInstructionparameter to the end of the parameter list
to align with other platforms.
Embedding functionality
Removed unsupported embedding functionality (embedContentandbatchEmbedContents) from the model.
Unity
Support for Unity wasn't available fromGoogle AIclient SDKs.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[],[],null,[]]