Go directly to migration instructions
Why migrate to use the Firebase AI Logic SDKs?
You might have tried out an alternative set of mobile or web client SDKs that gave you access to the Gemini 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 the Firebase AI Logic client SDKs, which can give you access to the Gemini 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 the Gemini API – is running in an unprotected environment. You can use Firebase App Check to protect APIs from abuse by unauthorized clients.
When you use Firebase App Check with Firebase AI Logic, you never add your Gemini API key for the Gemini Developer API directly into your mobile or web app's codebase. Instead, the Gemini API 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. Using Firebase AI Logic means 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 using Firebase Remote Config.
Use Cloud Storage for Firebase to include large files in your multimodal requests (if you use the Vertex AI Gemini API). The Cloud Storage client 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 our solution guide about using Cloud Storage for Firebase.
Manage structured data using database SDKs built for mobile and web apps (like Cloud Firestore).
Migrate to the Firebase AI Logic SDKs
Overview of steps to migrate to the Firebase AI Logic SDKs:
Step 1: Set up a new or existing Firebase project and connect your app to Firebase.
Step 2: Add the Firebase 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 the Firebase console, and then select your Firebase project.
If you don't already have a Firebase project, click Create project, and then use either of the following options:
Option 1: Create a wholly new Firebase project (and its underlying Google Cloud project automatically) by entering a new project name in the first step of the "Create project" workflow.
Option 2: "Add Firebase" to an existing Google Cloud project by selecting your Google Cloud project name from the drop-down menu in the first step of the "Create project" workflow.
If you'd like, you can add Firebase to the project that was created behind the scenes when you created a Gemini API key in Google AI Studio.
Note that when prompted, you do not need to set up Google Analytics to use the Firebase AI Logic SDKs.
In the Firebase console, go to the Firebase AI Logic page.
Click Get started to launch a guided workflow that helps you set up the required APIs and resources for your project.
Select the Gemini 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, dedicated Gemini API key in your project.
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 the Firebase 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 the Firebase AI Logic SDK to your app.
Swift
Use Swift Package Manager to install and manage Firebase dependencies.
The Firebase AI Logic library provides access to the APIs for interacting
with Gemini and Imagen models. 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 to File > 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 the
FirebaseAI
library.
When finished, Xcode will automatically begin resolving and downloading your dependencies in the background.
Kotlin
The Firebase AI Logic SDK for Android (firebase-ai
) provides
access to the APIs for interacting with
Gemini and Imagen models.
In your module (app-level) Gradle file
(like <project>/<app-module>/build.gradle.kts
),
add the dependency for the Firebase AI Logic library for Android.
We recommend using the
Firebase Android BoM
to control library versioning.
dependencies { // ... other androidx dependencies // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.13.0")) // Add the dependency for the Firebase AI Logic library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-ai") }
By using the Firebase Android BoM, your app will always use compatible versions of Firebase Android libraries.
If you choose not to use the Firebase BoM, you must specify each Firebase library version in its dependency line.
Note that if you use multiple Firebase libraries in your app, we strongly recommend using the BoM to manage library versions, which ensures that all versions are compatible.
dependencies { // Add the dependency for the Firebase AI Logic library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-ai:16.0.0") }
Java
The Firebase AI Logic SDK for Android (firebase-ai
) provides
access to the APIs for interacting with
Gemini and Imagen models.
In your module (app-level) Gradle file
(like <project>/<app-module>/build.gradle.kts
),
add the dependency for the Firebase AI Logic library for Android.
We recommend using the
Firebase Android BoM
to control library versioning.
For Java, you need to add two additional libraries.
dependencies { // ... other androidx dependencies // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.13.0")) // Add the dependency for the Firebase AI Logic library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("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 the Firebase Android BoM, your app will always use compatible versions of Firebase Android libraries.
If you choose not to use the Firebase BoM, you must specify each Firebase library version in its dependency line.
Note that if you use multiple Firebase libraries in your app, we strongly recommend using the BoM to manage library versions, which ensures that all versions are compatible.
dependencies { // Add the dependency for the Firebase AI Logic library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-ai:16.0.0") }
Web
The Firebase AI Logic library provides access to the APIs for interacting with Gemini and Imagen models. 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-object const firebaseConfig = { // ... }; // Initialize FirebaseApp const firebaseApp = initializeApp(firebaseConfig);
Dart
The Firebase AI Logic plugin for Flutter (firebase_ai
) provides
access to the APIs for interacting with
Gemini and Imagen models.
From your Flutter project directory, run the following command to install the core plugin and the Firebase AI Logic plugin:
flutter pub add firebase_core && flutter pub add firebase_ai
In your
lib/main.dart
file, import the Firebase core plugin, the Firebase AI Logic plugin, and the configuration file you generated earlier:import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_ai/firebase_ai.dart'; import 'firebase_options.dart';
Also in your
lib/main.dart
file, initialize Firebase using theDefaultFirebaseOptions
object exported by the configuration file:await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, );
Rebuild your Flutter application:
flutter run
Unity
Support for Unity wasn't available from the Google AI client SDKs.
Learn how to get started with the Firebase AI Logic SDK for Unity.
Remove the old SDK from your app
After you've finished migrating your app (see the remaining sections in this guide), make sure to delete the old library.
Swift
Remove the old library:
In Xcode, with your app project open, navigate to the Packages Dependencies pane.
Select the
generative-ai-swift
package from the list of package dependencies.Click the
-
button from the bottom of the list and click Remove to confirm.
Kotlin
dependencies {
implementation("com.google.ai.client.generativeai:generativeai:VERSION")
}
Java
dependencies {
implementation("com.google.ai.client.generativeai:generativeai:VERSION")
}
Web
// BEFORE
import { initializeApp } from "firebase/app";
import { GoogleGenerativeAI } from "@google/generative-ai";
Dart
Delete the old package:
flutter pub remove google_generative_ai
Unity
Support for Unity wasn't available from Google AI client SDKs.
Learn how to get started with the Firebase AI Logic SDK for Unity.
Step 3: Update your imports and initialization in your app
Update your imports and how you initialize the Gemini Developer API
backend service and create a GenerativeModel
instance.
Swift
// BEFOREimport GoogleGenerativeAI let model = GenerativeModel(name: "MODEL_NAME", apiKey: APIKey.default)// AFTER import FirebaseAI // Initialize the Gemini Developer API backend service let ai = FirebaseAI.firebaseAI(backend: .googleAI()) // Create a `GenerativeModel` instance with a model that supports your use case let model = ai.generativeModel(modelName: "gemini-2.0-flash")
Kotlin
// BEFOREimport com.google.ai.client.generativeai.Chat import com.google.ai.client.generativeai.type.Content import com.google.ai.client.generativeai.java.GenerativeModuleFutures...val generativeModel = GenerativeModel(modelName = "MODEL_NAME", // Access your API key as a Build Configuration variable apiKey = BuildConfig.apiKey )// AFTER import com.google.firebase.Firebase import com.google.firebase.ai.ai import com.google.firebase.ai.type.GenerativeBackend ... // Initialize the Gemini Developer API backend service // Create a `GenerativeModel` instance with a model that supports your use case val model = Firebase.ai(backend = GenerativeBackend.googleAI()) .generativeModel("gemini-2.0-flash")
Java
// BEFOREimport com.google.ai.client.generativeai.Chat; import com.google.ai.client.generativeai.type.Content; import com.google.ai.client.generativeai.java.GenerativeModuleFutures;...GenerativeModel gm = new GenerativeModel("MODEL_NAME", // Access your API key as a Build Configuration variable BuildConfig.apiKey ); GenerativeModelFutures model = GenerativeModelFutures.from(gm);// AFTER import com.google.firebase.ai.FirebaseAI; import com.google.firebase.ai.GenerativeModel; import com.google.firebase.ai.java.GenerativeModelFutures; import com.google.firebase.ai.type.GenerativeBackend; ... // Initialize the Gemini Developer API backend service // Create a `GenerativeModel` instance with a model that supports your use case GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI()) .generativeModel("gemini-2.0-flash"); // Use the GenerativeModelFutures Java compatibility layer which offers // support for ListenableFuture and Publisher APIs GenerativeModelFutures model = GenerativeModelFutures.from(ai);
Web
// BEFOREimport { GoogleGenerativeAI } from "@google/generative-ai"; // Fetch your API_KEY and access your API const API_KEY = "..."; const genAI = new GoogleGenerativeAI(API_KEY);...const model = genAI.getGenerativeModel({ model: "MODEL_NAME"});// AFTER import { 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-object const firebaseConfig = { // ... }; // Initialize FirebaseApp const firebaseApp = initializeApp(firebaseConfig); // Initialize the Gemini Developer API backend service const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() }); // Create a `GenerativeModel` instance with a model that supports your use case const model = getGenerativeModel(ai, { model: "gemini-2.0-flash" });
Dart
// BEFOREimport 'package:google_generative_ai/google_generative_ai.dart'; final apiKey = Platform.environment['API_KEY']; if (apiKey == null) { print('No \$API_KEY environment variable'); exit(1); } final model = GenerativeModel(model: 'MODEL_NAME', apiKey: apiKey);// AFTER import 'package:firebase_ai/firebase_ai.dart'; import 'package:firebase_core/firebase_core.dart'; import 'firebase_options.dart'; // Initialize FirebaseApp await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); // Initialize the Gemini Developer API backend service // Create a `GenerativeModel` instance with a model that supports your use case final model = FirebaseAI.googleAI().generativeModel(model: 'gemini-2.0-flash');
Unity
Support for Unity wasn't available from Google AI client SDKs.
Learn how to get started with the Firebase AI Logic SDK for Unity.
Note that depending on the capability you're using, you might not always
create a GenerativeModel
instance.
- To access an Imagen model,
create an
ImagenModel
instance.
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.
The Firebase AI Logic client 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 the Firebase AI Logic client 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 updated function calling guide to learn how to write your function declarations.Generating structured output (like JSON) using
responseSchema
If you implemented this feature, then you'll need to make updates to how you define your schema. We recommend reviewing the new structured output guide to 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 most
enum
types withstruct
s with static variables. This change allows more flexibility for evolving the API in a backward-compatible way. When usingswitch
statements, 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 the
BlockThreshold
enumeration toHarmBlockThreshold
; this type is now astruct
.Removed
unknown
andunspecified
cases from the following enumerations (nowstruct
s):HarmCategory
,HarmBlockThreshold
,HarmProbability
,BlockReason
, andFinishReason
.Replaced the enumeration
ModelContent.Part
with a protocol namedPart
to allow new types to be added in a backward-compatible way. This change is described in greater detail in the Content parts section.
Content parts
Removed the
ThrowingPartsRepresentable
protocol, and simplified the initializers forModelContent
to avoid occasional compiler errors. Images that don't encode properly will still throw errors when being used ingenerateContent
.Replaced the
ModelContent.Part
cases with the followingstruct
types conforming to thePart
protocol:.text
toTextPart
.data
toInlineDataPart
.fileData
toFileDataPart
.functionCall
toFunctionCallPart
.functionResponse
toFunctionResponsePart
Harm category
- Changed the
HarmCategory
to no longer be nested in theSafetySetting
type. If you're referring to it asSafetySetting.HarmCategory
, that can be replaced withHarmCategory
.
- Changed the
Safety feedback
- Removed the
SafetyFeedback
type, since it wasn't used in any of the responses.
- Removed the
Citation metadata
- Renamed the
citationSources
property tocitations
inCitationMetadata
.
- Renamed the
Total billable characters
- Changed the
totalBillableCharacters
property inCountTokensResponse
to be optional to reflect situations where no characters are sent.
- Changed the
Candidate response
- Renamed
CandidateResponse
toCandidate
to match other platforms.
- Renamed
Generation configuration
- Changed the public properties of
GenerationConfig
tointernal
. They all remain configurable in the initializer.
- Changed the public properties of
Kotlin
Enumerations
Replaced
enum
classes andsealed
classes with regular classes. This change allows more flexibility for evolving the API in a backward compatible way.Renamed the
BlockThreshold
enumeration toHarmBlockThreshold
.Removed values from the following enumerations:
HarmBlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
, andFinishReason
.
Blob methods
- Renamed all methods that included
Blob
as part of their name to useInlineData
instead.
- Renamed all methods that included
Safety settings
- Changed the field
method
to be nullable.
- Changed the field
Duration class
- Removed all usages of Kotlin's
Duration
class, and replaced it withlong
. This change provides better interoperability with Java.
- Removed all usages of Kotlin's
Citation metadata
- Wrapped all the fields previously declared in
CitationMetadata
into a new class calledCitation
. Citations can be found in the list calledcitations
inCitationMetadata
. This change allows better alignment of types across platforms.
- Wrapped all the fields previously declared in
Count tokens
- Changed the field
totalBillableCharacters
to be nullable.
- Changed the field
Total billable characters
- Changed the
totalBillableCharacters
property inCountTokensResponse
to be optional to reflect situations where no characters are sent.
- Changed the
Instantiating a model
- Moved the
requestOptions
parameter to the end of the parameter list to align with other platforms.
- Moved the
Java
Enumerations
Replaced
enum
classes andsealed
classes with regular classes. This change allows more flexibility for evolving the API in a backward compatible way.Renamed the
BlockThreshold
enumeration toHarmBlockThreshold
.Removed values from the following enumerations:
HarmBlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
, andFinishReason
.
Blob methods
- Renamed all methods that included
Blob
as part of their name to useInlineData
instead.
- Renamed all methods that included
Safety settings
- Changed the field
method
to be nullable.
- Changed the field
Duration class
- Removed all usages of Kotlin's
Duration
class, and replaced it withlong
. This change provides better interoperability with Java.
- Removed all usages of Kotlin's
Citation metadata
- Wrapped all the fields previously declared in
CitationMetadata
into a new class calledCitation
. Citations can be found in the list calledcitations
inCitationMetadata
. This change allows better alignment of types across platforms.
- Wrapped all the fields previously declared in
Count tokens
- Changed the field
totalBillableCharacters
to be nullable.
- Changed the field
Total billable characters
- Changed the
totalBillableCharacters
property inCountTokensResponse
to be optional to reflect situations where no characters are sent.
- Changed the
Instantiating a model
- Moved the
requestOptions
parameter to the end of the parameter list to align with other platforms.
- Moved the
Web
Note that the Google AI client SDK for JavaScript has had many changes since the time that the Firebase AI Logic client SDKs branched from it. The following list are some potential changes that you might need to consider as you migrate to the Firebase AI Logic client SDKs.
Enumerations
- Removed values from the following enumerations:
HarmCategory
,BlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
, andFinishReason
.
- Removed values from the following enumerations:
Block reason
- Changed
blockReason
inPromptFeedback
to be optional.
- Changed
Search Grounding
- Removed all usages of this feature, since it's not yet supported in the Firebase AI Logic SDKs.
Errors
- Removed all usages of
GoogleGenerativeAIError
, and optionally move toAIError
.
- Removed all usages of
Dart
Enumerations
- Removed values from the following enumerations:
HarmCategory
,HarmProbability
,BlockReason
, andFinishReason
.
- Removed values from the following enumerations:
Data part
- Renamed
DataPart
toInlineDataPart
, and thestatic
data
function toinlineData
to align with other platforms.
- Renamed
Request options
- Removed
RequestOptions
sincetimeout
wasn't functional. It will be re-added in the near future, but it will be moved to theGenerativeModel
type to match other platforms.
- Removed
Stop sequences
- Changed the
stopSequences
parameter inGenerationConfig
to be optional and to default tonull
instead of an empty array.
- Changed the
Citations
- Renamed the
citationSources
property tocitations
inCitationMetadata
. TheCitationSource
type was renamed toCitation
to match other platforms.
- Renamed the
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
.
- Removed the following types, methods, and properties which were
unintentionally exposed:
Count tokens
- Removed extra fields from the
countTokens
function that are no longer necessary. Onlycontents
is needed.
- Removed extra fields from the
Instantiating a model
- Moved the
systemInstruction
parameter to the end of the parameter list to align with other platforms.
- Moved the
Embedding functionality
- Removed unsupported embedding functionality (
embedContent
andbatchEmbedContents
) from the model.
- Removed unsupported embedding functionality (
Unity
Support for Unity wasn't available from Google AI client SDKs.
Learn how to get started with the Firebase AI Logic SDK for Unity.
Give feedback about your experience with Firebase AI Logic