Feature Flags release notes
Review the notes below for details about recent changes to Harness Feature Flags (FF). For release notes for Harness Self-Managed Enterprise Edition, go to Self-Managed Enterprise Edition release notes. Additionally, Harness publishes security advisories for every release. Go to the Harness Trust Center to request access to the security advisories.
Harness deploys changes to Harness SaaS clusters on a progressive basis. This means that the features and fixes that these release notes describe may not be immediately available in your cluster. To identify the cluster that hosts your account, go to the Account Overview page.
Latest Updated: November 29th 2023
November 2023
Android SDK
Version 1.2.5
- Only log Flag/Segment not found warning in valid scenarios
Version 1.2.1
- The Flag/Target Group streaming updates no longer result in a
ClassCastException
. - The Target group streaming changes are now sent in the
EVALUATION_RELOADED
event instead ofEVALUATION_CHANGED
.
Version 1.2.0
- Add dependency-check-gradle to build
- Improve logging + Adding SDK error codes
- Update SSE implementation
- Bump minSdk to 21 and targetSdk to 33
- Fixed jsonVariation always returns default value
- Update client API code to use latest ff-api definitions
- Fixed metrics reporting 0 in payload
- Avoid posting metrics if total evaluation count is 0
- Add refreshEvaluations
- Retry on Client Authentication failures
- Add retry interceptor to authentication
- Add waitForInit
Golang SDK
Version 0.1.6
- Add dead SSE stream detection
- SSE reconnection improvements
- Use Harness fork of r3labs/sse
- Add analytics headers to requests made by the SDK
Java SDK
Version 1.3.1
- Added Java 21 Support.
- Marked private attributes not working.
- Improved stream restart logic.
Node.js SDK
Version 1.4.0
- Can now remediate build time CVEs.
- Can now fall back to identifier if the
bucketBy
attribute is not found.
Version 1.3.7
- Upgrade Axios due to CVE
Python SDK
Version 1.3.0
- The below requests now implement a retry mechanism of up to 10 retries on retryable errors:
- target-segments,
- feature-config,
- target-segments/{identifier}, and
- feature-config/{identifier}.
Fixed issues
- Pip upgraded to 23.3.
- Requests upgraded to 2.31.0.
- Changed Murmur3 hash calculation to be unsigned instead of signed to ensure the Python SDK produces the same hash as other SDKs for use in percentage rollout caclculation.
- Deleted resources are only removed from the local cache where the SDK would try to fetch deleted resources from the server after SSE delete events, resulting in 404 errors.
- The SDK now throws and catches an exception instead of returning 'None', which would previously result in an uncaught
AttributeError
when flag or group requests failed after exceeding all retry attempts. - When requesting a variation on the wrong flag type (e.g., requesting a boolean on a string) would attempt to evaluate. Now, an SDK error code is logged, and the default variation is returned.
- Improved the logic to stop polling if streaming is enabled. Additionally, fixed an issue where the poller would stop and not make any more flag updates after encountering an exception during a request.
- Logging to correctly indicate when a stream disconnects and the SDK falls back to polling.
- Changed various verbose logs from info to debug.
Version 1.2.4
- Set default log level to WARNING
Ruby SDK
Version 1.2.0
- The percentage rollout bucket by logic is now fixed to match Golang SDK.
October 2023
Golang SDK
Version 0.1.15
New features and enhancements
- Flag cleanup automation beta available to all customers. This feature helps remove stal flags from your code automatically.
Fixed Issues
- If SSE disconnects, it now reconnects immediately instead of at every polling interval
- Fixes panic that occurs when swapping from streaming to polling
- Refactored streaming and polling code to aid maintainability
Version 0.1.13
- Added codes to aid in SKD troubleshooting. More info in the SDK docs.
- Enhanced reporting of evaluation errors
Javascript SDK
Version 1.20.0
- Deprecated non-supported options
.NET SDK
Version 1.2.2
- Fix targets not updating correctly
- Fix hostname validation on custom TLS certs
Version 1.2.1
- Previously, only the first prerequisite was processed. Now, all prerequisites are used correctly. (FFM-7871)
- The rules operator 'equal_sensitive' did not work correctly in all cases. This functionality has been standardized with other SDKs. (FFM-9219)
- Previously, the SDK did not enforce a minimum poll interval. This issue has been corrected so a poll interval is now enforced. (FFM-9220)
- Fixed the version/account/env metadata reported in headers for metrics processing. (FFM-9207)
- Update to latest OpenAPI spec to improve handling of null items defined as optional. (FFM-9221)
- Support Microsoft.Extensions.Logging. (FFM-939)
- TLS support for custom CAss (FFM-7007)
- CVE: Update wiremock to latest version 1.5.36. (FFM-9472)
- CVE: Update Newtonsoft.Json to version 13.0.3. (FFM-9473)
- CVE: Update NuGet.Frameworks to version 6.5.1. (FFM-9474)
Node SDK
Version 1.3.6
- Updated to use Logger for logging instead of console.log
Version 1.3.5
- Avoid sending empty metric payloads
- Upgrade
lru-cache
to version 7 which contains a significant performance increase - Add support for
nodeNext
module resolution
Python SDK
Version 1.2.3
- Fixed an issue where
SDKCODE1003
was logged even whenwait_for_initialzation
was not called
September 2023
Flutter SDK
Version 2.1.0
- Released to support Flutter Web
iOS SDK
Version 1.1.2
- Fixed issue with metric target evaluation.
Version 1.1.1
- Fix runtime failure when target is nil.
Java SDK
Version 1.3.0
- Standardized SDK error codes.
Javascript SDK
Version 1.18.0
- Emit flags as part of polling intervals using POLLING_CHANGED event.
Version 1.16.0
- Changing evaluation handling for Flutter Web.
- Removed dependencies Guava and MapDB.
- Added retry enhancements to authentication failures.
- Local connector now creates a metrics folder.
August 2023
Feature Flags
Server Updates
Version 1.1079.0
- Improved cache store handling for pre-evaluations.
- Added an infrequent error caused by a panic during flag deletion.
- Automatically disable Git sync if flags.yml can not be found.
- Automatically time out if events take too long to send, rather than hanging indefinitely.
- Added additional test coverage for target attributes with IN clauses.
- Mark a flag as stale if the Flag previously had evaluations but has not in 60 days.
Version 1.1078.1
- Due to an error with gitSync logic on environment creation, the activation for the new environment did not get properly created when GitSync was enabled.
- To resolve this, we:
- Fixed the gitSync function for newly created environment.
- Added gitSync for deleted environments.
- Sending a GET request to the /targets/${IDENTIFIER} endpoint returned a 200 error code, even if the target didn't exist. This error code has been changed to 404.
- Previously, a multivareate flag's variation values had an erroneous maximum limit of 2704 bytes, with a poor error message if this was exceeded. This limit has been raised to 25000 bytes, with a clear error message if this is exceeded.
- Targets sent by the server-side SDKs were not being updated in the database. This meant if a sever-side target changed, while evaluations worked as expected, the updated attributes were not shown in the UI. This fix ensures targets are correctly upserted.
UI Updates
Version 0.357.0
- Previously, the Feature Flags modal screen disappeared when the user clicked in the background, which caused the data to disappear. This issue has been fixed.
- Previously, on the flag details page, if all target groups were assigned to rules, the Percentage Rollout target groups selection would disappear. This issue has been fixed.
- Previously, when creating a flag targeting rule, using autocomplete search for a target group could remove target groups from other rules within the same flag. This issue has been fixed.
Version 0.357.0
- Previously, the permission to create a feature flag was required across all environments. This restriction has been removed.
- Previously, when users selected All Environments from the Environments dropdown menu, then refreshed the page or went to another page, the Back button didn't return the user to the All Environments page. This issue has been resolved.
Apex SDK
Version 0.1.2
- Avoid loading all flag/target segment config into two cache keys, instead use a key per item, so we don’t exceed SFDC account limits and get
cache.ItemSizeLimitExceededException
.
Javascript SDK
Version 1.15.0
- If the SDK was being suspended while inside a mobile app in a webview, our SDK didn't support this usecase and required workarounds.
- Removed a third-party SSE library causing event-handling errors.
Node.js SDK
Version 1.3.2
- Previously when using waitForInitialization, if the SDK encountered an authentication failure, it neither resolved nor rejected the promise. This could potentially lead to a Node.js process termination with an exit code of 0 when no operations were performed outside the asynchronous function block where it was called. The SDK now correctly rejects the promise in the event of an authentication failure. This rejection will provide error details.
React SDK
Version 1.5.0
- Version released. Upgrades JavaScript SDK version to 1.15.0
Ruby SDK
Version 1.1.4
- This release fixes an error where "Starts With" target group rules did not receive data in the correct format to be processed by the Ruby SDK. (FFM-9036)
Version 1.1.2
- The Ruby SDK did not handle the 'IN' operator correctly. If a target group used the 'IN' operator in a rule, then that rule would fail to evaluate correctly. This could lead to the wrong variation being served to a target. The SDK has been updated to correctly handle IN operators for target group rules.
July 2023
Feature Flags
UI Updates
Version 0.355.0
- When specifying percentages for a rollout, the UI now provides feedback while you edit to let you know the percentage that requires assignment.
- Fixed an issue where the API call was triggered twice in the front end when creating a flag.
Server Updates
Version 1.1077.0
- Fixed an issue where if no attributes were given in the target, the SDK sometimes threw a TypeError exception when processing rules.
- Previously, the developer count reported under the Feature Flags license usage page (Account Settings > Subscriptions > Feature Flags > License Count) included a 'System' user that should not be counted towards the customer's total count of developers. This fix excludes the 'System' user from the count.
- Previously, targets sent by the server-side SDKs were not being updated in the database. This meant if a server-side target changed, evaluations worked as expected, but the updated attributes were not shown in the UI. This fix ensures targets are correctly updated.
Version 1.1076.0
- Fixed an issue where the query parameter
identifier
in the APIhttps://app.harness.io/gateway/cf/admin/segments
did not work correctly. - The flag pipeline was not updating the build number. This issue has been fixed.
- Target attributes were not updating on conflict. This issue has been fixed.
Android SDK
Version 1.1.3
- The SDK's cache has been rewritten to improve its stability.
- The Gradle wrapper has been included in the SDK repository so that users can build without having to install Gradle.
Version 1.1.2
- There was an issue where the python SDK failed when connecting to the proxy. When connecting to Harness SaaS, the SDK extracts the
accountID
from the auth response and adds it to a header in all future requests. TheaccountID
is not availabe to the SDK when connecting to the proxy, so it failed due to its absence. This fix ensures the SDK skips the header ifaccountID
does not exist.
Version 1.1.1
- Removed the following error, which is reported by Gradle's Lint task:
- `checkClientTrusted`` is empty, which could cause insecure network traffic due to trusting arbitrary TLS/SSL certificates presented by peers.
- Added
Harness-SDK-Info
,Harness-EnvironmentID
andHarness-AccountID
HTTP headers to outbound HTTP connections.
Erlang SDK
Version 2.0.1
- Some SDK dependencies were not included in releases created by
mix
. This issue has been fixed.
iOS SDK
Version 1.1.0
The following methods now have an alternative overloaded version that allows you to get the result of the flag directly in the return value, without the need to provide a closure block.
- stringVariation()
- boolVariation()
- numberVariation()
- jsonVariation()
Added TLS support for custom/private certs in the iOS SDK for config, stream and metric endpoints.
The CfConfigurationBuilder now has new methods for taking a list of X.509 certificate authority (CA) certs. This list must also include any intermediate CAs the Apple security APIs may need to resolve the full trust chain.
For custom certificates, you must also ensure that the Subject Alternative Names (SANs) are set up correctly in the CA for domain name validation to pass.
The new function setTlsTrustedCAs() takes a list of X.509 CA certificates in PEM format, which will be used to verify the server's web cert sent during TLS handshake. Each PEM certificate must include the BEGIN/END CERTIFICATE headers.
Made the following improvements.
- Added standardized SDK error codes for events such as initialization, authentications, etc. For a full list, go to Troubleshooting.
- Added general improvements to logging statements, reducing verbose logging to the console.
- Added support for configurable custom loggers. For code examples, go to the SDK repository.
Added retries for the authentication, and other endpoints. Network timeouts and certain HTTP error codes will be retried with a random delay up to 3 times. (FFM-8049)
Added a new API, refreshEvaluations(), that can be called by a mobile app coming to the foreground to update any SSE events that were missed while the app was suspended. (FFM-8160)
It is no longer necessary to call registerEventsListener() to start listening to events—calling initlialize() should be enough. (FFM-8106)
When a target group is created Harness sends an event to connected SDKs to refetch all flags. The IOS SDK previously didn't do this refetch, and now does. (FFM-8137)
Previously, when a target group event was received the SDK fetched all flags, but did not return an event so that apps could be updated accordingly. With this fix, in this case, the SDK returns the onPolling event after all flags are fetched. (FFM-8174)
Added
Harness-SDK-Info
,Harness-EnvironmentID
andHarness-AccountID
HTTP headers to outbound HTTP connections. (FFM-8048)
Java SDK
Version 1.2.4
- Fixed an issue where, if a flag had prerequisite flags configured, only the first prerequisite flag was being processed and the remaining were being ignored.
.NET SDK
Version 1.1.9
- Fixed an issue where using the relay proxy caused the SDK to crash.
Node.js SDK
Version 1.3.1
- Previously, calling waitForInitialization was resolving before the SDK was fully initialized, leading to default values being served until initialization completes. This issue has been fixed.
Python SDK
Version 1.2.2
- Fixed an issue where the SDK was crashing when used with the relay proxy.
Version 1.2.1
- The SDK incorrectly logged low level debug information as errors. This issue has been fixed.
Ruby SDK
Version 1.1.3
- Released current version.
- Fixed an issue where if no attributes were given in the target, the SDK sometimes threw a TypeError exception when processing rules.
Version 1.1.2
- There was an issue where if a feature flag was configured to use a custom attribute with the
IN
operator clause, theIN
operator didn't work correctly. This issue has been fixed.
June 2023
Feature Flags
UI Updates
Version 0.353.0
- The Create a new flag button did not behave as expected on the onboarding screen if there were existing flags. This issue has been fixed.
Version 0.351.0
- On the Feature Flags page, when viewing the state of flags across all environments, the flag status column now scrolls all the rows as one. This makes it easier to view flag and environment states on one screen.
- In the onboarding flow, we added a new button and text box for a new project when there are no environments created.
- The view in the modal screen for setting up GitEx was not wide enough to show appropriate errors. This issue has been fixed.
- In the user onboarding flow, the Create a New Flag button did not behave as expected. This issue has been fixed.
- Previously, a user could select Feature Flags in Harness without having a license, and would then get a 404 error. Now, users only see the FF module if they have an active license (including a free license).
- Previously, there was an edge case where an extremely large number of pages in a UI listing could cause performance degradation. This issue has been fixed, and page numbering is now disabled if the page count exceeds 1000 pages.
- There was an issue where toggling between the Targets and Target Groups pages caused the new page to re-render. This issue has been fixed.
Version 0.349.0
- Previously, display of the FF module depended on an internal Harness feature flag. Now, display of the FF module is instead based on having an active license (including 'free').
- Previously when a new user was onboarding in the Feature Flags page, when they selected Get Started, they saw a dropdown of flags, even though they hadn't created any flags yet. Now, when users do not have any existing flags, they see a text box that prompts them to create one.
Server Updates
Version 1.1075.0
- The Activity tab on the flag detail page was sometimes slow to load on flags with many (hundreds) of historical changes. This has been resolved, and this tab's loading times are improved.
- On the flag detail page, Flag Pipeline tab, the pipeline execution list was sorted with most recent executions last. This ordering has been reversed so that the most recent pipeline executions are shown first. This allows pending executions to be viewed at the top.
- Where users had multiple target rules, in certain circumstances users couldn't delete these rules when the wrong IDs were returned. This fix addresses the problem of the incorrect IDs being returned, and ensures the targets can be removed.
Android SDK
Version 1.1.0
- Added a new API to allow SDK users to provide a trusted TLS CA certificate for connecting to Feature Flag services with private root CAs.
- Added
Harness-SDK-Info
,Harness-EnvironmentID
andHarness-AccountID
HTTP headers to outbound HTTP connections. - Fixed broken links in the first time setup documentation.
Erlang SDK
Version 1.1.0
- Erlang SDK updated.
- You can now add an optional logging configuration option so that the logging level can be set for the SDK.
- If this option is not set, the SDK uses the default log level of
warning
. To see an example logging configuration, go to the SDK readme.
Flutter SDK
Version 2.0.0
- Flutter SDK updated.
- Flutter 2.0 and Dart 2.12 and later are required. For more information, go to Sound null safety in the Dart documentation.
iOS SDK
Version 1.0.4
- Fixed the stream connection to have a read timeout of 60 seconds. This enables stale connections to be detected and closed, and retries to be started for polling/SSE connections.
- Fixed a nil pointer dereference bug that caused the SDK to crash under certain conditions.
Java SDK
Version 1.2.3
- There were reports of customers having difficulty running the SDK because of a missing dependency,
oksse
. Unless users have the JitPack repo in their POM/Gradle file, they are likely to have this problem at compile time. With this fix, we've removed theoksse
dependency and now useokhttp-sse
instead. - Added
Harness-SDK-Info
,Harness-EnvironmentID
andHarness-AccountID
HTTP headers to outbound HTTP connections. - Updated the
maven-model
dependency to version 3.5.0 to remove the CVE-2022-4245 vulnerability. - Updated to the latest version of Guava, 32.0.1-jre, to remove security issues.
JavaScript SDK
Version 1.14.0
- Added a new function,
refreshEvaluations()
, which can be called to programmatically trigger a full refetch of evaluations from the server.
.NET SDK
Version 1.1.8
-Added additional headers to SDK HTTP requests for better analytics.
- Reworked metrics caching to use a map instead of a queue. This improves memory usage and performance.
- We now send the SDK version information with the metrics payload for better analytics and tracking.
- Added logging when a default evaluation is served.
- Standardized and improved Logging across the SDK.
- Fixed error handling when a null target is passed in.
Node.js SDK
Version 1.3.0
Due to a new dependency on a murmur3 hashing library implemented in Elixir, the following is now required to use the SDK in Erlang applications:
Elixir version 1.13.4 or above must be installed on your build system when compiling your application.
Rebar3
rebar_mix
must be installed in your Rebar3 plugins.For full details, go to Install the SDK for Erlang applications.
This update does not affect Elixir applications, and no further action is required for Elixir applications upon upgrading to this version of the SDK.
Enhancement: Implemented retry logic for authentication, polling, and metrics services for resilience and fault tolerance.
Enhancement: Changed supervisor restart intensity from 1 restart in 5 seconds to 4 restarts in 5 seconds.
The murmur3 nif library has been replaced by pure Elixir library.
The following changes are included in issue number FFM-8289:
- Added validation to the JWT token returned by the Feature Flags authentication service.
- Previously, if the SDK failed to authenticate with the Feature Flags service, the SDK crashed. With this fix, the SDK now logs a warning and serves the default variations you provided in your evaluation calls.
- Added a list of codes that are logged for each lifecycle event of the SDK, such as initialization, authentication, and so on. For a full list of codes, go to Troubleshooting.
Version 1.2.17
- Previously, when
client.close()
was called, the SSE stream was not terminated. This fix ensures that the SSE stream is properly terminated.
Python SDK
Version 1.2.0
- To improve performance, the SDK now sends targets to the metrics service in batches of 1000. Up to 200 batches, or 200K unique targets, can be sent in the metrics window. This is not user-configurable, and is controlled through the SDK. For more information, go to Feature Flag FAQs.
- The SDK no longer allows
events_sync_interval
to be set below 60 seconds. If it is, the value defaults to 60 seconds.
Version 1.1.6
Previously, if the SDK evaluated flags with a large amount of targets (tens of thousands), the SDK could encounter
read_timeout
errors. This fix increases the HTTP timeout of the SDK, and imposes a limit of 50,000 on the number of targets that can be sent to the UI.Known issue - We are working on resolving the following issue in a future version:
- During a metrics interval, if you evaluate flags with more than 50,000 unique targets (based on identifier, name and attributes), then only the first 50,000 targets get sent in the request to the metrics API. This means that the targets that are not included in the request do not appear in the UI, but when they are included in evaluations during subsequent metrics intervals, they will be correctly registered in the UI.
Version 1.1.5
To aid in debugging, we added a list of codes logged for each lifecycle of the SDK. Some of the lifecycle events these codes cover are:
Initialization
Authentication
Polling
Streaming
Evaluation
Metrics
Close
For a full list of codes, go to Troubleshooting.
Version 1.1.15
- Previously, the SDK crashed if
client.close()
was called at any point before a stream event was sent to the SDK. With this fix, the SDK closes all threads correctly.
Version 1.1.14
- The SDK now sends extra headers to backend requests to aid in diagnostics.
- The SDK now retries on failed client authentication requests for specific HTTP errors. If client authentication fails, the SDK serves the default values you provide in
variation
calls.
React SDK
Version 1.4.0
- Added a new useFeatureFlagsLoading hook to allow apps to react to changing of loading state.
- Added a new TestWrapper testing component to allow easy mocking of the network portion of the SDK for use in Jest unit tests.
- Updated the included JavaScript SDK from version 1.10.0 to version 1.13.0.
- Refactored all hooks and Higher Order Components (HOCs) to ensure proper triggering of metrics.
May 2023
Feature Flags
UI Updates
Version 0.349.0
- The toggle for turning Git Sync on and off was causing the branch settings menu to disappear and display the Set Up Git Sync button incorrectly. This issue has been fixed.
- The Target and Target Group pages reported successful save and edit operations before the operations completed. This issue has been fixed.
Version 0.347.0
- Fixed an issue in the onboarding flow where the flag validation did not work as expected.
Server Updates
Version 1.1071.0
- For customers with a large volume of targets (in the millions), the Target page load time could be slow. Harness has introduced additional indexes to improve the response time of this page.
- There was an issue when Git Sync was first configured, a sync was not attempted until a flag was changed or a new one was created. With this fix, a sync is immediately attempted when you configure Git Sync, and the existing flags in your project are backed up to the remote file.
Version 1.1054.2
- The Identifier search filter sometimes incorrectly used a wildcard match. This happened if two flags had overlapping names such as
flag_one
andflag_one_b
. The detail view offlag_one_b
sometimes returnedflag_one
details instead. Because flags order by creation, this only happened when flags were created in a certain order. This fix uses an exact match when searching for flag identifiers.
Version 1.1041.0
- Previously, re-enabling Git Experience did not trigger an immediate Git sync. With this change, flags are synchronized as soon as Git Experience is re-enabled.
- Some Git sync operations were failing if there was a large volume of flags and environments. This fix increased the transaction time-out for Git sync calls to allow processing of a large number of the flags.
- Policy checks weren't being carried out on flag rules added from the Target Group details page. This issue has been fixed.
- Previously, Feature Flag permissions and roles assigned to users or user groups in Access Control were applied at the account and project levels, but not at the organization level. With this change, roles and permissions assigned at the organization level are now honored.
- When you try to delete a flag that is a prerequisite to another flag, the UI now shows an improved message that explains why this cannot be done: Cannot delete flag which is a prerequisite for other flags.
Python SDK
Version 1.1.12
- There was an issue where if an error occurred when processing a new stream event, the SDK could potentially log a blank string. This issue has been fixed and the SDK now logs these errors correctly.
Version 1.1.11
- Fixed an issue where the SDK was not evaluating flags with multiple and/or nested prerequisites correctly.
Ruby SDK
Version 1.1.1
- Fixed evaluator logic. Before, if a target group had multiple clauses, all clauses had to evaluate to true for the entire condition to be true. This logic has been changed to match that of other SDKs. Now only one condition clause needs to be true.
- Certain log messages will now be coded with a unique 4-digit number to help identify issues across SDKs.
- Response code patterns for each SDK stage are:
- Initialization - 1xxx
- Auth - 2xxx
- Close - 3xxx
- Polling - 4xxx
- Streaming - 5xxx
- Evaluation - 6xxx
- Metrics - 7xxx
April 2023
Feature Flags
UI Updates
Version 0.346.0
- Fixed an issue where the metrics loading spinner was hanging indefinitely.
- Fixed an issue where users with reduced access could not create Feature Flags SDK Keys as a result of a permission mismatch between the frontend and backend.
Version 0.345.0
- The UI now provides improved RBAC messaging when trying to toggle or edit a flag in an environment without the correct permissions.
Server Updates
Version 1.1007.0
- Previously, the number of flags returned in the Target Management page was capped at 100. This change lets Harness show all flags even if the number is greater than 100.
- Feature Flag identifiers now follow the same guidelines as the Harness Platform entities. This means they can include a
$
in the name. - Previously, FF was only checking permissions at the account and project level. With this update, permissions and roles assigned at the organization level will also be honored.
Apex SDKs
Version 0.5.1 Beta
- The JSON parsing code was unable to parse the fields
createdAt
andmodifiedAt
in the Target Segment response, because the values were too large for an Integer data type. This issue has been fixed.
Node.js SDKs
Version 1.2.16
- The eventsource library was opening three separate streams instead of one when the library disconnected and reconnected. This issue has been fixed.
- Updated the field validation for the YAML path field in the Git connection form to prevent entering invalid path names beginning with
./
.
Version 1.2.15
- Occasionally, the retry strategy could open several event streams at once if the application disconnected intermittently. This issue has been fixed and the SDK opens only one stream when the EventSource library reconnects.
- The EventSource library was updated to version 2.1.4.
Python SDKs
Version 1.1.10
- The SDK now logs an error if an evaluation fails and the default variation is returned.
Ruby SDKs
Version 1.1.10
- Metrics counters are now stored in a map, instead of a queue, for more efficient memory usage. The metric payload size should now also be smaller, resulting in more efficient network bandwidth usage.
- Improved the authentication retry logic to only retry on certain HTTP codes. Certain error codes will be treated as transient and others not. Ensured that while the SDK is authenticating, default values are served.
- Added a Ruby on Rails example in the SDK repository.
- Disabling the metrics processor didn't disable entries being written to the queue, causing an eventual memory leak. This fix corrects this behavior.
- Added TLS support to the SDK and updated the documentation in the SDK repository.
March 2023
Feature Flags
UI Updates
Version 0.341.0
- Onboarding examples displayed a flag name instead of the required flag identifier. This issue is now fixed.
Server Updates
Version 1.979.0
- Before this update, targets never expired. Now, targets expire if they have not been updated for 60 days, except when used in flag rule, or when part of a target group's include/exclude lists. For more information, go to How targets expire.
Version 1.968.0
- When searching for a flag, the search filter sometimes failed if the flag description was null rather than empty. This issue has been fixed.
- When using GitSync to save a flag with a floating point value, the feature flag service generated an error.
- The service now correctly handles floating point numbers saved from Git.
Erlang SDK
Version 1.0.0 Beta
The Erlang server SDK, which was in Beta, has been released as GA.
This release includes the following updates:
- Breaking changes
- Changes to mulit-instance behavior. Go to the Readme for updated instructions and code samples for the following:
- If you define a multi-instance configuration, and one of the instances (including the default instance) fails to authenticate, then the other instances do not attempt to start, and the SDK does not boot.
- You can choose not to start the default instance.
- Enhancements
- The SDK is now available on hex.pm.
- Improved logging for debugging purposes
- There was an issue in multi-instance functionality that prevented users from starting up multiple instances. This issue has been fixed. (FFM-7187)
Go SDK
Version 0.1.8
- Previously, a few logs on startup would use fmt.Println() instead of using the custom logger passed in via harness.WithLogger(logger). This could cause these startup logs to be in a different format, and appear to be logged at an
error
level instead of logged correctly asdebug
. This has been resolved and all logs emitted by the SDK now go through the custom logger if it's passed in.
Version 0.1.7
- Previously if a custom logger was passed in to the SDK through the harness.WithLogger(logger) function, the custom logger was not used when logging HTTP requests. This could cause HTTP request logs to be in a different format, and appear to be logged at an
error
level instead of correctly loggeddebug
. This has been resolved, and all logs emitted by the SDK now go through the custom logger if it's passed in. - Added a flag code cleanup example and some information on how to run the example in the Go SDK repository.
- Added documentation in the Harness flag_cleanup repository on how to clean up flags automatically using Harness pipelines.
Java SDK
Version 1.2.2
- Minor internal changes were made to make it easier for developers to use classes that were previously marked private.
Version 1.2.1
-When an SDK key was not supplied, the SDK continually retried. This issue was fixed and now, if authentication fails, the SDK no longer retries constantly, and instead generates a MissingSdkKeyException.
Version 1.2.0
- Improved support for TLS allows custom CA certificates to be provided.
- A new HTTP header,
Harness-SDK-Info
, was added. This header helps the Feature Flag service identify connected client SDKs apart from server SDKs. - Error handling for invalid SDK keys has been improved.
Node.js SDK
Version 1.2.14
- The EventSource library was updated to version 2.1.3.
- On streaming errors, the error was not included in the
retrying
event payload. This fix adds the error to the payload. - Checks were added to see if errors are eligible for retries, and if not, the SDK stops retrying.
- The SDK now logs each retry. This ensures the most recent error is logged if errors change during retries.
Version 1.2.13
- A race condition during initialization could cause some flag evaluation calls (when called immediately after calling waitForInitialization) to return the default value instead of the actual evaluated value. This issue has been fixed.
Version 1.2.12
The event source was updated to version 2.1.2. This adds eligible errors to the retrying
event payload.
Version 1.2.11
- All three retry strategies no longer fire off their initial retry at the same time.
- The eventsource library now closes correctly if
eventsource.close
is called while it's in a RETRYING state. - The SDK no longer retries on 40x errors. It now only retries on 50x and I/O errors.
February 2023
Feature Flags
UI Updates
Version 0.339.0
- The Complete button at the end of the onboarding flow was always enabled. Now, it is disabled until the user receives a successful evaluation.
Server Updates
Version 0.341.0
Flutter SDK
Version 1.0.10
- This SDK now uses Android SDK 1.0.20.
- This update fixes excessive network calls when calling flag evaluation functions.
.NET SDK
Version 1.1.7
- The default poll interval was corrected from 20 seconds to 60 seconds, consistent with the other SDKs.
- The SSE EventSource was not detecting that a connection may have dropped. The SDK will now reconnect correctly if it loses its connection to the stream endpoint.
Node.js SDK
Version 1.2.10
The Node.js SDK uses the eventsource library. In rare cases, an issue occurred when a 500 response was received from the remote system, the connection seemed to close and stop retrying. However, if it received an unspecified error, for example if the endpoint doesn’t exist or goes down suddenly, or if the remote system closed the connection, then the SDK tried to connect to the /stream endpoint every second, forever. This issue was resolved with the following updates:
- The SDK now falls back to polling if the stream disconnects.
- The SDK attempts to reconnect on retryable errors using an exponential backoff and retry strategy provided by the Harness fork of eventsource.
- A new retry event is emitted so the SDK can log the current retry attempt.
Python SDK
Version 1.1.9
- SSE updates were stopping due to a lost connection. Now, the SSE connection is reestablished if it drops.
Version 1.1.8
- Added
wait_for_initialization
to the client API, which can be called to block the thread until all groups and flags have been retrieved and loaded into the cache. - Added
is_initialized
to the client API, which can be called at any time to check if the initial retrieval and caching of groups and flags has been completed. :::info note For an example usage ofwait_for_initialization
go to the SDK's repository. :::
Version 1.1.7
- When adding targets to a group based on conditions, the
in
operator is now case-sensitive in the SDK.noteIf you are targeting any groups using the
in
operator, ensure that your target condition takes into account the case sensitivity of the operator. :::
January 2023
Feature Flags
UI Updates
Version 0.335.0
- If you changed the environment, and then opened the Pipeline tab or Environment tab on a second screen, the environment you set defaulted to the original one. This has been fixed and the environment you select is consistent through all tabs.
- Fixed a bug that prevented a completion tick from appearing in the UI after an evaluation had successfully passed.
- Fixed an error that caused the Complete button at the end of the Get Started flow to link to the beginning of the flow instead of linking to the expected Feature Flag list page.
- Resolved an issue that caused you to scroll unnecessarily when you expanded the target attribute or operator dropdown menus when creating a target.
- Fixed a bug where scrollbars were unnecessarily displayed in the target groups section of the targets page during loading.
Server Updates
Version 1.0.6
- The Feature Flags authentication service has been updated to version 1.0.6 with the following update:
- The authentication service was logging warnings as it tried to authenticate with each cluster in turn.
- This could produce warnings even when authentication was eventually successful. Now, if authentication is successful, no warnings are logged.
Android SDK
Version 1.0.19
- A new event was added,
SSE_RESUME
, which fires if the application loses and regains internet. When the event fires:- The SDK internally reloads all feature config into cache.
- Applications can listen to this event to ensure event listeners don't miss any streamed events during periods of downtime.
Version 1.0.18
- This fixes a bug that caused unhandled exception errors due to duplicate callbacks during the SDK initialization.
Version 1.0.17
- Fixed a bug that caused a 401 error when the SDK tried to send a request to the
stream
endpoint if the request was to a non-production environment. - Fixed a bug that caused the SDK to stop working if an identifier isn't provided during the SDK initialization. The SDK will now use the name if you don't provide an identifier. You will receive an error if you don't provide either a name or identifier as at least one of these is required for all client-side SDKs.
Flutter SDK
Version 1.0.8
This includes the following:
- Fixed a bug that caused applications to shut down in response to API errors caused by no internet connection.
- Fixed a bug that caused streaming to stop working if internet connectivity was lost.
Go SDK
Version 0.1.6
- Some target segment include rules were not working for numeric values. This issue has been fixed.
Java SDK
Version 1.1.11
- Timeout errors were logged due to the code calling
awaitTermination()
beforeshutDown()
when stopping the update processor. There was also a misleading warning about the poller not being restarted. These issues have been fixed.
Version 1.1.10
- Improvements to how the metrics endpoint processes platform targets.
- Fixed a bug that caused an error due to incompatibility with an older version of OkHttp.
Javascript SDK
Version 1.8.0
- You can now provide the SDK with a set of evaluations that it can serve instantly upon initialization. For more information about this, go to the SDK's readme file..
Version 1.7.0
- The Javascript SDK has been updated to version 1.7.0. This fix adds the
Harness-AccountID
andHarness-EnvironmentID
fields to the HTTP request header in all calls after the initial authorization request. These values are extracted from the JWT, so you don't need to add a value for them.
Version 1.6.0
- You can now customise the interval of how often metrics data is sent to the metrics endpoint.
- If the metrics data is not successfully posted to the endpoint after two attempts, the data is cleared to ensure the metrics data doesn't get too large and cause performance issues.
React SDK
Version 1.1.0
- You can now listen for errors that are caused by network issues. For more information about this, go to the SDK's readme file.
- You can now provide the SDK with a set of evaluations that it can serve instantly upon initialization. For more information about this, go to the SDK's readme file..
Ruby SDK
Version 1.0.6
- This fixes dependency issues with OpenAPI that caused errors when trying to initialize the SDK.
Version 1.0.5
- This fixes a bug that caused the SDK to not wait for initialization when using the
wait_for_initialization
method.