Upgrade from InstantSearch v4 to v5
InstantSearch Android 5.0 targets Android 17 (API level 37) and builds with Kotlin 2.4, Android Gradle Plugin (AGP) 9, and Compose 1.12. The InstantSearch API doesn’t change: widgets, connectors, searchers, filters, and Insights keep the 4.x signatures. The major version reflects new build requirements that every app using the library must meet.Requirements
The published libraries declare
minCompileSdk = 37. Gradle refuses to resolve them from a module with a lower compileSdk, so update compileSdk first.
Update the build tools
SetcompileSdk to 37 in every Android module that depends on InstantSearch, and update AGP to 9.1.1 or later, the first release that supports API level 37.
AGP 9 requires Gradle 9.
gradle/libs.versions.toml
gradle/wrapper/gradle-wrapper.properties
- AGP includes Kotlin support. Remove the
org.jetbrains.kotlin.android(kotlin-android) plugin from your Android modules. kotlin { compilerOptions }replaceskotlinOptions.composeOptions { kotlinCompilerExtensionVersion }is no longer needed. Apply theorg.jetbrains.kotlin.plugin.composeplugin instead.
Target Java 11
The Android libraries (instantsearch-android, instantsearch-compose, instantsearch-insights-android, instantsearch-android-paging3, instantsearch-android-loading) compile to Java 11 bytecode, like current AndroidX libraries.
InstantSearch exposes public inline functions such as QueryRuleCustomDataConnector and MutableFilters.add, so Kotlin refuses to inline Java 11 bytecode into a module compiled for Java 8:
minSdk stays at 23: D8 rewrites Java 11 language features for older devices.
instantsearch-core, instantsearch-coroutines-extensions, and the -jvm variants) still target Java 8.
Update dependencies
build.gradle
Non-null onCheckedChanged parameters
FilterMapViewRadioGroup and FilterToggleViewCompoundButton implement the platform OnCheckedChangeListener interfaces.
API level 37 marks these callback parameters as non-null, so the overrides changed:
OnCheckedChangeListener implementations that still use the old signatures with ?: with compileSdk 37, the Kotlin compiler reports 'onCheckedChanged' overrides nothing until you remove the ?.
Migration checklist
- Update the build tools: Gradle 9, AGP 9.1.1 or later, Kotlin 2.4 or later
- Set
compileSdkto 37 in every Android module that depends on InstantSearch - Set the Java and Kotlin targets to 11 (
compileOptionsandjvmTarget) in those modules - Remove the
kotlin-androidplugin and migratekotlinOptionstokotlin { compilerOptions }if you upgraded from AGP 8 - Update the InstantSearch dependencies to
5.+ - Align Compose: use a BOM that maps to Compose 1.12.1 or later, and declare
material-icons-coreormaterial-icons-extendedif your code usesIcons - Fix
OnCheckedChangeListeneroverrides that still use parameters with? - Review the Android 17 behavior changes for your app before you set
targetSdkto 37, in particular the large-screen changes (Android ignores orientation and resizing restrictions on screens 600dp and wider) and the local network permission. The library declares no Activity, Service, or permission, so it isn’t affected - Run your test suite on an Android 17 emulator or device
Upgrade from InstantSearch v3 to v4
In InstantSearch v4.0.0 and later, InstantSearch uses Kotlin 2.2 and the Algolia Kotlin API client 3.x. This client updates models and simplifies types.Kotlin
Requirements
InstantSearch Android 4.x has updated minimum requirements:Wrapper types removed
The Kotlin API client 3.x removed primitive wrapper types. Use plainString values instead:
Search parameters
Replaces theQuery class with SearchParamsObject from the Algolia Kotlin Client 3.x:
Response types
Search response types have been updated to match the Kotlin API client 3.x:Filters
InstantSearch now owns its own filter model. Update your imports:Request options
RequestOptions uses immutable construction from the Algolia Kotlin Client 3.x:
Insights
Insights has been updated to use v3 events and thepushEvents API:
Trackers
Tracker initialization now usesString for event names:
Indexable interface
Hit models for tracking must implement theIndexable interface:
Kotlin
Removed features
The following features have been removed in v4:Dependencies
Update your dependencies inbuild.gradle or gradle/libs.versions.toml:
Migration checklist
- Update dependencies to the versions listed above
- Update
minSdkto 23 in yourbuild.gradle - Remove wrapper types: replace
ApplicationID,APIKey,IndexName,Attribute,ObjectID,QueryID,EventName,UserTokenwith plainString - Update query types: replace
QuerywithSearchParamsObject - Update response types: replace
ResponseSearchwithSearchResponse,FacetwithFacetHits - Update filter imports: use
com.algolia.instantsearch.filter.Filterinstead ofcom.algolia.search.model.filter.Filter - Update Insights: use v3 event methods instead of
InsightsEventconstructors - Implement
Indexable: ensure hit models implementIndexablefor tracking - Remove Answers/Places: if using
SearcherAnswersorSearcherPlaces, migrate to standard search - Test thoroughly: the new versions include significant internal changes
Upgrade event tracking
Starting from v3.2.0, InstantSearch makes it easier to send view events using theisAutoSendingHitsViewEvents option on HitsSearcher:
Kotlin
Upgrade from InstantSearch v2 to v3
The library version3.0 uses Kotlin 1.6 and Algolia Kotlin API Client 2.0.
Below are the steps to migrate.
This new version removes all deprecated methods and features from
v2.InstantSearch Android package
InstantSearch Android package has changed. Update your imports accordingly:Kotlin API client
The Kotlin API client (and its underlying Ktor client) is part of the library’s binary interface. Read the migration guide, or apply the following changes:LogLevel
The library uses LogLevel from the Kotlin API client instead of Ktor’s Loglevel:
Public constants
Constants (for example,KeyIndexName, KeyEnglish, and RouteIndexesV1) aren’t exposed.
Use your constants instead.
Ktor client
For more information, refer to Ktor’s migration guide.Searchers
Legacy searchers are removed. Migrate as follows:Extension modules
Multiple extensions have been extracted to modules:Upgrade from InstantSearch v1 to v2
InstantSearch v2 introduces a new architecture and new widgets, which brings several breaking changes from v1:-
No longer an
InstantSearchcomponent automatically connecting widgets. You are now in control of theSearcherand responsible for connecting and disconnecting it from widgets and other components. -
The widgets are now built around
ViewModels, holding their data and business logic. Compared to the V1 where widgets were AndroidViews, now the core of the widget is its view-model, and the UI is behind an interface to ensure minimal coupling.
The InstantSearch Android v1 documentation is available on the legacy docs page.