Realm Core Versions Save

Core database component for the Realm Mobile Database SDKs

v14.6.0

2 weeks ago

Enhancements

  • Add SyncClientConfig::security_access_group which allows specifying the access group to use for the sync metadata Realm's encryption key. Setting this is required when sharing the metadata Realm between apps on Apple platforms (PR #7552).
  • When connecting to multiple server apps, a unique encryption key is used for each of the metadata Realms rather than sharing one between them (#7552).
  • Introduce the new SyncUser interface which can be implemented by SDKs to use sync without the core App Services implementation (or just for greater control over user behavior in tests). (PR #7300).
  • Improve perfomance of "chained OR equality" queries for UUID/ObjectId types and RQL parsed "IN" queries on string/int/uuid/objectid types. (.Net #3566, since the introduction of these types)
  • Introducing Query::in() which allows SDKs to take advantage of improved performance when building equality conditions against many constants. (PR #7582)

Fixed

  • SyncUser::all_sessions() included sessions in every state except for waiting for access token, which was weirdly inconsistent. It now includes all sessions. (PR #7300).
  • App::all_users() included logged out users only if they were logged out while the App instance existed. It now always includes all logged out users. (PR #7300).
  • Deleting the active user left the active user unset rather than selecting another logged-in user as the active user like logging out and removing users did. (PR #7300).
  • Fixed several issues around encrypted file portability (copying a "bundled" encrypted Realm from one device to another):
    • Fixed Assertion failed: new_size % (1ULL << m_page_shift) == 0 when opening an encrypted Realm less than 64Mb that was generated on a platform with a different page size than the current platform. (#7322, since v13.17.1)
    • Fixed a DecryptionFailed exception thrown when opening a small (<4k of data) Realm generated on a device with a page size of 4k if it was bundled and opened on a device with a larger page size (since the beginning).
    • Fixed an issue during a subsequent open of an encrypted Realm for some rare allocation patterns when the top ref was within ~50 bytes of the end of a page. This could manifest as a DecryptionFailed exception or as an assertion: encrypted_file_mapping.hpp:183: Assertion failed: local_ndx < m_page_state.size(). (#7319)
  • Non-streaming download sync progress notification is fixed for flexible sync Realms where before it was sometimes stopping to emit values right after the registration of the callback (#7561).
  • Schema initialization could hit an assertion failure if the sync client applied a downloaded changeset while the Realm file was in the process of being opened (#7041, since v11.4.0).
  • Queries using query paths on Mixed values returns inconsistent results (#7587, since v14.0.0)
  • Enabling 'cancel_waits_on_nonfatal_error' does not cancel waits during location update while offline (#7527, since v13.26.0)

Breaking changes

  • The following things have been renamed or moved as part of moving all of the App Services functionality to the app namespace:
    • SyncUser -> app::User. Note that there is a new, different type named SyncUser.
    • SyncUser::identity -> app::User::user_id. The "identity" word was overloaded to mean two unrelated things, and one has been changed to user_id everywhere.
    • SyncUserSubscriptionToken -> app::UserSubscriptionToken
    • SyncUserProfile -> app::UserProfile
    • App::Config -> AppConfig
    • SyncConfig::MetadataMode -> AppConfig::MetadataMode
    • MetadataMode::NoMetadata -> MetadataMode::InMemory
    • SyncUser::session_for_on_disk_path() -> SyncManager::get_existing_session()
    • SyncUser::all_sessions() -> SyncManager::get_all_sessions_for(User&)
    • SyncManager::immediately_run_file_actions() -> App::immediately_run_file_actions()
    • realm_sync_user_subscription_token -> realm_app_user_subscription_token (PR #7300).
  • The ClientAppDeallocated error code no longer exists as this error code can no longer occur. (PR #7300).
  • Some fields have moved from SyncClientConfig to AppConfig. AppConfig now has a SyncClientConfig field rather than it being passed separately to App::get_app(). (PR #7300).
  • Sync user management has been removed from SyncManager. This functionality was already additionally available on App. (PR #7300).
  • AuditConfig now has a base_file_path field which must be set by the SDK rather than inheriting it from the SyncManager. (PR #7300).
  • App::switch_user() no longer returns a user. The return value was always exactly the passed-in user and any code which needs it can just use that. (PR #7300).
  • Non-streaming download progress callback no longer stops reporting values immediately after the registration (if the progress update has happened earlier), but waits for the next batch of data to start syncing to report its progress, since the previous behaviour was not useful (PR #7561).

Compatibility

  • Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier.

Internals

  • App metadata storage has been entirely rewritten in preparation for supporting sharing metadata realms between processes. (PR #7300).
  • The metadata disabled mode has been replaced with an in-memory metadata mode which performs similarly and doesn't work weirdly differently from the normal mode. The new mode is intended for testing purposes, but should be suitable for production usage if there is a scenario where metadata persistence is not needed. (PR #7300).
  • The ownership relationship between App and User has changed. User now strongly retains App and App has a weak cache of Users. This means that creating a SyncConfig or opening a Realm will keep the parent App alive, rather than things being in a broken state if the App is deallocated. (PR #7300.
  • A new CMake define REALM_APP_SERVICES can be used to compile out core's default implmentation of the application services. (#7268)
  • Fix a race condition in Promise which could result in an assertion failure if it was destroyed immediately after a get() on the Future returned. The problematic scenario only occurred in test code and not in library code (PR #7602).
  • Catch2 is no longer required as a submodule if the REALM_NO_TESTS flag is set.
  • Sha-2 is no longer required as a submodule on Windows if linking with OpenSSL.
  • The Catch2 submodule has moved to test/external/catch.
  • Fix possible file corruption if using Transaction::copy_to if nested collections are present.
  • Evergreen config was udpated so most linux CI testing is done on ubuntu 22.04 on aarch64 with clang 18, upgrading from clang 11 on ubuntu 20.04 mostly on x86_64 (PR #7475).
  • Evergreen config was updated to move most MacOS testing to MacOS 14 on arm64 with Xcode 15.2, updating from Macos 11 on x86_64 with Xcode 13.1 (PR #7618).

v14.5.2

3 weeks ago

Fixed

  • Fix compilation errors when using command-line swift build (#7587, since v14.5.1).
  • Fixed crash when integrating removal of already removed dictionary key (#7488, since v10.0.0).

Compatibility

  • Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier.

Internals

  • prior_size field in Clear instruction is being repurposed as collection_type (no protocol changes required)

v14.5.1

4 weeks ago

14.5.1 Release notes

Fixed

  • Clearing a nested collection may end with a crash (#7556, since v14.0.0)
  • Removing nested collections in Mixed for synced realms throws realm::StaleAccessor (#7573, since v14.0.0)
  • Add a privacy manifest to the Swift package (Swift #8535).

Compatibility

  • Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier.

v14.5.0

1 month ago

Enhancements

  • Introduce sync 'progress_estimate' parameter (value from 0.0 to 1.0) for existing sync 'ProgressNotifierCallback' api to report sync progress on current batch of upload/download until completion (#7450)

Fixed

  • Fix an assertion failure "m_lock_info && m_lock_info->m_file.get_path() == m_filename" that appears to be related to opening a Realm while the file is in the process of being closed on another thread (Swift #8507).
  • Fixed diverging history due to a bug in the replication code when setting default null values (embedded objects included) (#7536).
  • Version 19.39.33523 of MSVC would crash when compiling for arm64 in release mode (PR #7533).
  • Null pointer exception may be triggered when logging out and async commits callbacks not executed (#7434, since v13.26.0)
  • Fixed building for iPhone simulators targeting deployment target 11 (#7554).

Breaking changes

  • Updated default base URL to be https://services.cloud.mongodb.com to support the new domains (was https://realm.mongodb.com). (PR #7534)

Compatibility

  • Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier.

Internals

  • Update libuv used in object store tests from v1.35.0 to v1.48.0 (PR #7508).
  • Made set_default_logger nullable in the bindgen spec.yml (PR #7515).
  • Recreating the sync metadata Realm when the encryption key changes is now done in a multi-process safe manner (PR #7526).
  • Added App::default_base_url() static accessor for SDKs to retrieve the default base URL from Core. (PR #7534)
  • Realm2JSON tool will now correctly upgrade file to current fileformat.
  • (bindgen) Remove dependency on the clang-format package and rely on a binary provided by the system instead.

v14.4.1

1 month ago

14.4.1 Release notes

Fixed

  • Fix pass a thread safe reference to init subscription callback. (#7497, since v13.16.0)

Compatibility

  • Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier.

Internals

  • Update Catch2 from v3.3.2 to v3.5.3 (PR #7297).

v14.4.0

1 month ago

14.4.0 Release notes

Enhancements

  • Nested path included in 'OutOfBoundsø error message (#7438)
  • Improve file compaction performance on platforms with page sizes greater than 4k (for example arm64 Apple platforms) for files less than 256 pages in size (PR #7492).

Fixed

  • Modifying nested collections left the accessor used to make the modification in a stale state, resulting in some unneccesary work being done when making multiple modifications via one accessor (PR #7470, since v14.0.0).
  • Fix depth level for nested collection in debug mode, set it to the same level as release (#7484, since v14.0.0).
  • Fix opening realm with cached user while offline results in fatal error and session does not retry connection. (#7349, since v13.26.0)
  • Fix disallow Sets in ArrayMixed. (#7502, since v14.0.0)

Breaking changes

  • Update C-API log callback signature to include the log category, and realm_set_log_callback to not take a realm_log_level_e. (PR #7494

Compatibility

  • Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier.

v14.3.0

1 month ago

14.3.0 Release notes

Enhancements

  • Add support to synchronize collections embedded in Mixed properties and other collections (except sets) (PR #7353).
  • Improve performance of change notifications on nested collections somewhat (PR #7402).
  • Improve performance of aggregate operations on Dictionaries of objects, particularly when the dictionaries are empty (PR #7418)
  • Added Resumption delay configuration to SyncClientTimeouts. (PR #7441)

Fixed

  • Fixed conflict resolution bug which may result in an crash when the AddInteger instruction on Mixed properties is merged against updates to a non-integer type (PR #7353).
  • Fix a spurious crash related to opening a Realm on background thread while the process was in the middle of exiting (#7420)
  • Fix a data race in change notification delivery when running at debug log level (PR #7402, since v14.0.0).
  • Fix a 10-15% performance regression when reading data from the Realm resulting from Obj being made a non-trivial type (PR #7402, since v14.0.0).

Breaking changes

  • Remove realm_scheduler_set_default_factory() and realm_scheduler_has_default_factory(), and change the Scheduler factory function to a bare function pointer rather than a UniqueFunction so that it does not have a non-trivial destructor.

Compatibility

  • Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier.

Internals

  • The CMake option REALM_MONGODB_ENDPOINT for running the object-store-tests against baas has been deprecated in favor of an environment variable of the same name (PR #7423).
  • The object-store-tests test suite can now launch baas containers on its own by specifying a BAASAAS_API_KEY in the environment (PR #7423).

v14.2.0

2 months ago

14.2.0 Release notes

Enhancements

  • Added ability to get current log level via C API (PR #7419)
  • Improve performance of object notifiers with complex schemas and very simple changes to process by as much as 20% (PR #7424).
  • Improve performance with very large number of notifiers as much as 75% (PR #7424).

Fixed

  • Fixed an issue when removing items from a LnkLst that could result in invalidated links becoming visable which could cause crashes or exceptions when accessing those list items later on. This affects sync Realms where another client had previously removed a link in a linklist that has over 1000 links in it, and then further local removals from the same list caused the list to have fewer than 1000 items. (#7414, since v10.0.0)
  • Query lists vs lists if the property to check is a path with wildcards would not give correct result. This has for a long time also been a problem for queries with linklist properties in the path (#7393, since v14.0.0)

Breaking changes

  • The fix of querying involving multiple lists may cause tests that depended on the broken beharior to fail.

Compatibility

  • Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier.

Internals

  • Fix several crashes when running the object store benchmarks (#7403).
  • The dependencies.list file that defines the realm core library version and the versions of its dependencies is now a YAML file called dependencies.yml (PR #7394).
  • Remove SetElementEquals and SetElementLessThan, as Mixed now uses the same comparisons as Set did.

v14.1.0

2 months ago

Enhancements

  • Add support for using aggregate operations on Mixed properties in queries (PR #7398)

Fixed

  • Fix a performance regression when reading values from Bson containers and revert some breaking changes to the Bson API (PR #7377, since v14.0.0)
  • List KVO information was being populated for non-list collections (PR #7378, since v14.0.0)
  • Setting a Mixed property to an ObjLink equal to its existing value would remove the existing backlinks and then exit before re-adding them, resulting in later assertion failures due to the backlink state being invalid (PR #7384, since v14.0.0).
  • Passing a double as argument for a Query on Decimal128 did not work (#7386, since v14.0.0)
  • Opening file with file format 23 in read-only mode will crash (#7388, since v14.0.0)
  • Querying a dictionary over a link would sometimes result in out-of-bounds memory reads (PR #7382, since v14.0.0).
  • Restore the pre-14.0.0 behavior of missing keys in dictionaries in queries (PR #7391)
  • Fix a ~10% performance regression for bulk insertion when using a log level which does not include debug/trace (PR #7400, since v14.0.0)

Breaking changes

  • None.

Compatibility

  • Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier. You cannot open files with an file format older than v24 in read-only mode.

Internals

  • The Linux-armv7 cross-compiling toolchain file prefers the bfd linker over gold because of issues linking against OpenSSL 3.2.0.

v14.0.1

2 months ago

Enhancements

  • None.

Fixed

  • Fixed building issues when RealmCore is used as submodule (#7370)

Breaking changes

  • None.

Compatibility

  • Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier.