Changelog

Cocoa (Swift) 1.0.10Released Fri Sep 10th 2021, 4:21 pm
Visit API ReferenceRelease Notes:

  • Fix to stop a change in site ID from leading to an unnecessary error.
  • Improve handling of persisted authentication data. Note that this might lead to a one-off change to a peer's site ID if you weren't and continue to not be specifying an explicit site ID when creating your identity.

Installation:
pod 'DittoSwift', '=1.0.10'
Visit API Reference 1.0.10
Cocoa (Swift) 1.0.9Released Fri Sep 3rd 2021, 10:38 pm
Visit API ReferenceRelease Notes:

  • Added support for getting information about all of the collections that the device is aware of. This is achieved by accessing collections() through the store object and then using the same sort of API used when getting documents in collections, i.e. exec/observe/etc.
  • Added multicast as a transport option to the LAN config part of TransportConfig.
  • Added new identity types: Online and OnlinePlayground. An Online identity should be used when running Ditto in secure production mode, logging on to Ditto Cloud, or using an on-premises authentication server. User permissions are centrally managed. Sync will not work until a successful login has occurred. An OnlinePlayground identity should be used when you want to test a Ditto Cloud app without authentication ("Playground mode"). This mode offers no security and must only be used for development.
  • The Production identity has been renamed to Manual.
  • Added a DittoAuthenticator type, accessible via the Ditto object, which allows you to perform login operations when you're using an Online identity.
  • Similarly, added an DittoAuthenticationDelegate type that needs to be used when using an Online identity.
  • Report an error if more than one Ditto instance is started using the same working directory.

Installation:
pod 'DittoSwift', '=1.0.9'
Visit API Reference 1.0.9
Cocoa (Swift) 1.0.8Released Mon Aug 2nd 2021, 4:19 pm
Visit API ReferenceRelease Notes:

  • Improved debug logging.

Installation:
pod 'DittoSwift', '=1.0.8'
Visit API Reference 1.0.8
Cocoa (Swift) 1.0.7Released Thu Jul 22nd 2021, 11:38 pm
Visit API ReferenceRelease Notes:

  • Fix bug where sync may fail if an unusually long deviceName is configured
  • Fix intermittent crash when Bluetooth L2CAP connections fail
  • Fix intermittent crash when using the presence viewer component and the app is backgrounded

Installation:
pod 'DittoSwift', '=1.0.7'
Visit API Reference 1.0.7
Cocoa (Swift) 1.0.6Released Thu Jul 8th 2021, 6:22 pm
Visit API ReferenceRelease Notes:

  • Add value accessor on DittoDocumentPath, DittoMutableDocumentPath, and DittoDocumentIDPath types to allow accessing a nested value in a document/ID as an Any?.

Installation:
pod 'DittoSwift', '=1.0.6'
Visit API Reference 1.0.6
Cocoa (Swift) 1.0.5Released Fri Jun 25th 2021, 10:36 pm
Visit API ReferenceRelease Notes:

  • Added a new find function that accepts a query containing placeholders in the form of $args.my_arg along with a map of query arguments in the form of { "my_arg": "some value" }. The placeholders in the query will be replaced by a query-appropriate representation of the relevant value from the map of query arguments.

    For example, a query of color == $args.color with a query arguments map of { "color": "red" } would internally be treated as a query of: color == "red".

  • Added the ability to get a hash and/or a mnemonic (string) representation of the matching documents from a live query event. This means you can do something like this:

    let liveQuery = collection.findAll().observe() { docs, event in
        event.hash(docs); // e.g. `1950015808188223905`
        event.hashMnemonic(docs); // e.g. `locate-quality-tina--helena-remote-cat`
        // ...
    }
    
  • Fix for using floats in queries.

  • Accessing the store property of a Ditto instance will no longer throw an error if you have not yet activated your Ditto instance with a valid license token.

  • Deprecated setAccessLicense and added a new function, setLicenseToken, which will throw an appropriate error if your provided license token is expired or invalid somehow.

  • Deprecated startSync and added a new function, tryStartSync, which will throw an error if your Ditto instance hasn't yet been activated via a successful call to setLicenseToken.

Installation:
pod 'DittoSwift', '=1.0.5'
Visit API Reference 1.0.5
Cocoa (Swift) 1.0.4Released Fri Jun 11th 2021, 10:36 pm
Visit API ReferenceRelease Notes:

  • Fix issue with AWDL transport where it could end up in a stuck state.
  • Deprecate the find(query:) function on DittoScopedWriteTransaction and add a new version of find(:) that doesn't require the query argument label. This makes this consistent with the find(:) function on DittoCollection.

Installation:
pod 'DittoSwift', '=1.0.4'
Visit API Reference 1.0.4
Cocoa (Swift) 1.0.3Released Thu Jun 10th 2021, 4:34 pm
Visit API ReferenceRelease Notes:

  • Bluetooth sync performance improvements with L2CAP support added.

Installation:
pod 'DittoSwift', '=1.0.3'
Visit API Reference 1.0.3
Cocoa (Swift) 1.0.2Released Thu May 20th 2021, 9:39 pm
Visit API ReferenceRelease Notes:

  • Add support for subscripting DittoDocumentIDs in order to get nested values when a document ID is based on an array or a dictionary.
  • Deprecated .toNative() on DittoDocumentID. You should use .value instead.

Installation:
pod 'DittoSwift', '=1.0.2'
Visit API Reference 1.0.2
Cocoa (Swift) 1.0.1Released Tue May 4th 2021, 4:02 pm
Visit API ReferenceRelease Notes:

  • If you provide an invalid query then you will now get a better error message.

Installation:
pod 'DittoSwift', '=1.0.1'
Visit API Reference 1.0.1
Cocoa (Swift) 1.0.0Released Thu Apr 22nd 2021, 12:29 am
Visit API ReferenceRelease Notes:

  • This release is not compatible with any previous SDK releases. There are a number of breaking changes both in terms of the SDK API and in terms of the internal systems used by the SDK to perform operations such as synchronization. If you have previously made use of the Ditto SDK and wish to update to this version then note that you will need to delete all existing Ditto data otherwise you will run into errors. If you have existing data that you need to keep then please contact us and we can advise you as to how you can migrate your data.
  • The most notable API breaking changes are:
    • Document IDs are no longer restricted to just strings. You can now create a document ID that is a string, integer, boolean, array, map, or null. This means that when making findByID or insert calls you now need to provide a DittoDocumentID object rather than a string. Similarly, when you access a document's ID it will now return a DittoDocumentID object instead of a string.
    • The start() and stop() functions on the Ditto object have been renamed to startSync() and stopSync() respectively. They now also don't accept any arguments. If you wish to specify which transports you would like the Ditto SDK to make use of (along with any configuration that they might require) you now need to use the setTransportConfig function on the Ditto object, and pass to that a transport config object. The default transports that will be enabled are still the same as they were in previous releases of the SDK though, so if you have no custom requirements then you can simply change your start() call to startSync().
  • Lots of performance improvements and bug fixes.

Installation:
pod 'DittoSwift', '=1.0.0'
Visit API Reference 1.0.0
Cocoa (Swift) 1.0.0-alpha9Released Fri Feb 5th 2021, 12:58 am
Visit API ReferenceRelease Notes:

  • Fixed a bug where mDNS advertising may continue after Ditto is stopped.
  • Fixed a hang that could occur creating an attachment fetcher while requesting many attachments at once.
  • Fixed sync failure when there are multiple overlapping subscriptions or live queries with the same query string for the same collection.
  • Fixed a potential crash and other sync failures that could occur under certain conditions.

Installation:
pod 'DittoSwift', '=1.0.0-alpha9'
Visit API Reference 1.0.0-alpha9
Cocoa (Swift) 1.0.0-alpha8Released Fri Jan 22nd 2021, 3:09 pm
Visit API ReferenceRelease Notes:

  • Site IDs, which make up part of a Ditto identity object, are now unsigned, 64-bit integers instead of unsigned 32-bit integers.
  • Fix a crash that could occur if an offset with a value greater than the number of matching documents was provided.
  • Fix a potential crash that would occur if a live query had stop called on it immediately after it was created.

Installation:
pod 'DittoSwift', '=1.0.0-alpha8'
Visit API Reference 1.0.0-alpha8
Cocoa (ObjC) 1.0.10Released Fri Sep 10th 2021, 4:21 pm
Visit API ReferenceRelease Notes:

  • Fix for incorrectly included header.
  • Fix to stop a change in site ID from leading to an unnecessary error.
  • Improve handling of persisted authentication data. Note that this might lead to a one-off change to a peer's site ID if you weren't and continue to not be specifying an explicit site ID when creating your identity.

Installation:
pod 'DittoObjC', '=1.0.10'
Visit API Reference 1.0.10
Cocoa (ObjC) 1.0.9Released Fri Sep 3rd 2021, 10:38 pm
Visit API ReferenceRelease Notes:

  • Added support for getting information about all of the collections that the device is aware of. This is achieved by accessing collections() through the store object and then using the same sort of API used when getting documents in collections, i.e. exec/observe/etc.
  • Added multicast as a transport option to the LAN config part of TransportConfig.
  • Added new identity types: Online and OnlinePlayground. An Online identity should be used when running Ditto in secure production mode, logging on to Ditto Cloud, or using an on-premises authentication server. User permissions are centrally managed. Sync will not work until a successful login has occurred. An OnlinePlayground identity should be used when you want to test a Ditto Cloud app without authentication ("Playground mode"). This mode offers no security and must only be used for development.
  • The Production identity has been renamed to Manual.
  • Added a DITAuthenticator type, accessible via the Ditto object, which allows you to perform login operations when you're using an Online identity.
  • Similarly, added a DITAuthenticationDelegate type that needs to be used when using an Online identity.
  • Report an error if more than one Ditto instance is started using the same working directory.

Installation:
pod 'DittoObjC', '=1.0.9'
Visit API Reference 1.0.9
Cocoa (ObjC) 1.0.8Released Mon Aug 2nd 2021, 4:19 pm
Visit API ReferenceRelease Notes:

  • Improved debug logging.

Installation:
pod 'DittoObjC', '=1.0.8'
Visit API Reference 1.0.8
Cocoa (ObjC) 1.0.7Released Thu Jul 22nd 2021, 11:38 pm
Visit API ReferenceRelease Notes:

  • Fix bug where sync may fail if an unusually long deviceName is configured
  • Fix intermittent crash when Bluetooth L2CAP connections fail
  • Fix intermittent crash when using the presence viewer component and the app is backgrounded

Installation:
pod 'DittoObjC', '=1.0.7'
Visit API Reference 1.0.7
Cocoa (ObjC) 1.0.6Released Thu Jul 8th 2021, 6:22 pm
Visit API ReferenceRelease Notes:

  • Add value accessor on DITDocumentPath, DITMutableDocumentPath, and DITDocumentIDPath types to allow accessing a nested value in a document/ID as an id.

Installation:
pod 'DittoObjC', '=1.0.6'
Visit API Reference 1.0.6
Cocoa (ObjC) 1.0.5Released Fri Jun 25th 2021, 10:36 pm
Visit API ReferenceRelease Notes:

  • Added a new find function that accepts a query containing placeholders in the form of $args.my_arg along with a map of query arguments in the form of { "my_arg": "some value" }. The placeholders in the query will be replaced by a query-appropriate representation of the relevant value from the map of query arguments.

    For example, a query of color == $args.color with a query arguments map of { "color": "red" } would internally be treated as a query of: color == "red".

  • Added the ability to get a hash and/or a mnemonic (string) representation of the matching documents from a live query event. This means you can do something like this:

    DITLiveQuery *liveQuery = [[collection findAll] observe:^(NSArray<DITDocument *> *docs, DITLiveQueryEvent *event)
        [event hash:docs]; // e.g. `1950015808188223905`
        [event hashMnemonic:docs]; // e.g. `locate-quality-tina--helena-remote-cat`
        // ...
    }];
    
  • Fix for using floats in queries.

  • Accessing the store property of a Ditto instance will no longer throw an error if you have not yet activated your Ditto instance with a valid license token.

  • Deprecated setAccessLicense and added a new function, setLicenseToken, which will set an error out param if your provided license token is expired or invalid somehow.

  • Deprecated startSync and added a new function, tryStartSync, which will set an error out param if your Ditto instance hasn't yet been activated via a successful call to setLicenseToken.

Installation:
pod 'DittoObjC', '=1.0.5'
Visit API Reference 1.0.5
Cocoa (ObjC) 1.0.4Released Fri Jun 11th 2021, 10:36 pm
Visit API ReferenceRelease Notes:

  • Fix issue with AWDL transport where it could end up in a stuck state.

Installation:
pod 'DittoObjC', '=1.0.4'
Visit API Reference 1.0.4
Cocoa (ObjC) 1.0.3Released Thu Jun 10th 2021, 4:34 pm
Visit API ReferenceRelease Notes:

  • Bluetooth sync performance improvements with L2CAP support added.

Installation:
pod 'DittoObjC', '=1.0.3'
Visit API Reference 1.0.3
Cocoa (ObjC) 1.0.2Released Thu May 20th 2021, 9:39 pm
Visit API ReferenceRelease Notes:

  • Add support for subscripting DITDocumentIDs in order to get nested values when a document ID is based on an array or a dictionary.
  • Deprecated .toNative() on DITDocumentID. You should use .value instead.

Installation:
pod 'DittoObjC', '=1.0.2'
Visit API Reference 1.0.2
Cocoa (ObjC) 1.0.1Released Tue May 4th 2021, 4:02 pm
Visit API ReferenceRelease Notes:

  • If you provide an invalid query then you will now get a better error message.

Installation:
pod 'DittoObjC', '=1.0.1'
Visit API Reference 1.0.1
Cocoa (ObjC) 1.0.0Released Thu Apr 22nd 2021, 12:29 am
Visit API ReferenceRelease Notes:

  • This release is not compatible with any previous SDK releases. There are a number of breaking changes both in terms of the SDK API and in terms of the internal systems used by the SDK to perform operations such as synchronization. If you have previously made use of the Ditto SDK and wish to update to this version then note that you will need to delete all existing Ditto data otherwise you will run into errors. If you have existing data that you need to keep then please contact us and we can advise you as to how you can migrate your data.
  • The most notable API breaking changes are:
    • Document IDs are no longer restricted to just strings. You can now create a document ID that is a string, integer, boolean, array, map, or null. This means that when making findByID or insert calls you now need to provide a DITDocumentID object rather than a string. Similarly, when you access a document's ID it will now return a DITDocumentID object instead of a string.
    • The start() and stop() functions on the Ditto object have been renamed to startSync() and stopSync() respectively. They now also don't accept any arguments. If you wish to specify which transports you would like the Ditto SDK to make use of (along with any configuration that they might require) you now need to use the setTransportConfig function on the Ditto object, and pass to that a transport config object. The default transports that will be enabled are still the same as they were in previous releases of the SDK though, so if you have no custom requirements then you can simply change your start() call to startSync().
  • Lots of performance improvements and bug fixes.

Installation:
pod 'DittoObjC', '=1.0.0'
Visit API Reference 1.0.0
Cocoa (ObjC) 1.0.0-alpha9Released Fri Feb 5th 2021, 12:58 am
Visit API ReferenceRelease Notes:

  • Fixed a bug where mDNS advertising may continue after Ditto is stopped.
  • Fixed a hang that could occur creating an attachment fetcher while requesting many attachments at once.
  • Fixed sync failure when there are multiple overlapping subscriptions or live queries with the same query string for the same collection.
  • Fixed a potential crash and other sync failures that could occur under certain conditions.

Installation:
pod 'DittoObjC', '=1.0.0-alpha9'
Visit API Reference 1.0.0-alpha9
Cocoa (ObjC) 1.0.0-alpha8Released Fri Jan 22nd 2021, 3:09 pm
Visit API ReferenceRelease Notes:

  • Site IDs, which make up part of a Ditto identity object, are now unsigned, 64-bit integers instead of unsigned 32-bit integers.
  • Fix a crash that could occur if an offset with a value greater than the number of matching documents was provided.
  • Fix a potential crash that would occur if a live query had stop called on it immediately after it was created.

Installation:
pod 'DittoObjC', '=1.0.0-alpha8'
Visit API Reference 1.0.0-alpha8
Cocoa 1.0.0-alpha7Released Mon Jan 4th 2021, 11:12 am
Visit API ReferenceRelease Notes:

  • DittoLogger class added, which allows extra logging functionality through setCustomLogCallback and setLogFile/setLogFileURL.
  • CFBundleShortVersionString in the framework's Info.plist now only contains alphanumeric characters, which should resolve any issues with submitting apps to TestFlight or the App Store.

Installation:
pod 'DittoSyncKitSwift', '=1.0.0-alpha7'
Visit API Reference 1.0.0-alpha7
Cocoa 1.0.0-alpha6Released Tue Dec 15th 2020, 1:00 am
Visit API ReferenceRelease Notes:

  • Performance and stability improvements.
  • Fix default data insertion such that merge semantics are consistent and duplicate data isn't created.

Installation:
pod 'DittoSyncKitSwift', '=1.0.0-alpha6'
Visit API Reference 1.0.0-alpha6
Cocoa 1.0.0-alpha5Released Sun Nov 22nd 2020, 9:17 pm
Visit API ReferenceRelease Notes:

  • Added a new intermediate security identity for a shared secret key. This is a simplistic authentication mode which is normally only suitable for private apps where all the users and devices are trusted.
  • Fixed an issue that prevented Counter values from syncing correctly
  • Renamed DittoAttachmentStatus to DittoAttachmentFetchEvent and subsequently Incomplete status to Progre ss.

Installation:
pod 'DittoSyncKitSwift', '=1.0.0-alpha5'
Visit API Reference 1.0.0-alpha5
Cocoa 1.0.0-alpha4Released Tue Nov 10th 2020, 11:27 am
Visit API ReferenceRelease Notes:

  • Fix issue where attachments could stop being fetched incorrectly.

Installation:
pod 'DittoSyncKitSwift', '=1.0.0-alpha4'
Visit API Reference 1.0.0-alpha4
Cocoa 1.0.0-alpha3Released Fri Nov 6th 2020, 11:50 am
Visit API ReferenceRelease Notes:

  • Added new observeWithNextSignal API to allow the application to control the delivery of the next observe callback event.
  • Fixed several issues related to attachments that could delay sync.
  • Simplified log statements

Installation:
pod 'DittoSyncKitSwift', '=1.0.0-alpha3'
Visit API Reference 1.0.0-alpha3
Cocoa 1.0.0-alpha1Released Fri Oct 9th 2020, 8:22 pm
Visit API ReferenceRelease Notes:

  • Note that this is a release with breaking changes and clients using releases in the 1.0 series will not be able to communicate with clients running a version that is anything less than 1.0. This should hopefully not be an issue because this release of the SDK has changed the name to be DittoSyncKitSwift as opposed to DittoKitSwift.
  • Lots of performance improvements and some bug fixes.

Installation:
pod 'DittoSyncKitSwift', '=1.0.0-alpha1'
Visit API Reference 1.0.0-alpha1
Cocoa 0.4.0-alpha1Released Tue Sep 29th 2020, 8:46 am
Visit API ReferenceRelease Notes:

  • Note that this is a release with breaking changes, even just in terms of clients running 0.4.0 not being able to communicate with clients running 0.3.X releases.
  • Fixes for memory leaks.
  • Performance improvements.

Installation:
pod 'DittoKitSwift', '=0.4.0-alpha1'
Visit API Reference 0.4.0-alpha1
Cocoa 0.3.5Released Fri Sep 4th 2020, 7:36 pm
Visit API ReferenceRelease Notes:

  • Fixed an issue where inserting data as default data (setting the isDefault parameter to true) could lead to data that would not merge as expected.

Installation:
pod 'DittoKitSwift', '=0.3.5'
Visit API Reference 0.3.5
Cocoa 0.3.4Released Mon Aug 10th 2020, 2:31 pm
Visit API ReferenceRelease Notes:

  • Fixed a bug with query compilation where integer literals in the query would lead to a query compilation failure.

Installation:
pod 'DittoKitSwift', '=0.3.4'
Visit API Reference 0.3.4
Cocoa 0.3.3Released Tue Aug 4th 2020, 5:15 am
Visit API ReferenceRelease Notes:

  • Improved LAN background sync for iOS apps

Installation:
pod 'DittoKitSwift', '=0.3.3'
Visit API Reference 0.3.3
Cocoa 0.3.2Released Wed Jul 22nd 2020, 1:42 am
Visit API ReferenceRelease Notes:

  • Fixes a memory leak in the Cocoa SDK when using findByID() to query documents.

Installation:
pod 'DittoKitSwift', '=0.3.2'
Visit API Reference 0.3.2
Cocoa 0.3.1Released Thu Jul 16th 2020, 1:27 am
Visit API ReferenceRelease Notes:

  • Added a new LAN transport mode WiFiFixedPort to listen for connections on a known port.
  • DittoKit has a new sdkVersion property describing which build of DittoKit is installed. Please include this information in support requests.
  • Fixed bug where an attachment transfer may not resume after being interrupted.
  • Fixed bug where a long-lasting Bluetooth connection may spontaneously disconnect and reconnect.
  • Improvements to reconnection speed.

Installation:
pod 'DittoKitSwift', '=0.3.1'
Visit API Reference 0.3.1
Cocoa 1.0.0-alpha7Released Mon Jan 4th 2021, 11:12 am
Visit API ReferenceRelease Notes:

  • DITLogger class added, which allows extra logging functionality through setCustomLogCallback and setLogFile/setLogFileURL.
  • CFBundleShortVersionString in the framework's Info.plist now only contains alphanumeric characters, which should resolve any issues with submitting apps to TestFlight or the App Store.

Installation:
pod 'DittoSyncKit', '=1.0.0-alpha7'
Visit API Reference 1.0.0-alpha7
Cocoa 1.0.0-alpha6Released Tue Dec 15th 2020, 1:00 am
Visit API ReferenceRelease Notes:

  • Performance and stability improvements.
  • Fix default data insertion such that merge semantics are consistent and duplicate data isn't created.

Installation:
pod 'DittoSyncKit', '=1.0.0-alpha6'
Visit API Reference 1.0.0-alpha6
Cocoa 1.0.0-alpha5Released Sun Nov 22nd 2020, 8:57 pm
Visit API ReferenceRelease Notes:

  • Added a new intermediate security identity for a shared secret key. This is a simplistic authentication mode which is normally only suitable for private apps where all the users and devices are trusted.
  • Fixed an issue that prevented Counter values from syncing correctly
  • Renamed DittoAttachmentStatus to DittoAttachmentFetchEvent and subsequently Incomplete status to Progress.

Installation:
pod 'DittoSyncKit', '=1.0.0-alpha5'
Visit API Reference 1.0.0-alpha5
Cocoa 1.0.0-alpha4Released Tue Nov 10th 2020, 11:14 am
Visit API ReferenceRelease Notes:

  • Fix issue where attachments could stop being fetched incorrectly.

Installation:
pod 'DittoSyncKit', '=1.0.0-alpha4'
Visit API Reference 1.0.0-alpha4
Cocoa 1.0.0-alpha3Released Wed Nov 4th 2020, 6:53 pm
Visit API ReferenceRelease Notes:

  • Added new observeWithNextSignal API to allow the application to control the delivery of the next observe callback event.
  • Fixed several issues related to attachments that could delay sync.
  • Simplified log statements

Installation:
pod 'DittoSyncKit', '=1.0.0-alpha3'
Visit API Reference 1.0.0-alpha3
Cocoa 1.0.0-alpha1Released Fri Oct 9th 2020, 6:31 pm
Visit API ReferenceRelease Notes:

  • Note that this is a release with breaking changes and clients using releases in the 1.0 series will not be able to communicate with clients running a version that is anything less than 1.0. This should hopefully not be an issue because this release of the SDK has changed the name to be DittoSyncKit as opposed to DittoKit.
  • Lots of performance improvements and some bug fixes.

Installation:
pod 'DittoSyncKit', '=1.0.0-alpha1'
Visit API Reference 1.0.0-alpha1
Cocoa 0.4.0-alpha1Released Tue Sep 29th 2020, 8:18 am
Visit API ReferenceRelease Notes:

  • Note that this is a release with breaking changes, even just in terms of clients running 0.4.0 not being able to communicate with clients running 0.3.X releases.
  • Fixes for memory leaks.
  • Performance improvements.

Installation:
pod 'DittoKit', '=0.4.0-alpha1'
Visit API Reference 0.4.0-alpha1
Cocoa 0.3.5Released Fri Sep 4th 2020, 7:30 pm
Visit API ReferenceRelease Notes:

  • Fixed an issue where inserting data as default data (setting the isDefault parameter to true) could lead to data that would not merge as expected.

Installation:
pod 'DittoKit', '=0.3.5'
Visit API Reference 0.3.5
Cocoa 0.3.4Released Mon Aug 10th 2020, 2:25 pm
Visit API ReferenceRelease Notes:

  • Fixed a bug with query compilation where integer literals in the query would lead to a query compilation failure.

Installation:
pod 'DittoKit', '=0.3.4'
Visit API Reference 0.3.4
Cocoa 0.3.3Released Tue Aug 4th 2020, 5:05 am
Visit API ReferenceRelease Notes:

  • Improved LAN background sync for iOS apps

Installation:
pod 'DittoKit', '=0.3.3'
Visit API Reference 0.3.3
Cocoa 0.3.2Released Wed Jul 22nd 2020, 1:31 am
Visit API ReferenceRelease Notes:

  • Fixes a memory leak in the Cocoa SDK when using findByID() to query documents.

Installation:
pod 'DittoKit', '=0.3.2'
Visit API Reference 0.3.2
Cocoa 0.3.1Released Thu Jul 16th 2020, 1:16 am
Visit API ReferenceRelease Notes:

  • Added a new LAN transport mode WiFiFixedPort to listen for connections on a known port.
  • DittoKit has a new sdkVersion property describing which build of DittoKit is installed. Please include this information in support requests.
  • Fixed bug where an attachment transfer may not resume after being interrupted.
  • Fixed bug where a long-lasting Bluetooth connection may spontaneously disconnect and reconnect.
  • Improvements to reconnection speed.

Installation:
pod 'DittoKit', '=0.3.1'
Visit API Reference 0.3.1
Cocoa 0.3.0Released Thu Jun 4th 2020, 10:09 am
Visit API ReferenceRelease Notes:

  • DittoKit 0.3 includes incompatible changes to data storage and networking - please uninstall all apps based on DittoKit 0.2 first
  • The CocoaPod “DittoKit” is now Objective-C. The Swift version is published as “DittoKitSwift”. To continue working with Ditto in Swift, update your Podfile and import statement
  • Support for attaching large binary files to documents and syncing them on demand
  • Many SDK functions no longer throw exceptions and the “try” operator is no longer needed
  • When creating documents you can no longer specify the id by providing an _id key. Instead you must specify an id as an extra argument to the insert function, if you want to explicitly set a document’s id
  • A document’s id property is now id rather than _id
  • The parameters for a live query callback have changed
  • The sort order for a query is now controlled by an ascending/descending enum
  • Faster sync performance
  • Ability to connect to a peer at a known address using the Server transport type
  • You can set your Ditto license key by configuring “DittoAccessLicense” in Info.plist

Installation:
pod 'DittoKit', '=0.3.0'
Visit API Reference 0.3.0
Cocoa 0.2.2Released Mon Feb 3rd 2020, 12:22 am
Visit API ReferenceRelease Notes:

  • Faster Bluetooth sync between iOS devices when reopening app from background

Installation:
pod 'DittoKit', '=0.2.2'
Visit API Reference 0.2.2
Cocoa 0.2.1Released Thu Jan 9th 2020, 4:38 am
Visit API ReferenceRelease Notes:

  • Fixes a crash that can occur when calling stop().

Installation:
pod 'DittoKit', '=0.2.1'
Visit API Reference 0.2.1
Cocoa 0.2.0Released Tue Dec 17th 2019, 11:51 am
Visit API ReferenceRelease Notes:

  • iOS: New function observePeers() to monitor connections to other Ditto devices
  • Improved query results performance
  • Fixed two bugs that could lead to a crash
  • Many networking improvements to speed up sync on iOS and Android

Note: SyncKit 0.2 is incompatible with version 0.1.

Installation:
pod 'DittoKit', '=0.2.0'
Visit API Reference 0.2.0
Cocoa 0.1.9Released Mon Nov 25th 2019, 11:37 am
Visit API ReferenceRelease Notes:

  • Fixed Bluetooth LE issue specific to older iOS devices (iPhone 6, iPad Mini 4) where sync can fail after the device is locked

Installation:
pod 'DittoKit', '=0.1.9'
Visit API Reference 0.1.9
Cocoa 0.1.8Released Thu Nov 14th 2019, 3:22 am
Visit API ReferenceRelease Notes:

  • Fixed Bluetooth Low Energy issue on iOS where sync may never complete, particularly with multiple devices
  • Cocoa SDK detects when WiFi is disabled
  • Significant performance improvements in synchronization processing

Installation:
pod 'DittoKit', '=0.1.8'
Visit API Reference 0.1.8
Cocoa 0.1.7Released Tue Oct 29th 2019, 8:09 am
Visit API ReferenceRelease Notes:

  • Various Bluetooth Low Energy related fixes to make Bluetooth-based communication more reliable.
  • Accessing a collection using the collection function on DittoStore is no longer a throwing call and the name parameter has been removed.
  • Accessing a collection can now be done by using a subscript on DittoStore, e.g. store["my-collection"].
  • Live query and transport condition updates are now delivered on the main queue by default. You can specify different queues to be used if required.
  • Adds queriesHash and queriesHashMnemonic to DittoStore, which allow you to get either a numberc hash or string-based mnemonic representation of a client's state in relation to the specified queries.
  • Fixes a DittoDocument-related memory leak.

Installation:
pod 'DittoKit', '=0.1.7'
Visit API Reference 0.1.7
Cocoa 0.1.6Released Tue Oct 15th 2019, 11:57 am
Visit API ReferenceRelease Notes:

  • The full SDK API is now usable from Objective-C. Some classes that couldn't be represented in Objective-C have counterparts with an ObjC suffix

Installation:
pod 'DittoKit', '=0.1.6'
Visit API Reference 0.1.6
Cocoa 0.1.5Released Sun Oct 13th 2019, 10:37 pm
Visit API ReferenceRelease Notes:

  • Improved handling of retrieving numeric fields from documents
  • mDNS/AWDL now correctly filters remote peers by app name
  • Single document update operation closures now have the document as an optional parameter

Installation:
pod 'DittoKit', '=0.1.5'
Visit API Reference 0.1.5
Android 1.0.10Released Fri Sep 10th 2021, 4:21 pm
Visit API ReferenceRelease Notes:

  • Fix to stop a change in site ID from leading to an unnecessary error.
  • Improve handling of persisted authentication data. Note that this might lead to a one-off change to a peer's site ID if you weren't and continue to not be specifying an explicit site ID when creating your identity.

Installation:
implementation "live.ditto:ditto:1.0.10"
Visit API Reference 1.0.10
Android 1.0.9Released Fri Sep 3rd 2021, 10:38 pm
Visit API ReferenceRelease Notes:

  • Added support for getting information about all of the collections that the device is aware of. This is achieved by accessing collections() through the store object and then using the same sort of API used when getting documents in collections, i.e. exec/observe/etc.
  • Added multicast as a transport option to the LAN config part of TransportConfig.
  • Added new identity types: Online and OnlinePlayground. An Online identity should be used when running Ditto in secure production mode, logging on to Ditto Cloud, or using an on-premises authentication server. User permissions are centrally managed. Sync will not work until a successful login has occurred. An OnlinePlayground identity should be used when you want to test a Ditto Cloud app without authentication ("Playground mode"). This mode offers no security and must only be used for development.
  • The Production identity has been renamed to Manual.
  • Added a DittoAuthenticator type, accessible via the Ditto object, which allows you to perform login operations when you're using an Online identity.
  • Similarly, added a DittoAuthenticationCallback type that needs to be used when using an Online identity.
  • Report an error if more than one Ditto instance is started using the same working directory.

Installation:
implementation "live.ditto:ditto:1.0.9"
Visit API Reference 1.0.9
Android 1.0.8Released Mon Aug 2nd 2021, 4:19 pm
Visit API ReferenceRelease Notes:

  • Improved debug logging.

Installation:
implementation "live.ditto:ditto:1.0.8"
Visit API Reference 1.0.8
Android 1.0.7Released Thu Jul 22nd 2021, 11:38 pm
Visit API ReferenceRelease Notes:

  • Fix bug where sync may fail if an unusually long deviceName is configured

Installation:
implementation "live.ditto:ditto:1.0.7"
Visit API Reference 1.0.7
Android 1.0.6Released Thu Jul 8th 2021, 6:22 pm
Visit API ReferenceRelease Notes:

  • Add value accessor on DittoDocumentPath, DittoMutableDocumentPath, and DittoDocumentIDPath types to allow accessing a nested value in a document/ID as an Any?.

Installation:
implementation "live.ditto:ditto:1.0.6"
Visit API Reference 1.0.6
Android 1.0.5Released Fri Jun 25th 2021, 10:36 pm
Visit API ReferenceRelease Notes:

  • Added a new find function that accepts a query containing placeholders in the form of $args.my_arg along with a map of query arguments in the form of { "my_arg": "some value" }. The placeholders in the query will be replaced by a query-appropriate representation of the relevant value from the map of query arguments.

    For example, a query of color == $args.color with a query arguments map of { "color": "red" } would internally be treated as a query of: color == "red".

  • Added the ability to get a hash and/or a mnemonic (string) representation of the matching documents from a live query event. This means you can do something like this:

    val liveQuery = collection.findAll().observe() { docs, event ->
        event.hash(docs); // e.g. `1950015808188223905`
        event.hashMnemonic(docs); // e.g. `locate-quality-tina--helena-remote-cat`
        // ...
    }
    
  • Fix for using floats in queries.

  • Accessing the store property of a Ditto instance will no longer throw an error if you have not yet activated your Ditto instance with a valid license token.

  • Deprecated setAccessLicense and added a new function, setLicenseToken, which will throw an appropriate error if your provided license token is expired or invalid somehow.

  • Deprecated startSync and added a new function, tryStartSync, which will throw an error if your Ditto instance hasn't yet been activated via a successful call to setLicenseToken.

Installation:
implementation "live.ditto:ditto:1.0.5"
Visit API Reference 1.0.5
Android 1.0.4Released Fri Jun 11th 2021, 10:36 pm
Visit API ReferenceRelease Notes:

  • Bluetooth sync performance improvements with L2CAP support added, which will be used when available.

Installation:
implementation "live.ditto:ditto:1.0.4"
Visit API Reference 1.0.4
Android 1.0.3Released Thu Jun 10th 2021, 4:34 pm
Visit API ReferenceRelease Notes:

  • Bluetooth sync performance improvements.
  • Enable configuration of advertisement power and frequency.

Installation:
implementation "live.ditto:ditto:1.0.3"
Visit API Reference 1.0.3
Android 1.0.2Released Thu May 20th 2021, 9:39 pm
Visit API ReferenceRelease Notes:

  • Add support for subscripting DittoDocumentIDs in order to get nested values when a document ID is based on an array or a map.
  • Deprecated .toNative() on DittoDocumentID. You should use .value instead.

Installation:
implementation "live.ditto:ditto:1.0.2"
Visit API Reference 1.0.2
Android 1.0.1Released Tue May 4th 2021, 4:02 pm
Visit API ReferenceRelease Notes:

  • If you provide an invalid query then you will now get a better error message.

Installation:
implementation "live.ditto:ditto:1.0.1"
Visit API Reference 1.0.1
Android 1.0.0Released Thu Apr 22nd 2021, 12:29 am
Visit API ReferenceRelease Notes:

  • This release is not compatible with any previous SDK releases. There are a number of breaking changes both in terms of the SDK API and in terms of the internal systems used by the SDK to perform operations such as synchronization. If you have previously made use of the Ditto SDK and wish to update to this version then note that you will need to delete all existing Ditto data otherwise you will run into errors. If you have existing data that you need to keep then please contact us and we can advise you as to how you can migrate your data.
  • The most notable API breaking changes are:
    • Document IDs are no longer restricted to just strings. You can now create a document ID that is a string, integer, boolean, array, map, or null. This means that when making findByID or insert calls you now need to provide a DittoDocumentID object rather than a string. Similarly, when you access a document's ID it will now return a DittoDocumentID object instead of a string.
    • The start() and stop() functions on the Ditto object have been renamed to startSync() and stopSync() respectively. They now also don't accept any arguments. If you wish to specify which transports you would like the Ditto SDK to make use of (along with any configuration that they might require) you now need to use the setTransportConfig function on the Ditto object, and pass to that a transport config object. The default transports that will be enabled are still the same as they were in previous releases of the SDK though, so if you have no custom requirements then you can simply change your start() call to startSync().
  • Lots of performance improvements and bug fixes.

Installation:
implementation "live.ditto:ditto:1.0.0"
Visit API Reference 1.0.0
Android 1.0.0-alpha9Released Fri Feb 5th 2021, 12:58 am
Visit API ReferenceRelease Notes:

  • Fixed a bug where mDNS advertising may continue after Ditto is stopped.
  • Fixed a hang that could occur creating an attachment fetcher while requesting many attachments at once.
  • Fixed sync failure when there are multiple overlapping subscriptions or live queries with the same query string for the same collection.
  • Fixed a potential crash and other sync failures that could occur under certain conditions.

Installation:
implementation "live.ditto:ditto:1.0.0-alpha9"
Visit API Reference 1.0.0-alpha9
Android 1.0.0-alpha8Released Fri Jan 22nd 2021, 3:09 pm
Visit API ReferenceRelease Notes:

  • Site IDs, which make up part of a Ditto identity object, are now unsigned, 64-bit integers instead of unsigned 32-bit integers.
  • Fix a crash that could occur if an offset with a value greater than the number of matching documents was provided.

Installation:
implementation "live.ditto:ditto:1.0.0-alpha8"
Visit API Reference 1.0.0-alpha8
Android 1.0.0-alpha7Released Mon Jan 4th 2021, 11:12 am
Visit API ReferenceRelease Notes:

  • Synchronized version bump release

Installation:
implementation "live.ditto:dittosynckit:1.0.0-alpha7"
Visit API Reference 1.0.0-alpha7
Android 1.0.0-alpha6Released Tue Dec 15th 2020, 1:00 am
Visit API ReferenceRelease Notes:

  • Performance and stability improvements.
  • Fix default data insertion such that merge semantics are consistent and duplicate data isn't created.

Installation:
implementation "live.ditto:dittosynckit:1.0.0-alpha6"
Visit API Reference 1.0.0-alpha6
Android 1.0.0-alpha5Released Mon Nov 23rd 2020, 4:43 am
Visit API ReferenceRelease Notes:

  • Added a new intermediate security identity for a shared secret key. This is a simplistic authentication mode which is normally only suitable for private apps where all the users and devices are trusted.
  • Fixed an issue that prevented Counter values from syncing correctly
  • Renamed DittoAttachmentStatus to DittoAttachmentFetchEvent and subsequently Incomplete status to Progre ss.

Installation:
implementation "live.ditto:dittosynckit:1.0.0-alpha5"
Visit API Reference 1.0.0-alpha5
Android 1.0.0-alpha4Released Mon Nov 9th 2020, 6:15 pm
Visit API ReferenceRelease Notes:

  • Fix issue where attachments could stop being fetched incorrectly.

Installation:
implementation "live.ditto:dittosynckit:1.0.0-alpha4"
Visit API Reference 1.0.0-alpha4
Android 1.0.0-alpha3Released Wed Nov 4th 2020, 7:46 am
Visit API ReferenceRelease Notes:

  • Added new observeWithNextSignal API to allow the application to control the delivery of the next observe callback ev ent.
  • Fixed several issues related to attachments that could delay sync.
  • Simplified log statements

Installation:
implementation "live.ditto:dittosynckit:1.0.0-alpha3"
Visit API Reference 1.0.0-alpha3
Android 1.0.0-alpha2Released Fri Oct 9th 2020, 9:04 pm
Visit API ReferenceRelease Notes:

  • Decreases the file size of the AAR

Installation:
implementation "live.ditto:dittosynckit:1.0.0-alpha2"
Visit API Reference 1.0.0-alpha2
Android 1.0.0-alpha1Released Thu Oct 8th 2020, 9:23 pm
Visit API ReferenceRelease Notes:

  • Note that this is a release with breaking changes and clients using releases in the 1.0 series will not be able to communicate with clients running a version that is anything less than 1.0. This should hopefully not be an issue because this release of the SDK has changed the name to be DittoSyncKit as opposed to DittoKit.
  • Lots of performance improvements and some bug fixes.

Installation:
implementation "live.ditto:dittosynckit:1.0.0-alpha1"
Visit API Reference 1.0.0-alpha1
Android 0.4.0-alpha6Released Fri Sep 25th 2020, 3:16 am
Visit API ReferenceRelease Notes:

  • Fixed an issue where extensive writes can cause a session time-out

Installation:
implementation "live.ditto:dittokit:0.4.0-alpha6"
Visit API Reference 0.4.0-alpha6
Android 0.4.0-alpha5Released Wed Sep 23rd 2020, 9:10 pm
Visit API ReferenceRelease Notes:

  • Fixed finalizer logic with the following types:
    • DittoAttachment
    • DittoAttachmentFetcher
    • DittoKit
    • DittoLiveQuery
    • DittoSubscription

Installation:
implementation "live.ditto:dittokit:0.4.0-alpha5"
Visit API Reference 0.4.0-alpha5
Android 0.4.0-alpha4Released Fri Sep 18th 2020, 2:12 am
Visit API ReferenceRelease Notes:

  • Fixes an issue where deletes might not propagate correctly in a multi-hop mesh

Installation:
implementation "live.ditto:dittokit:0.4.0-alpha4"
Visit API Reference 0.4.0-alpha4
Android 0.4.0-alpha3Released Fri Sep 11th 2020, 9:34 am
Visit API ReferenceRelease Notes:

  • Fixed an error where presence data was failing to be deserialized properly.

Installation:
implementation "live.ditto:dittokit:0.4.0-alpha3"
Visit API Reference 0.4.0-alpha3
Android 0.4.0-alpha2Released Thu Sep 10th 2020, 8:16 am
Visit API ReferenceRelease Notes:

From the 0.4.0-alpha1 release notes:

  • Note that this is a release with breaking changes, even just in terms of clients running 0.4.0 not being able to communicate with clients running 0.3.X releases.
  • Fixes for memory leaks.
  • Performance improvements.

Installation:
implementation "live.ditto:dittokit:0.4.0-alpha2"
Visit API Reference 0.4.0-alpha2
Android 0.4.0-alpha1Released Wed Sep 9th 2020, 9:42 pm
Visit API ReferenceRelease Notes:

  • Note that this is a release with breaking changes, even just in terms of clients running 0.4.0 not being able to communicate with clients running 0.3.X releases.
  • Fixes for memory leaks.
  • Performance improvements.

Installation:
implementation "live.ditto:dittokit:0.4.0-alpha1"
Visit API Reference 0.4.0-alpha1
Android 0.3.5Released Fri Sep 4th 2020, 8:04 pm
Visit API ReferenceRelease Notes:

  • Fixed an issue where inserting data as default data (setting the isDefault parameter to true) could lead to data that would not merge as expected.

Installation:
implementation "live.ditto:dittokit:0.3.5"
Visit API Reference 0.3.5
Android 0.3.4Released Mon Aug 10th 2020, 3:13 pm
Visit API ReferenceRelease Notes:

  • Fixed a bug with query compilation where integer literals in the query would lead to a query compilation failure.

Installation:
implementation "live.ditto:dittokit:0.3.4"
Visit API Reference 0.3.4
Android 0.3.3Released Fri Aug 7th 2020, 3:31 am
Visit API ReferenceRelease Notes:

  • Android-specific performance improvements for large collections
  • Java: DittoDocument's "value" field has been replaced with "getValue()"

Installation:
implementation "live.ditto:dittokit:0.3.3"
Visit API Reference 0.3.3
Android 0.3.2Released Thu Jul 30th 2020, 5:32 am
Visit API ReferenceRelease Notes:

  • Fixes bug where Android phones sometimes do not activate Bluetooth if it is enabled after launching the app

Installation:
implementation "live.ditto:dittokit:0.3.2"
Visit API Reference 0.3.2
Android 0.3.1Released Thu Jul 16th 2020, 1:36 am
Visit API ReferenceRelease Notes:

  • Added a new LAN transport mode WiFiFixedPort to listen for connections on a known port.
  • Android phones using the Bluetooth transport will no longer change their device name.
  • DittoKit has a new sdkVersion property describing which build of DittoKit is installed. Please include this information in support requests.
  • Fixed bug where an attachment transfer may not resume after being interrupted.
  • Fixed bug where a long-lasting Bluetooth connection may spontaneously disconnect and reconnect.
  • Improvements to reconnection speed.

Installation:
implementation "live.ditto:dittokit:0.3.1"
Visit API Reference 0.3.1
Android 0.3.0Released Thu Jun 4th 2020, 10:39 am
Visit API ReferenceRelease Notes:

  • DittoKit 0.3 includes incompatible changes to data storage and networking - please uninstall all apps based on DittoKit 0.2 first
  • Support for attaching large binary files to documents and syncing them on demand
  • When creating documents you can no longer specify the id by providing an _id key. Instead you must specify an id as an extra argument to the insert function, if you want to explicitly set a document’s id
  • A document’s id property is now id rather than _id
  • The parameters for a live query callback have changed
  • The sort order for a query is now controlled by an ascending/descending enum
  • Fixed crash when inserting large amounts of data into a document
  • Faster sync performance
  • Ability to connect to a peer at a known address using the Server transport type

Installation:
implementation "live.ditto:dittokit:0.3.0"
Visit API Reference 0.3.0
Android 0.2.3Released Tue May 5th 2020, 9:42 am
Visit API ReferenceRelease Notes:

  • Fixed an issue where DittoKit would not work in 32-bit contexts.

Installation:
implementation "live.ditto:dittokit:0.2.3"
Visit API Reference 0.2.3
Android 0.2.2Released Fri Feb 14th 2020, 12:11 am
Visit API ReferenceRelease Notes:

  • Reduced minimum Android SDK API level from 26 to 25 to support Android 7.1 devices.

Installation:
implementation "live.ditto:dittokit:0.2.2"
Visit API Reference 0.2.2
Android 0.2.1Released Thu Jan 9th 2020, 6:28 am
Visit API ReferenceRelease Notes:

  • Fixes a crash that can occur when calling stop().

Installation:
implementation "live.ditto:dittokit:0.2.1"
Visit API Reference 0.2.1
Android 0.2.0Released Tue Dec 17th 2019, 4:49 pm
Visit API ReferenceRelease Notes:

  • Improved query results performance
  • Fixed two bugs that could lead to a crash
  • Many networking improvements to speed up sync on iOS and Android

Note: SyncKit 0.2 is incompatible with version 0.1.

Installation:
implementation "live.ditto:dittokit:0.2.0"
Visit API Reference 0.2.0
Android 0.1.3Released Tue Oct 8th 2019, 12:37 pm
Visit API ReferenceRelease Notes:

  • Improved handling of retrieving numeric fields from documents
  • Fixes a bug where observe would not create a subscription

Installation:
implementation "live.ditto:dittokit:0.1.3"
Visit API Reference 0.1.3
C++ 1.0.8Released Mon Aug 2nd 2021, 4:19 pm
Visit API ReferenceRelease Notes:

  • Added a Linux x86_64 version of the C++ to the group of published C++ SDKs.
  • Improved debug logging.

Visit API Reference 1.0.8
C++ 1.0.7Released Thu Jul 22nd 2021, 11:38 pm
Visit API ReferenceRelease Notes:

  • Improve SDK API documentation extensively
  • Fix crash that can occur if a Ditto Identity is passed by value
  • Fix bug where sync may fail if an unusually long deviceName is configured

Visit API Reference 1.0.7
C++ 1.0.6Released Thu Jul 8th 2021, 6:22 pm
Visit API ReferenceRelease Notes:

  • Add value accessor on DocumentPath, MutableDocumentPath, and DocumentIdPath types to allow accessing a nested value in a document/ID as a nlohmann::json.

Visit API Reference 1.0.6
C++ 1.0.5Released Fri Jun 25th 2021, 10:36 pm
Visit API ReferenceRelease Notes:

  • Added a new find function that accepts a query containing placeholders in the form of $args.my_arg along with a map of query arguments in the form of { "my_arg": "some value" }. The placeholders in the query will be replaced by a query-appropriate representation of the relevant value from the map of query arguments.

    For example, a query of color == $args.color with a query arguments map of { "color": "red" } would internally be treated as a query of: color == "red".

  • Added the ability to get a hash and/or a mnemonic (string) representation of the matching documents from a live query event. This means you can do something like this:

    auto live_query = collection.find_all().observe(LiveQueryEventHandler{
          [&](std::vector<Document> docs, LiveQueryEvent event) {
              event.hash(docs); // e.g. `1950015808188223905`
              event.hash_mnemonic(docs); // e.g. `locate-quality-tina--helena-remote-cat`
              // ...
        });
    
  • Fix for using floats in queries.

  • Accessing the store property of a Ditto instance will no longer throw an error if you have not yet activated your Ditto instance with a valid license token.

  • Deprecated set_access_license and added a new function, set_license_token, which will throw an appropriate exception if your provided license token is expired or invalid somehow.

  • Deprecated start_sync and added a new function, try_start_sync, which will throw an exception if your Ditto instance hasn't yet been activated via a successful call to set_license_token.

Visit API Reference 1.0.5
C++ 1.0.4Released Fri Jun 11th 2021, 10:36 pm
Visit API ReferenceRelease Notes:

  • Synchronized version bump release

Visit API Reference 1.0.4
C++ 1.0.3Released Thu Jun 10th 2021, 4:34 pm
Visit API ReferenceRelease Notes:

  • Synchronized version bump release

Visit API Reference 1.0.3
C++ 1.0.2Released Thu May 20th 2021, 9:39 pm
Visit API ReferenceRelease Notes:

  • Add support for subscripting DocumentIds in order to get nested values when a document ID is based on an array or a map.
  • Deprecated .to_native() on DocumentId. You should use .value() instead.

Visit API Reference 1.0.2
C++ 1.0.1Released Tue May 4th 2021, 4:02 pm
Visit API ReferenceRelease Notes:

  • If you provide an invalid query then you will now get a better error message.

Visit API Reference 1.0.1
C++ 1.0.0Released Thu Apr 22nd 2021, 12:29 am
Visit API ReferenceRelease Notes:

  • This release is not compatible with any previous SDK releases. There are a number of breaking changes both in terms of the SDK API and in terms of the internal systems used by the SDK to perform operations such as synchronization. If you have previously made use of the Ditto SDK and wish to update to this version then note that you will need to delete all existing Ditto data otherwise you will run into errors. If you have existing data that you need to keep then please contact us and we can advise you as to how you can migrate your data.
  • The most notable API breaking changes are:
    • Document IDs are no longer restricted to just strings. You can now create a document ID that is a string, integer, boolean, array, map, or null. This means that when making find_by_id or insert calls you now need to provide a DocumentId object rather than a string. Similarly, when you access a document's ID it will now return a DocumentId object instead of a string.
    • The start() and stop() functions on the Ditto object have been renamed to start_sync() and stop_sync() respectively. They now also don't accept any arguments. If you wish to specify which transports you would like the Ditto SDK to make use of (along with any configuration that they might require) you now need to use the set_transport_config function on the Ditto object, and pass to that a transport config object. The default transports that will be enabled are still the same as they were in previous releases of the SDK though, so if you have no custom requirements then you can simply change your start() call to start_sync().
  • Lots of performance improvements and bug fixes.

Visit API Reference 1.0.0
C++ 1.0.0-alpha9Released Fri Feb 5th 2021, 12:58 am
Visit API ReferenceRelease Notes:

  • Fixed a bug where mDNS advertising may continue after Ditto is stopped.
  • Fixed a hang that could occur creating an attachment fetcher while requesting many attachments at once.
  • Fixed sync failure when there are multiple overlapping subscriptions or live queries with the same query string for the same collection.
  • Fixed a potential crash and other sync failures that could occur under certain conditions.

Visit API Reference 1.0.0-alpha9
C++ 1.0.0-alpha8Released Fri Jan 22nd 2021, 3:09 pm
Visit API ReferenceRelease Notes:

  • Site IDs, which make up part of a Ditto identity object, are now unsigned, 64-bit integers instead of unsigned 32-bit integers.
  • Fix a crash that could occur if an offset with a value greater than the number of matching documents was provided.

Visit API Reference 1.0.0-alpha8
C++ 1.0.0-alpha7Released Mon Jan 4th 2021, 11:12 am
Visit API ReferenceRelease Notes:

  • Synchronized version bump release

Visit API Reference 1.0.0-alpha7
C++ 1.0.0-alpha6Released Tue Dec 15th 2020, 1:00 am
Visit API ReferenceRelease Notes:

  • Performance and stability improvements.
  • Fix default data insertion such that merge semantics are consistent and duplicate data isn't created.
  • Fixed a bug where documents containing attachments syncing to an instance of the C++ SDK could lead to a crash.
  • Upgrade nlohmann json header from 3.7.0 to 3.9.1.
  • Added set_custom_log_cb and set_log_file method calls to Log class to allow provision of a custom logging callback function, and a file path that logs should be directed to.

Visit API Reference 1.0.0-alpha6
C++ 1.0.0-alpha5Released Mon Nov 23rd 2020, 9:22 pm
Visit API ReferenceRelease Notes:

  • Added a new intermediate security identity for a shared secret key. This is a simplistic authentication mode which is normally only suitable for private apps where all the users and devices are trusted.
  • Fixed an issue that prevented Counter values from syncing correctly
  • Renamed DittoAttachmentStatus to DittoAttachmentFetchEvent and subsequently Incomplete status to Progre ss.

Visit API Reference 1.0.0-alpha5
C++ 0.1.0Released Thu Dec 5th 2019, 4:36 pm
Visit API ReferenceRelease Notes:

  • Initial release of the SDK

Visit API Reference 0.1.0
.NET 1.0.10Released Fri Sep 10th 2021, 4:21 pm
Visit API ReferenceRelease Notes:

  • Fix to stop a change in site ID from leading to an unnecessary error.
  • Improve handling of persisted authentication data. Note that this might lead to a one-off change to a peer's site ID if you weren't and continue to not be specifying an explicit site ID when creating your identity.

Installation:

Command Line

Install-Package Ditto -Version 1.0.10

PackageReference

<PackageReference Include="Ditto" Version=1.0.10" />
Visit API Reference 1.0.10
.NET 1.0.9Released Fri Sep 3rd 2021, 10:38 pm
Visit API ReferenceRelease Notes:

  • Fixed an issue where Ditto.dll would fail to be loaded.
  • Updated the SharedKey identity to allow a custom working directory to be provided.
  • Fixed default construction of DittoIdentity in new Ditto().
  • Added support for getting information about all of the collections that the device is aware of. This is achieved by accessing collections() through the store object and then using the same sort of API used when getting documents in collections, i.e. Exec/Observe/etc.
  • Added multicast as a transport option to the LAN config part of TransportConfig.
  • Added new identity types: Online and OnlinePlayground. An Online identity should be used when running Ditto in secure production mode, logging on to Ditto Cloud, or using an on-premises authentication server. User permissions are centrally managed. Sync will not work until a successful login has occurred. An OnlinePlayground identity should be used when you want to test a Ditto Cloud app without authentication ("Playground mode"). This mode offers no security and must only be used for development.
  • The Production identity has been renamed to Manual.
  • Added a DittoAuthenticator type, accessible via the Ditto object, which allows you to perform login operations when you're using an Online identity.
  • Similarly, added a DittoAuthenticationDelegate type that needs to be used when using an Online identity.
  • Report an error if more than one Ditto instance is started using the same working directory.

Installation:

Command Line

Install-Package Ditto -Version 1.0.9

PackageReference

<PackageReference Include="Ditto" Version=1.0.9" />
Visit API Reference 1.0.9
.NET 1.0.8Released Mon Aug 2nd 2021, 4:19 pm
Visit API ReferenceRelease Notes:

  • Improved debug logging.

Installation:

Command Line

Install-Package Ditto -Version 1.0.8

PackageReference

<PackageReference Include="Ditto" Version=1.0.8" />
Visit API Reference 1.0.8
.NET 1.0.7Released Thu Jul 22nd 2021, 11:38 pm
Visit API ReferenceRelease Notes:

  • Fix bug where sync may fail if an unusually long deviceName is configured

Installation:

Command Line

Install-Package Ditto -Version 1.0.7

PackageReference

<PackageReference Include="Ditto" Version=1.0.7" />
Visit API Reference 1.0.7
.NET 1.0.6Released Thu Jul 8th 2021, 6:22 pm
Visit API ReferenceRelease Notes:

  • Add Value accessor on DittoDocumentPath, DittoMutableDocumentPath, and DittoDocumentIDPath types to allow accessing a nested value in a document/ID as an object.

Installation:

Command Line

Install-Package Ditto -Version 1.0.6

PackageReference

<PackageReference Include="Ditto" Version=1.0.6" />
Visit API Reference 1.0.6
.NET 1.0.5Released Fri Jun 25th 2021, 10:36 pm
Visit API ReferenceRelease Notes:

  • Added a new find function that accepts a query containing placeholders in the form of $args.my_arg along with a map of query arguments in the form of { "my_arg": "some value" }. The placeholders in the query will be replaced by a query-appropriate representation of the relevant value from the map of query arguments.

    For example, a query of color == $args.color with a query arguments map of { "color": "red" } would internally be treated as a query of: color == "red".

  • Added the ability to get a hash and/or a mnemonic (string) representation of the matching documents from a live query event. This means you can do something like this:

    var liveQuery = collection.FindAll().Observe((docs, event) =>
    {
        event.Hash(docs); // e.g. `1950015808188223905`
        event.HashMnemonic(docs); // e.g. `locate-quality-tina--helena-remote-cat`
        // ...
    });
    
  • Fix for using floats in queries.

  • Accessing the store property of a Ditto instance will no longer throw an error if you have not yet activated your Ditto instance with a valid license token.

  • Deprecated SetAccessLicense and added a new function, SetLicenseToken, which will throw an appropriate exception if your provided license token is expired or invalid somehow.

  • Deprecated StartSync and added a new function, TryStartSync, which will throw an exception if your Ditto instance hasn't yet been activated via a successful call to SetLicenseToken.

Installation:

Command Line

Install-Package Ditto -Version 1.0.5

PackageReference

<PackageReference Include="Ditto" Version=1.0.5" />
Visit API Reference 1.0.5
.NET 1.0.4Released Fri Jun 11th 2021, 10:36 pm
Visit API ReferenceRelease Notes:

  • Synchronized version bump release

Installation:

Command Line

Install-Package Ditto -Version 1.0.4

PackageReference

<PackageReference Include="Ditto" Version=1.0.4" />
Visit API Reference 1.0.4
.NET 1.0.3Released Thu Jun 10th 2021, 4:34 pm
Visit API ReferenceRelease Notes:

  • Synchronized version bump release

Installation:

Command Line

Install-Package Ditto -Version 1.0.3

PackageReference

<PackageReference Include="Ditto" Version=1.0.3" />
Visit API Reference 1.0.3
.NET 1.0.2Released Thu May 20th 2021, 9:39 pm
Visit API ReferenceRelease Notes:

  • Add support for subscripting DITDocumentIDs in order to get nested values when a document ID is based on an array or a dictionary.
  • Deprecated .ToNative() on DittoDocumentID. You should use .Value instead.

Installation:

Command Line

Install-Package Ditto -Version 1.0.2

PackageReference

<PackageReference Include="Ditto" Version=1.0.2" />
Visit API Reference 1.0.2
.NET 1.0.1Released Tue May 4th 2021, 4:02 pm
Visit API ReferenceRelease Notes:

  • If you provide an invalid query then you will now get a better error message.

Installation:

Command Line

Install-Package Ditto -Version 1.0.1

PackageReference

<PackageReference Include="Ditto" Version=1.0.1" />
Visit API Reference 1.0.1
.NET 1.0.0Released Thu Apr 22nd 2021, 12:29 am
Visit API ReferenceRelease Notes:

  • This release is not compatible with any previous SDK releases. There are a number of breaking changes both in terms of the SDK API and in terms of the internal systems used by the SDK to perform operations such as synchronization. If you have previously made use of the Ditto SDK and wish to update to this version then note that you will need to delete all existing Ditto data otherwise you will run into errors. If you have existing data that you need to keep then please contact us and we can advise you as to how you can migrate your data.
  • The most notable API breaking changes are:
    • Document IDs are no longer restricted to just strings. You can now create a document ID that is a string, integer, boolean, array, map, or null. This means that when making FindByID or insert calls you now need to provide a DittoDocumentID object rather than a string. Similarly, when you access a document's ID it will now return a DittoDocumentID object instead of a string.
    • The Start() and Stop() functions on the Ditto object have been renamed to StartSync() and StopSync() respectively. They now also don't accept any arguments. If you wish to specify which transports you would like the Ditto SDK to make use of (along with any configuration that they might require) you now need to use the SetTransportConfig function on the Ditto object, and pass to that a transport config object. The default transports that will be enabled are still the same as they were in previous releases of the SDK though, so if you have no custom requirements then you can simply change your Start() call to StartSync().
  • Lots of performance improvements and bug fixes.

Installation:

Command Line

Install-Package Ditto -Version 1.0.0

PackageReference

<PackageReference Include="Ditto" Version=1.0.0" />
Visit API Reference 1.0.0
.NET 1.0.0-alpha9Released Fri Feb 5th 2021, 12:58 am
Visit API ReferenceRelease Notes:

  • The exact version of the Ditto SDK can now be retrieved using the ditto.SDKVersion property.
  • Fixed a bug where mDNS advertising may continue after Ditto is stopped.
  • Fixed a hang that could occur creating an attachment fetcher while requesting many attachments at once.
  • Fixed sync failure when there are multiple overlapping subscriptions or live queries with the same query string for the same collection.
  • Fixed a potential crash and other sync failures that could occur under certain conditions.

Installation:

Command Line

Install-Package Ditto -Version 1.0.0-alpha9

PackageReference

<PackageReference Include="Ditto" Version=1.0.0-alpha9" />
Visit API Reference 1.0.0-alpha9
.NET 1.0.0-alpha8Released Fri Jan 22nd 2021, 3:09 pm
Visit API ReferenceRelease Notes:

  • Site IDs, which make up part of a Ditto identity object, are now unsigned, 64-bit integers instead of unsigned 32-bit integers.
  • Fix a crash that could occur if an offset with a value greater than the number of matching documents was provided.

Installation:

Command Line

Install-Package Ditto -Version 1.0.0-alpha8

PackageReference

<PackageReference Include="Ditto" Version=1.0.0-alpha8" />
Visit API Reference 1.0.0-alpha8
.NET 1.0.0-alpha7Released Mon Jan 4th 2021, 11:12 am
Visit API ReferenceRelease Notes:

  • Synchronized version bump release

Installation:

Command Line

Install-Package Ditto -Version 1.0.0-alpha7

PackageReference

<PackageReference Include="Ditto" Version=1.0.0-alpha7" />
Visit API Reference 1.0.0-alpha7
.NET 1.0.0-alpha6Released Tue Dec 15th 2020, 1:00 am
Visit API ReferenceRelease Notes:

  • Performance and stability improvements.
  • Fix default data insertion such that merge semantics are consistent and duplicate data isn't created.

Installation:

Command Line

Install-Package Ditto -Version 1.0.0-alpha6

PackageReference

<PackageReference Include="Ditto" Version=1.0.0-alpha6" />
Visit API Reference 1.0.0-alpha6
.NET 1.0.0-alpha5Released Mon Nov 23rd 2020, 8:30 pm
Visit API ReferenceRelease Notes:

  • Added a new intermediate security identity for a shared secret key. This is a simplistic authentication mode which is normally only suitable for private apps where all the users and devices are trusted.
  • Fixed an issue that prevented Counter values from syncing correctly
  • Renamed DittoAttachmentStatus to DittoAttachmentFetchEvent and subsequently Incomplete status to Progre ss.

Installation:

Command Line

Install-Package Ditto -Version 1.0.0-alpha5

PackageReference

<PackageReference Include="Ditto" Version=1.0.0-alpha5" />
Visit API Reference 1.0.0-alpha5
.NET 1.0.0-alpha4Released Mon Nov 9th 2020, 6:02 pm
Visit API ReferenceRelease Notes:

  • Fix issue where attachments could stop being fetched incorrectly.
  • Introduce a DittoLogger class with various log-related functionality to make logging easier and more feature-rich.

Installation:

Command Line

Install-Package Ditto -Version 1.0.0-alpha4

PackageReference

<PackageReference Include="Ditto" Version=1.0.0-alpha4" />
Visit API Reference 1.0.0-alpha4
.NET 1.0.0-alpha3Released Wed Nov 4th 2020, 8:48 am
Visit API ReferenceRelease Notes:

  • Added new observeWithNextSignal API to allow the application to control the delivery of the next observe callback ev ent.
  • Fixed several issues related to attachments that could delay sync.
  • Simplified log statements

Installation:

Command Line

Install-Package Ditto -Version 1.0.0-alpha3

PackageReference

<PackageReference Include="Ditto" Version=1.0.0-alpha3" />
Visit API Reference 1.0.0-alpha3
.NET 1.0.0-alpha2Released Wed Oct 14th 2020, 6:01 pm
Visit API ReferenceRelease Notes:

Fixed several potential issues with attachment fetching that may result in the fetch callback not firing.

Installation:

Command Line

Install-Package Ditto -Version 1.0.0-alpha2

PackageReference

<PackageReference Include="Ditto" Version=1.0.0-alpha2" />
Visit API Reference 1.0.0-alpha2
.NET 1.0.0-alpha1Released Fri Oct 9th 2020, 5:53 pm
Visit API ReferenceRelease Notes:

  • Note that this is a release with breaking changes and clients using releases in the 1.0 series will not be able to communicate with clients running a version that is anything less than 1.0. This should hopefully not be an issue because this release of the SDK has changed the name to be DittoSyncKit as opposed to DittoSharp and the namespace has gone from DittoSharp to Ditto.SyncKit.
  • Lots of performance improvements and some bug fixes.

Installation:

Command Line

Install-Package Ditto -Version 1.0.0-alpha1

PackageReference

<PackageReference Include="Ditto" Version=1.0.0-alpha1" />
Visit API Reference 1.0.0-alpha1
.NET 0.4.0-alpha5Released Fri Sep 25th 2020, 4:21 am
Visit API ReferenceRelease Notes:

  • Fixed an issue where extensive writes can cause a session time-out

Installation:

Command Line

Install-Package Ditto -Version 0.4.0-alpha5

PackageReference

<PackageReference Include="Ditto" Version=0.4.0-alpha5" />
Visit API Reference 0.4.0-alpha5
.NET 0.4.0-alpha4Released Fri Sep 18th 2020, 1:01 am
Visit API ReferenceRelease Notes:

  • Fixes an issue where deletes might not propagate correctly in a multi-hop mesh

Installation:

Command Line

Install-Package Ditto -Version 0.4.0-alpha4

PackageReference

<PackageReference Include="Ditto" Version=0.4.0-alpha4" />
Visit API Reference 0.4.0-alpha4
.NET 0.4.0-alpha3Released Wed Sep 16th 2020, 11:24 pm
Visit API ReferenceRelease Notes:

  • Fix disposal/clean-up of DittoAttachmentFetcher objects.
  • Add support for Linux 64-bit platforms.

Installation:

Command Line

Install-Package Ditto -Version 0.4.0-alpha3

PackageReference

<PackageReference Include="Ditto" Version=0.4.0-alpha3" />
Visit API Reference 0.4.0-alpha3
.NET 0.4.0-alpha2Released Fri Sep 11th 2020, 9:25 am
Visit API ReferenceRelease Notes:

  • Fix a potential crash when working with attachments.

Installation:

Command Line

Install-Package Ditto -Version 0.4.0-alpha2

PackageReference

<PackageReference Include="Ditto" Version=0.4.0-alpha2" />
Visit API Reference 0.4.0-alpha2
.NET 0.4.0-alpha1Released Wed Sep 9th 2020, 9:18 pm
Visit API ReferenceRelease Notes:

  • Note that this is a release with breaking changes, even just in terms of clients running 0.4.0 not being able to communicate with clients running 0.3.X releases.
  • Fixes for memory leaks.
  • Performance improvements.

Installation:

Command Line

Install-Package Ditto -Version 0.4.0-alpha1

PackageReference

<PackageReference Include="Ditto" Version=0.4.0-alpha1" />
Visit API Reference 0.4.0-alpha1
.NET 0.3.5-alpha1Released Fri Sep 4th 2020, 8:25 pm
Visit API ReferenceRelease Notes:

  • Fixed an issue where inserting data as default data (setting the isDefault parameter to true) could lead to data that would not merge as expected.

Installation:

Command Line

Install-Package Ditto -Version 0.3.5-alpha1

PackageReference

<PackageReference Include="Ditto" Version=0.3.5-alpha1" />
Visit API Reference 0.3.5-alpha1
.NET 0.3.4-alpha1Released Tue Aug 11th 2020, 7:45 am
Visit API ReferenceRelease Notes:

  • Fixed a bug with query compilation where integer literals in the query would lead to a query compilation failure.

Installation:

Command Line

Install-Package Ditto -Version 0.3.4-alpha1

PackageReference

<PackageReference Include="Ditto" Version=0.3.4-alpha1" />
Visit API Reference 0.3.4-alpha1
.NET 0.3.1-alpha1Released Mon Jul 20th 2020, 9:11 pm
Visit API ReferenceRelease Notes:

Compatibility update for 0.3.1 releases.

Installation:

Command Line

Install-Package Ditto -Version 0.3.1-alpha1

PackageReference

<PackageReference Include="Ditto" Version=0.3.1-alpha1" />
Visit API Reference 0.3.1-alpha1
.NET 0.1.1-alpha2Released Mon Jul 20th 2020, 8:48 am
Visit API ReferenceRelease Notes:

Further compatibility updates.

Installation:

Command Line

Install-Package Ditto -Version 0.1.1-alpha2

PackageReference

<PackageReference Include="Ditto" Version=0.1.1-alpha2" />
Visit API Reference 0.1.1-alpha2
.NET 0.1.1-alpha1Released Sat Jul 18th 2020, 3:38 pm
Visit API ReferenceRelease Notes:

Compatibility update.

Installation:

Command Line

Install-Package Ditto -Version 0.1.1-alpha1

PackageReference

<PackageReference Include="Ditto" Version=0.1.1-alpha1" />
Visit API Reference 0.1.1-alpha1
.NET 0.1.0-alpha4Released Tue Jun 30th 2020, 9:37 am
Visit API ReferenceRelease Notes:

  • Added the licenses of the dependencies used by the SDK to the NuGet package

Installation:

Command Line

Install-Package Ditto -Version 0.1.0-alpha4

PackageReference

<PackageReference Include="Ditto" Version=0.1.0-alpha4" />
Visit API Reference 0.1.0-alpha4
.NET 0.1.0-alpha3Released Mon Jun 29th 2020, 9:04 pm
Visit API ReferenceRelease Notes:

  • Sorted out the packaging so that installing the SDK doesn't require any extra actions after installation.

Installation:

Command Line

Install-Package Ditto -Version 0.1.0-alpha3

PackageReference

<PackageReference Include="Ditto" Version=0.1.0-alpha3" />
Visit API Reference 0.1.0-alpha3
JS 1.0.10Released Fri Sep 10th 2021, 4:21 pm
Visit API ReferenceRelease Notes:

  • Fix to stop a change in site ID from leading to an unnecessary error.
  • Improve handling of persisted authentication data. Note that this might lead to a one-off change to a peer's site ID if you weren't and continue to not be specifying an explicit site ID when creating your identity.

Installation:
npm install --save @dittolive/ditto
Visit API Reference 1.0.10
JS 1.0.9Released Fri Sep 3rd 2021, 10:38 pm
Visit API ReferenceRelease Notes:

  • Added support for attachments.
  • When calling insert you should no longer nest the document's content under the value key. Instead the object that you provide to insert will directly be used to form the contents of the document.
  • Similarly, when using observe or exec functionality you will no longer have a Document type returned to you and instead will have a DocumentLike object, which represents the document's contents, returned to you. You can directly subscript this object to get values at the specified key path of the document.
  • Enabled support for loading ditto.wasm from Ditto's CDN.
  • Allow passing a "raw" primitive type, instead of requiring a DocumentID, to the insert and findByID functions.
  • Added support for getting information about all of the collections that the device is aware of. This is achieved by accessing collections() through the store object and then using the same sort of API used when getting documents in collections, i.e. exec/observe/etc.
  • Added multicast as a transport option to the LAN config part of TransportConfig.
  • Added new identity types: Online and OnlinePlayground. An Online identity should be used when running Ditto in secure production mode, logging on to Ditto Cloud, or using an on-premises authentication server. User permissions are centrally managed. Sync will not work until a successful login has occurred. An OnlinePlayground identity should be used when you want to test a Ditto Cloud app without authentication ("Playground mode"). This mode offers no security and must only be used for development.
  • The Production identity has been renamed to Manual.
  • Added an Authenticator type, accessible via the Ditto object, which allows you to perform login operations when you're using an Online identity.
  • Similarly, added an AuthenticationHandler type that needs to be used when using an Online identity.
  • Report an error if more than one Ditto instance is started using the same working directory.

Installation:
npm install --save @dittolive/ditto
Visit API Reference 1.0.9
JS 1.0.8Released Mon Aug 2nd 2021, 4:19 pm
Visit API ReferenceRelease Notes:

  • Initial public Beta release of the JS SDK with the following constraints:

    • Web only for now. Node & Electron support will follow shortly.
    • Counters work only partially. Full support is in development.
    • No support for batch operations yet.
    • No support for attachments yet.
  • Known bugs and issues:

    • runGarbageCollection() doesn't work and throws an exception.
    • observeWithNextSignal() & observeLocalWithNextSignal() do not work and throw an exception.
    • Longer running queries might block the JS event loop.

Installation:
npm install --save @dittolive/ditto
Visit API Reference 1.0.8