August 2, 2024: V6.0.0
-
Official Cloudbees platform support (No breaking changes)
November 27, 2023: V5.0.13 Changing core dependency to Java 1.8
-
rox-java-coredependency now built with Java 1.8.
May 18, 2023: V5.0.9 Support for HTTP proxies
-
RoxOptions now allows proxying of traffic through
HttpProxyConfig, a standard HTTP proxy, in addition to the rox simple proxy. -
The updated network configuration now allows you to specify alternate URLs for API calls, to support the upcoming CloudBees platform.
Refer to Flag update flow for more information.
-
Updating org.json dependency
September 29, 2022: V5.0.8 Loading local storage and embedded configurations synchronously
-
Rox.Setupis now aware of new configurations fetched from network. Local storage configurations and embedded configurations are now loaded synchronously before the network call withinSetup. Now the later one is used, guaranteeing that by the time the code after setup runs, flags are using the latest local configurations. Before this update, local configurations were loaded asynchronously.Refer to Flag update flow for more information.
-
Updating org.json dependency
May 20, 2022
-
European Union (EU) hosting has been removed.
January 21, 2022: V5.0.6 Shadowed network library update
-
Updated version of OkHttp to 3.12.13
2021-08-12: V5.0.5 New proxy capability
-
Added a proxy that supports servers or clients using CloudBees Feature Management SDKs with the following connection issues:
-
No internet access
-
Trouble connecting to CloudBees Feature Management services
-
Blocked by a firewall
-
Client does not have CORS permissions
-
Needing full control over network requests
Refer to A proxy for CloudBees Feature Management for more information.
-
2021-07-19: V5.0.4
-
Fixed push notification bug
-
Adding EU hosting support
2021-06-03: V5.0.2
-
Fixed embedded configuration
2021-04-01: V5.0.1
-
Few internal bug fixes.
2021-03-28: V5.0.0
Breaking changes:
-
RoxVariantchanged toRoxString-
new RoxVariant("defaultStr", new String[] {"str1", "str2"})⇒new RoxString("defaultStr", new String[] {"str1", "str2"}).
-
-
RoxEnumVariantrenamed toRoxEnum.-
new RoxEnumVariant<>(MyEnumType.Value)⇒new RoxEnum<>(MyEnumType.Value).
-
-
Functions input validations
-
Some trivial parameters (mostly type) validations were added to
dynamicApiand flags constructions. For example:new RoxString(null)will raise anIllegalArgumentExceptionas default cannot be null (default value ofRoxStringshould be a string).Rox.dynamicApi.value(null, "defaultStr", ["str2", "str3"])will raise anIllegalArgumentExceptionbecause of null flag name (name should always be a string).
-
Fixes and Additions:
-
Can use register without a namespace:
-
register(container)will register the container under an empty string namespace (multiple register calls with the same namespaces are still not allowed!).
-
-
Added a User Space Error handling
-
It is recommended to wrap all handlers used in Rox platform (all
CustomPropertyGenerator.generateProperty,ImpressionHandler.onImpression,ConfigurationFetchedHandler.onConfigurationFetched,DynamicPropertyRule.invoke) with try-catch in order to be in the right context. In case there will be an uncaught error, it will reach theRox.setUserspaceUnhandledErrorHandlerhandler. You can use this handler for debugging, or for further error handling. AThrowablethrown within this handler will be written to log. If nosetUserspaceUnhandledErrorHandlerwas set, errors will be written to the log.
-
-
Analytics / impressions
-
Starting with SDK 5, flags will always send impressions after setup (not only when targeting is enabled on the dashboard).
-
-
Impression handler parameters change
-
As experiments were removed, impressions handler signature was changed from (
reportingValue,experiment,context) to (ImpressionEvent event). Besidesname,value, andcontextproperties,eventalso providestargeting(boolean) property, indicating the flag was evaluated by using the dashboard configurations.
-
-
New Flag Types Int/Double
-
In addition to
RoxFlagandRoxString, we also addedRoxIntandRoxDouble -
DynamicApiwas also updated with matchinggetIntandgetDoublemethods.
-
-
Added a graceful
Rox.shutdown-
In order to clean all background tasks.
-
multiple
Rox.setupcalls will be ignored if Rox wasn’t shutdown in between.
-
-
Added
RoxOptions.Builder.withDynamicPropertyRule. -
Remote configurations were eliminated, please use flags instead:
-
new RoxConfigurationString ⇒ new RoxString
-
new RoxConfigurationInt ⇒ new RoxInt
-
new RoxConfigurationDouble ⇒ new RoxDouble
-
new RoxConfigurationBool ⇒ new RoxFlag
-
2020-04-30: V4.9.1
-
Self-managed support added
2019-09-16: V4.8.0
-
API version 1.8.0
-
Values are base64 - fixing " and () bug
-
Changes to API calls, using Cloudfront
2019-06-12: V4.6.4
-
Fixed Concat bug
-
Adding Kill switch to remotely shut down the SDK
2019-01-17: V4.6.0
-
Non-public fields are also registered inside the container (for Scala compatibility)
-
Rox.reset()function was added (See Java API - reset for documentation)
2018-11-28: V4.3.0
-
Added push updates support
2018-11-08: V4.2.0
-
internal changes
2018-10-18: V4.1.1
-
Rox.setup returns a Future<Void>
2018-08-20: V4.1.0
-
Encrypted in operator - you can now use in operator and the data will be passed to the clients encrypted
-
API version 1.7.0
2018-06-18: V3.2.0
-
Overrides API - override your flags value locally
-
Roxy Support - Use the Roxy server as your ROX configuration endpoint
2018-05-31: V3.1.0
-
Dynamic API - getting a flag value by it’s name
2018-05-09: V3.0.0
-
flag dependency support
-
add isArchive to flag impression handler
-
fixed error in failed debug log messages
2018-04-15: V2.0.3
-
Fixed leak in s3 access
2018-04-12: V2.0.2
-
Fixed leak in s3 access
2018-01-03: V2.0.0
-
General Availability !!!!
-
Added impression Handler on
RoxOptions- allowing to hook custom action (e.g. analytic reporting) when a flag value is evaluated -
Added
withSyncCompletionHandleronRoxOptions- get an update once configuration is processes on the device -
Namespace is moved to register - instead of registering the container and placing the namespace inside the container object we move the container to the register function