Java SDK
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 https //github.
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.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 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 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.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.2
August 1st, 2018 \### Bug Fixes 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.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 - 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 - 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.