This documents changes that were made to the nimbus-sdk before it was fully merged into the application-services repository. New entries should be added to the application-services repo CHANGELOG.md file, not here.
- Changed
AppContext
struct to include non-optionalapp_name
andchannel
fields per ADR-0004
- Upgraded uniffi to 0.8.0. This is to allow nimbus to be includable in the iOS megazord.
- Changed
Error
toNimbusError
. This is so as not collide with other implementations of Error in the megazord, (including Swift's).
- The project no longer ships its own
build.gradle
and related Android build files. These were not being used in practice and so were removed to avoid confusion. Release artifacts will continue to be built from the application-services repo
- Defaulting
feature_id
andfeature_ids
to the empty string, to allow migration from existing experiment formats to continue to work.
get_experiment_branch
will now search both by experiment slug and feature id. Because this allows the client to (mostly?) not care what the experiment slug is, it means that it is now possible to restart some experiments that had problems without having to configure a whole new experiment.
- A new
reset_telemetry_identifiers
method has been added; consumers should arrange to call this method if the user opts out of telemetry at the application level, in order to avoid accidental tracking of users who disable then re-enable telemetry.
- Avoid the use of unsigned "experimental" kotlin types.
- Split up
NimbusClient.update_experiments()
into a slowNimbusClient.fetch_experiments()
and a fastNimbusClient.apply_pending_experiments()
to help apps manage concurrency and mutable state. - Add
set_local_experiments(string)
, to help apps, build tooling for tests, and help during startup on first time run. get_experiment_branch()
no longer performs any IO, nor blocks on any other threads that may be performing IO, making it suitable for being called from the main-thread of apps.
NimbusClient.updateExperiments()
is removed.- Renamed
InvalidExperimentResponse
error toInvalidExperimentFormat
.
- Added backoff and retry support.
- Added db upgrade mechanism.
- The uniffi-generated Kotlin bindings now compile correctly, thanks to an update to uniffi.
- Removed unused
enrollment_id()
method, to silence dead-code warning when compiling in release mode.
- Fixed spurious dead-code warning when compiling in release mode.
- Removed
NimbusClient.resetEnrollment
. NimbusClient.{updateExperiments, optInWithBranch, optOut, setGlobalUserParticipation}
now return a list of telemetry events. Consumers should forward these events to their telemetry system (e.g. via Glean).
- Add filtering on application id.
- Addition of schema version to the schema, and validation of supported versions by the SDK.
- Removed implicit fetch of experiments on first use of the database. Consumers now must call update_experiments explicitly in order to fetch experiments from the Remote Settings server.
- Fix the version number in
Cargo.lock
.
- Added support for global opt-out via new method
NimbusClient.set_global_user_participation(bool)
- Updated uniffi and rkv dependencies to their latest release versions.
- Switched to using the "safe mode" backend for rkv;
this can be disabled at build time by disabling the
rkv-safe-mode
feature.
- Removed use of unsigned types from the Kotlin API, since these are experimental and require opt-in from consuming apps.
- Fixed various warnings when compiling the Rust code.
Addition of CHANGELOG.md
The following are features that have been implemented as part of prototyping and initial development at some point prior to adding the changelog:
- Schema definition per the shared schema repo
- Enrollment
- Bucket randomization
- Branch allocation
- Opt in/out
- Persistent storage of experiments
- Kotlin bindings generated by uniffi