Java SDK
Java-SDK - 4.6.0
September 2, 2026 Holdout Targeted Delivery Exclusion Holdouts can now be configured to exclude Targeted Delivery rules, so users held out of experiments still receive their Targeted Delivery experiences. This gives you a cleaner measure of experiment impact without holding users back from ongoing rollouts.
Java-SDK - 4.5.0
July 7, 2026 Local Holdouts Added support for Local Holdouts, enabling holdout experiments to be scoped to specific feature flags rather than applied globally. Local Holdouts let you measure the true incremental impact of individual features by holding out a subset of users from specific rollouts while still serving them other experiences.
Java-SDK - 4.4.2
May 29, 2026 Include commonIdentifiers when counting identifiers in identifyUser ( #631 https //github. com/optimizely/java-sdk/pull/631 ) https //github.
Java-SDK - 4.4.1
May 28, 2026 Block ODP identify event for single identifier ( #629 https //github. com/optimizely/java-sdk/pull/629 ) Add local holdouts support ( #628 https //github.
Java-SDK - 4.4.0
May 4, 2026 Feature Rollout Added support for Feature Rollouts, a new experiment type combining Targeted Delivery simplicity with A/B test measurement capabilities. Feature Rollouts enable progressive rollouts with full impact analytics, metric tracking, and confidence intervals.
Java-SDK - 4.3.1
\#431 Jan 20th, 2025 \#fixes \[FSSDK-12030] Exclude CMAB from UserProfileService ( #595 https //github. com/optimizely/java-sdk/pull/595 ) \[FSSDK-11953] Fix missing bucketing reasons in CMAB decision path ( #592 https //github.
Java-SDK - 4.3.0
\#430 Dec 10th, 2025 \#new-features CMAB (Contextual Multi-Armed Bandit) Support Added support for CMAB experiments with new configuration options and cache control ( #577 https //github. com/optimizely/java-sdk/pull/577 , #578 https //github.
Java-SDK - 4.2.2
\#422 May 28th, 2025 \#fixes Add experimentId and variationId to decision notification ( #569 https //github. com/optimizely/java-sdk/pull/569 ).
Java-SDK - 4.2.1
\#421 Feb 19th, 2025 \#fixes Fix big integer conversion ( #556 https //github. com/optimizely/java-sdk/pull/556 ).
Java-SDK - 4.2.0
\#420 November 6th, 2024 \#new-features Batch UPS lookup and save calls in decideAll and decideForKeys methods ( #549 https //github. com/optimizely/java-sdk/pull/549 ).
Java-SDK - 4.1.1
\#411 May 8th, 2024 \#fixes Fix logx events discarded for staled connections with httpclient connection pooling ( #545 https //github. com/optimizely/java-sdk/pull/545 ).
Java-SDK - 4.1.0
\#410 April 12th, 2024 \#new-features OptimizelyFactory method for injecting customHttpClient is fixed to share the customHttpClient for all modules using httpClient (HttpProjectConfigManager, AsyncEventHander, ODPManager) ( #542 https //github. com/optimizely/java-sdk/pull/542 ).
Java-SDK - 3.10.4
June 8th, 2023 Fix intermittent logx event dispatch failures possibly caused by reusing stale connections. Add evictIdleConnections (1min) to OptimizelyHttpClient in AsyncEventHandler to force close persistent connections after 1min idle time ( #518 https //github.
Java-SDK - 3.10.3
March 13th, 2023 We updated our README. md and other non-functional code to reflect that this SDK supports both Optimizely Feature Experimentation and Optimizely Full Stack ( #506 https //github.
Java-SDK - 3.10.2
March 17th, 2022 For some audience condition matchers (semantic-version, le, or ge), SDK logs WARNING messages when the attribute value is missing. This is fixed down to the DEBUG level to be consistent with other condition matchers ( #463 https //github.
Java-SDK - 3.10.1
February 3rd, 2022 Fix NotificationManager to be thread-safe (add-handler and send-notifications can happen concurrently) ( #460 https //github. com/optimizely/java-sdk/pull/460 ).
Java-SDK - 3.10.0
January 11, 2022 Add a set of new APIs for overriding and managing user-level flag, experiment and delivery rule decisions. These methods can be used for QA and automated testing purposes.
Java-SDK - 3.9.0
September 16th, 2021 Added new public properties to OptimizelyConfig. #434 https //github.
Java-SDK - 3.8.2
March 8th, 2021 Fix intermittent SocketTimeout exceptions while downloading datafiles. Add configurable evictIdleConnections to HttpProjectConfigManager to force close persistent connections after the idle time (evict after 1min idle time by default) ( #431 https //github.
Java-SDK - 3.8.1
March 2nd, 2021 Switch publish repository to MavenCentral (bintray/jcenter sunset) Fix app crashing when the rollout length is zero ( #423 https //github. com/optimizely/java-sdk/pull/423 ).
Java-SDK - 3.8.0
February 3rd, 2021 Introducing a new primary interface for retrieving feature flag status, configuration and associated experiment decisions for users ( #406 https //github. com/optimizely/java-sdk/pull/406 , #415 https //github.
Java-SDK - 3.8.0-beta2
January 14th, 2021 Clone user-context before calling Optimizely decide ( #417 https //github. com/optimizely/java-sdk/pull/417 ) Return reasons as a part of tuple in decision hierarchy ( #415 https //github.
Java-SDK - 3.8.0-beta
December 14th, 2020 Introducing a new primary interface for retrieving feature flag status, configuration and associated experiment decisions for users. The new OptimizelyUserContext class is instantiated with createUserContext and exposes the following APIs ( #406 https //github.
Java-SDK - 3.7.0
November 20th, 2020 Add support for upcoming application-controlled introduction of tracking for non-experiment Flag decisions. ( #405 https //github.
Java-SDK - 3.6.0
September 30th, 2020 Add support for version audience condition which follows the semantic version ( #386 https //github. com/optimizely/java-sdk/pull/386 ).
Java-SDK - 3.5.0
July 7th, 2020 Add support for JSON feature variables ( #372 https //github. com/optimizely/java-sdk/pull/372 , #371 https //github.
Java-SDK - 3.5.0-beta
July 2nd, 2020 Add support for JSON feature variables ( #372 https //github. com/optimizely/java-sdk/pull/372 , #371 https //github.
Java-SDK - 3.4.3
April 28th, 2020 Change FeatureVariable type from enum to string for forward compatibility. ( #370 https //github.
Java-SDK - 3.4.2
March 30th, 2020 Change log level to debug for "Fetching datafile from" in HttpProjectConfigManager. ( #362 https //github.
Java-SDK - 3.4.1
January 30th, 2020 Remove usage of stream to support Android API 21 and 22. ( #357 https //github.
Java-SDK - 3.3.4
December 16th, 2019 Accept http client parameters via system properties. ( #349 https //github.
Java-SDK - 3.4.0
January 27th, 2020 Added a new API to get project configuration static data. Call getOptimizelyConfig() to get a snapshot of project configuration static data.
Java-SDK - 3.2.2
December 16th, 2019 Accept http client parameters via system properties. ( #349 https //github.
Java-SDK - 3.3.3
November 14th, 2019 Require EventHandler in BatchEventProcessor builder. ( #333 https //github.
Java-SDK - 3.3.2
October 23rd, 2019 The BatchEventProcessor was refactored for performance so that it ends up hanging on the blocking queue if there is nothing to processes. ( #343 https //github.
Java-SDK - 3.3.0
October 1st, 2019 Introduced EventProcessor interface with BatchEventProcessor implementation. Introduced LogEvent notification.
Java-SDK - 3.2.1
August 19th, 2019 Add clear deprecation path from factory builder method. Make Optimizely#withDatafile public.
Java-SDK - 3.2.0
June 26th, 2019 Added support for automatic datafile management via HttpProjectConfigManager The HttpProjectConfigManager https //github. com/optimizely/java-sdk/blob/master/core-httpclient-impl/src/main/java/com/optimizely/ab/config/HttpProjectConfigManager.
Java-SDK - 3.4.0-beta
July 24th, 2019 Introduced EventProcessor interface with BatchEventProcessor implementation. Introduced LogEvent notification.
Java-SDK - 3.2.0-alpha
May 23rd, 2019 Added support for automatic datafile management via HttpProjectConfigManager The HttpProjectConfigManager https //github. com/optimizely/java-sdk/blob/master/core-httpclient-impl/src/main/java/com/optimizely/ab/config/HttpProjectConfigManager.
Java-SDK - 3.1.0
May 6th, 2019 Introduced Decision notification listener to be able to record Variation assignments for users activated in an experiment. Feature access for users.
Java-SDK - 3.0.1
April 23, 2019 This is a simple fix so that older versions of org. json can still parse the datafile.
Java-SDK - 3.0.0
February 13, 2019 The 3. 0 release improves event tracking and supports additional audience targeting functionality.
Java-SDK - 3.0.0-RC2
November 20th, 2018 This is the release candidate for the 3. 0 SDK, which includes a number of improvements to audience targeting along with a few bug fixes.
Java-SDK - 2.1.4
December 6th, 2018 fix/wrap in try catch for getting build version in static init which might crash ( #241 https //github. com/optimizely/java-sdk/pull/241 ) https //github.
Java-SDK - 3.0.0-RC
November 7th, 2018 This is the release candidate for the 3. 0 SDK, which includes a number of improvements to audience targeting along with a few bug fixes.
Java-SDK - 3.0.0-alpha
October 10th, 2018 This is the alpha release of the 3. 0 SDK, which includes a number of improvements to audience targeting along with a few bug fixes.
Java-SDK - 2.1.3
fix(attributes) Filters out attributes with null values from the event payload ( #204 https //github. com/optimizely/java-sdk/pull/204 ) https //github.
Java-SDK - 2.1.2
August 1st, 2018 Move serialization to LogEvent. getBody() to improve performance of API calls ( #201 https //github.
Java-SDK - 2.1.0
June 15th, 2018 Introduces support for bot filtering. https //github.
Java-SDK - 2.0.1 Release
April 25th, 2018 This is a patch release of the Optimizely SDK for 2. 0.
Java-SDK - 2.0.0
April 12th, 2018 This major release of the Optimizely SDK introduces APIs for Feature Management. It also introduces some breaking changes listed below.
Java-SDK - 2.0.0 Beta 8
April 3rd, 2018 This build includes everything from 2. 0.
Java-SDK - 2.0.0 Beta 7
March 29th, 2018 This major release of the Optimizely SDK introduces APIs for Feature Management. It also introduces some breaking changes listed below.
Java-SDK - 2.0.0 Beta 4
February 1, 2018 This release is a fourth beta release supporting feature flags and rollouts. It includes all the same new features and breaking as the last beta release.
Java-SDK - 1.9.0
This release adds support for bucketing id (By passing in $opt bucketing id in the attribute map to override the user id as the bucketing variable. This is useful when wanting a set of users to share the same experience such as two players in a game).
Java-SDK - 2.0.0-beta3
January 5, 2018 This release is a third beta release supporting feature flags and rollouts. It includes all the same new features and breaking as the last beta release.
Java-SDK - 1.8.1
December 12, 2017 This is a patch release for 1. 8.
Java-SDK - 2.0.0-beta2
October 5, 2017 This release is a second beta release supporting feature flags and rollouts. It includes all the same new features and breaking changes as the last beta release.
Java-SDK - 2.0.0-beta
September 29, 2017 This release is a beta release supporting feature flags and rollouts. You can now use feature flags in the Java SDK.
Java-SDK - 1.8.0
August 29, 2017 This release adds support for numeric metrics and forced bucketing (in code as opposed to whitelisting via project file). Added setForcedVariation and getForcedVariation Added any numeric metric to event metrics.
Java-SDK - 1.6.0
Add event tags to track API and include in the event payload Deprecates the eventValue parameter from the track method. Should use event tags to pass in event value instead Gracefully handle a null attributes parameter Gracefully handle a null/empty datafile when using the Gson parser https //github.
Java-SDK - 1.5.0
Support Android TV SDK client engine https //github. com/optimizely/java-sdk/releases/tag/1.
Java-SDK - 1.4.1
Default null status in datafile to Not started https //github. com/optimizely/java-sdk/releases/tag/1.
Java-SDK - 1.4.0
Add sessionId parameter to activate and track and include in event payload Append datafile revision to event payload Add support for "Launched" experiment status https //github. com/optimizely/java-sdk/releases/tag/1.
Java-SDK - 1.3.0
Add onEventTracked listener Change getVariableFloat to getVariableDouble Persist experiment and variation IDs instead of keys in the UserProfile https //github. com/optimizely/java-sdk/releases/tag/1.