Skip to content

Releases: mozilla/application-services

v151.0

20 Apr 13:16
f515906

Choose a tag to compare

v151.0 (2026-04-20)

⚠️ Breaking Changes ⚠️

  • It is now enforced by nimbus-fml that feature variables using gecko-pref must be have type: Option<T>, for T in Boolean, Int, and String.
  • nimbus-fml commands now all have a --lax-gecko-pref-validation flag to bypass the above restriction, as well as the restriction that gecko-pref and default are mutually exclusive.
  • The FmlLoaderConfig now has a lax_gecko_pref_validation field to allow FmlClient consumers (i.e., Experimenter) to opt-in to lax validation.

✨ What's New ✨

Logins

  • New allow_empty_passwords feature flag to allow storing logins with empty passwords. This feature is intended to be enabled on desktop during the migration.
  • Add ignore_form_action_origin_validation_errors feature flag that allows logins with non-URL form_action_origin values (e.g. "email", "UserCode") to be imported without error. URL normalization for valid URLs is still applied.
  • Add perform_additional_origin_fixups feature flag that repairs origin values which fail URL parsing (bare domains, FireFTP quirks, bare https: / https://, etc.) into parseable URLs instead of rejecting them. Scoped to the origin field only; form_action_origin keeps the stricter behavior, but can be disabled via ignore_form_action_origin_validation_errors. Intended to be enabled on desktop during migration to salvage legacy/addon-generated entries.

Merino Client

  • Added a client for the merino suggest endpoint
  • Added a suggest subcommand to merino-cli for locally testing the suggest endpoint.

✨ What's Changed ✨

Merino Client

  • merino-cli now supports subcommands: recommendations for curated recommendations and suggest for the suggest endpoint.

Full Changelog

v150.0.1

07 Apr 00:15

Choose a tag to compare

What's Changed

  • Bug 2029668 [RS] - Remove orphan attachments from db after a record is updated (backport #7294) by @mergify[bot] in #7304
  • Bug 2029668 [RS] - Add migration to cleanup orphaned attachments in existing DBs (backport #7299) by @mergify[bot] in #7305

Full Changelog: v150.0...v150.0.1

v150.0

23 Mar 20:43
97c571a

Choose a tag to compare

v150.0 (2026-03-23)

General

  • error-support breadcrumbs now include the timestamp.

⚠️ Breaking Changes ⚠️

Nimbus

  • The MetricsHandler interface now requires two additional methods: record_database_load() and record_database_migration()
  • In Kotlin expose GleanMetrics.Pings.nimbusTargetingContext as Nimbus.Pings.nimbusTargetingContext for downstream tests. (#14542)
  • recordEventOrThrow() now returns Deferred<Unit> instead of Job. Callers must use .await() (instead of .join()) to observe exceptions thrown during event recording.
  • It is now enforced via nimbus-fml validate that feature variables do not use both gecko-pref and default for the same variable.

Full Changelog

Ads Client

  • Added rotation_days parameter to MozAdsClientBuilder to allow embedders to configure the context ID rotation period. (#7262)

Logins

  • BREAKING: Removed time_of_last_breach field from LoginMeta and Login. This can be derived from Remote Settings during runtime instead.
  • BREAKING: Removed record_breach(id, timestamp) API method.
  • BREAKING: Removed is_potentially_breached(id) API method.
  • BREAKING: Removed is_breach_alert_dismissed(id) API method.
  • BREAKING: reset_all_breaches() now clears the breachesL password table instead of resetting time_of_last_breach timestamps.
  • Schema migrated to version 5: timeOfLastBreach column dropped from loginsL and loginsM.

✨ What's New ✨

Remote Settings

  • Add multi-signature support (#7270)

Full Changelog: v149.0...v150.0

v149.0

23 Feb 18:03
c19ea2c

Choose a tag to compare

v149.0 (2026-02-23)

⚠️ Breaking Changes ⚠️

General

  • Updated UniFFI to 0.31 (#7140)

Glean

  • Updated to v67.0.0 (#7177)

Nimbus

  • Added eval_jexl_debug() method to NimbusTargetingHelper interface for CLI testing and debugging. Evaluates JEXL expressions and returns debug results as JSON. Consumers implementing this interface must add the new method.
    (#7156)
    (#31607)
  • Update Cirrus MetricsHandler interface for recording enrollment status to specify nimbus user id as separate metric and change method name from record_enrollment_statuses to record_enrollment_statuses_v2. Consumers implementing this interface must add the new method.
    (#14280)
  • Move nimbus_events.enrollment_status to new nimbus-targeting-context ping, and add Nimbus MetricsHandler interface method submit_targeting_context to submit the ping. Consumers implementing this interface must add the new method. (#14542)
  • Enable using PreviousGeckoPrefState to revert Gecko pref experiments when applicable (#7157)

Error support

  • Removed the tracing-logging and tracing-reporting features, these are now always enabled.
    We don't believe this should affect any consumers, since they're were already using the
    tracing-logging feature and were either also using tracing-reporting or not handling error
    reporting at all.
  • Reworked register_event_sink signature to allow it to register an event sink for muliple targets at once.
  • Reworked unregister_event_sink. It now inputs the return value from register_event_sink.
  • Removed register_min_level_event_sink and unregister_min_level_event_sink.
    Use the new register_event_sink instead.

Logins

  • Opened count method on logins for Android. (#7207)

Autofill

  • Added count methods for credit cards and addresses. (#7207)

✨ What's New ✨

Ads Client

  • Adds new Kotlin AdsClientTelemetry.kt wrapper for Glean callbacks.
  • Try to reset cache database schema on connection initialization failure.
  • Reset cache on context ID rotation.
  • Enable staging environment support for all platforms (previously feature-gated)
  • Temporarily disable cache invalidation on click and impression recording (will be re-enabled behind Nimbus experiment)
  • Enable automatic context_id rotation every 3 days
  • BREAKING: Removed cycle_context_id() API method - context_id rotation is now automatic
  • Modified HTTP cache to ignore context_id field in request bodies when generating cache keys, preventing unnecessary cache invalidation on rotation

Android

  • Upgraded Kotlin compiler from 2.2.21 to 2.3.0 (#7183)

FxA Client

  • Support for the token exchange API, which we plan to use for getting access tokens for Relay.
    (#7179).
  • Removed SwiftKeychainWrapper logic. (#7150)

Logins

  • Added runMaintenance API to DatabaseLoginsStorage

Nimbus

  • Adds a Vec<PreviousGeckoPrefState> on ExperimentEnrollment when it is of type EnrollmentStatus::Enrolled and getters and setters. This is to support returning to an original value on Gecko pref experiments.
  • Added eval-jexl command to nimbus-cli for evaluating JEXL targeting expressions against the app context. Useful for testing and debugging targeting expressions on iOS and Android.
    (#7160)
  • Added Android support for eval-jexl functionality through the NimbusTargetingHelper.evalJexl() method, enabling JEXL expression evaluation on Android with full targeting context support.
    (#7163)
  • Fixed nimbus-cli eval-jexl command to work reliably on Android by removing logcat filters, clearing logs before evaluation, and increasing retry timing for better device compatibility.
    (#7173)
  • Added recordEventOrThrow() method to Nimbus Android SDK, allowing callers to catch database errors when recording events. Unlike recordEvent(), this method does not suppress exceptions, enabling error handling in consumers like Fenix.

Logins

  • Added runMaintenance API to DatabaseLoginsStorage
  • Add password reuse detection for breach alerts: Database schema upgraded to version 4 with new breachesL table storing encrypted breached passwords. New APIs are_potentially_vulnerable_passwords() (batch check) and is_potentially_vulnerable_password() (single check) enable cross-domain password reuse detection.
  • Add record_potentially_vulnerable_passwords() API for bulk-inserting breached passwords into the breach database. This is used during import operations (add_many_with_meta()) to automatically populate the breach database with passwords from logins with known breaches.
  • Move breach alert fields (time_of_last_breach, time_last_breach_alert_dismissed) from LoginFields to LoginMeta to group internally managed fields that are not directly updateable via the update() API.

Ads-Client

  • Adds new Kotlin AdsClientTelemetry.kt wrapper for Glean callbacks.

Relay

  • Added X-Relay-Client header to all Relay API requests with automatic platform detection (appservices-ios, appservices-android, etc.) to help the backend distinguish mobile vs desktop requests for telemetry.

Viaduct

  • Support setting default user-agent headers.

Error support

  • Added the RustComponentsErrorTelemetry.submitErrorPing method to allow Android consumers to submit rust components error pings.

🔧 What's Fixed 🔧

Remote Settings

Full Changelog

v148.0

12 Jan 14:07
2ff0d7c

Choose a tag to compare

v148.0 (2026-01-12)

Logins

  • Add breach alert support, including a database migration to version 3,
    new Login fields (time_of_last_breach, time_last_breach_alert_dismissed),
    and new LoginStore APIs (record_breach, reset_all_breaches, is_potentially_breached, record_breach_alert_dismissal_time, record_breach_alert_dismissal, is_breach_alert_dismissed). (#7127)

Full Changelog

⚠️ Breaking Changes ⚠️

Fxa Client

  • Removed the optional ttl paramater to get_access_token. In practice, no consumers were using this.

✨ What's New ✨

Ads Client

  • Add agnostic telemetry support (compatible with Glean)

Fxa Client

  • Added optional use_cache paramater to get_access_token. Set this to false to force
    requesting a new token.

Full Changelog

v147.0

08 Dec 00:17

Choose a tag to compare

v147.0 (2025-12-07)

Relay

  • Added fetch_profile() method to check premium subscription status via has_premium field (#7113)

Nimbus

⚠️ Breaking Changes ⚠️

  • Removed unused home_directory field from AppContext. Both Kotlin and Swift sides were passing null values and it wasn't used anywhere. (#7085) (#30782)

rc_crypto

  • Thread-safety improvements for PKCS-token-dependent methods by introducing a
    global mutex. Refactored key unpacking logic and removed redundant code;
    includes some breaking API changes, but since the keydb feature is not yet in
    use, these do not affect existing consumers.
    • get_aes256_key now returns a Result<Option<Key>> to distinguish missing
      keys from errors
    • get_or_create_aes256_key only creates a key when none exists.
    • When the keydb feature is enabled, ensure_nss_initialized is disabled in
      favor of ensure_nss_initialized_with_profile_dir.

Logins

  • create_login_store_with_nss_keymanager returns an ApiResult now, instead
    of just panicking.
  • fix count_by_origin and count_by_form_action_origin with punicode origins

Places

  • places::storage::history_metadata::get_most_recent_search_entries() was added to fetch the most recent search entries in history metadata. (#7104)
  • places::storage::history_metadata::delete_all_metadata_for_search() was added to delete the search terms in history metadata. (#7101)

Full Changelog

v145.0.2

24 Nov 14:25

Choose a tag to compare

What's Changed

Full Changelog: v145.0.1...v145.0.2

v146.0.2

24 Nov 14:25

Choose a tag to compare

What's Changed

Full Changelog: v146.0.1...v146.0.2

v146.0.1

17 Nov 03:20

Choose a tag to compare

What's Changed

Full Changelog: v146.0...v146.0.1

v145.0.1

17 Nov 15:02

Choose a tag to compare

What's Changed

Full Changelog: v145.0...v145.0.1