Realm 10.10.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Realm --version 10.10.0
NuGet\Install-Package Realm -Version 10.10.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Realm" Version="10.10.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Realm --version 10.10.0
#r "nuget: Realm, 10.10.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Realm as a Cake Addin
#addin nuget:?package=Realm&version=10.10.0

// Install Realm as a Cake Tool
#tool nuget:?package=Realm&version=10.10.0

Realm is a mobile database: a replacement for SQLite

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (39)

Showing the top 5 NuGet packages that depend on Realm:

Package Downloads
ppy.osu.Game

Package Description

Iridium360.Connect.Framework

This framework allows you to bind your Android or iOS device with i360RockSTAR tracker

ItEnterprise.Common.CoreStandard

ItEnterprise Common.CoreStandard for Xamarin Forms

Arc4u.Standard.Diagnostics.Serilog.Sinks.RealmDb

Arc4u Diagnostics Serilog Sink to RealmDB

ItEnterprise.WmsStandard

ItEnterprise WmsStandard for Xamarin Forms

GitHub repositories (5)

Showing the top 5 popular GitHub repositories that depend on Realm:

Repository Stars
ppy/osu
rhythm is just a *click* away!
realm/realm-dotnet
Realm is a mobile database: a replacement for SQLite & ORMs
sgermosen/xReader
XML, NEWS, RSS & Scrapping Reader maked in Xamarin, for educational purpose.
realm/realm-draw
The official Realm Draw app used in promotional videos
dsa28s/windows-hangul-clock
Hangul Clock for Windows Desktop Widget
Version Downloads Last updated
12.0.0 2,948 4/17/2024
11.7.0 51,738 2/5/2024
11.6.1 60,834 11/17/2023
11.6.0 12,514 11/4/2023
11.5.0 165,994 9/16/2023
11.4.0 24,175 8/16/2023
11.3.0 32,163 7/26/2023
11.2.0 14,892 7/8/2023
11.1.2 97,002 6/20/2023
11.1.1 5,771 6/19/2023
11.1.0 2,609 6/17/2023
11.0.0 36,946 5/8/2023
10.21.1 33,193 4/21/2023
10.21.0 22,376 3/24/2023
10.20.0 86,330 2/10/2023
10.19.0 32,371 1/6/2023
10.18.0 124,582 11/2/2022
10.17.0 85,829 10/6/2022
10.16.0 12,608 10/3/2022
10.15.1 104,349 8/8/2022
10.15.0 5,526 8/5/2022
10.14.0 171,875 6/2/2022
10.13.0 26,929 5/18/2022
10.12.0 18,076 5/5/2022
10.11.2 34,675 4/21/2022
10.11.1 20,642 3/31/2022
10.11.0 5,414 3/28/2022
10.10.0 94,568 2/28/2022
10.9.0 73,508 1/21/2022
10.8.0 37,669 1/17/2022
10.7.1 101,806 11/20/2021
10.7.0 7,111 11/10/2021
10.6.0 158,060 9/30/2021
10.5.1 17,996 9/22/2021
10.5.0 30,526 9/9/2021
10.4.1 3,681 9/3/2021
10.4.0 11,259 8/31/2021
10.3.0 137,306 7/7/2021
10.2.1 26,676 7/1/2021
10.2.0 26,539 6/15/2021
10.2.0-beta.2 761 5/5/2021
10.2.0-beta.1 350 4/12/2021
10.1.4 19,059 5/12/2021
10.1.3 20,307 4/29/2021
10.1.2 29,374 3/19/2021
10.1.1 22,096 2/25/2021
10.1.0 13,150 2/9/2021
10.0.1 6,834 2/2/2021
10.0.0-beta.6 430 1/26/2021
10.0.0-beta.5 636 1/19/2021
10.0.0-beta.3 1,151 12/10/2020
10.0.0-beta.2 1,464 11/4/2020
10.0.0-beta.1 727 10/16/2020
10.0.0-alpha.43 360 10/9/2020
10.0.0-alpha.34 470 10/4/2020
5.1.3 24,878 2/10/2021
5.1.2 83,574 10/20/2020
5.1.1 27,551 10/2/2020
5.1.0 6,622 9/30/2020
5.0.1 10,720 9/9/2020
4.3.0 270,694 2/5/2020
4.2.0 69,667 10/8/2019
4.1.0 86,398 8/6/2019
4.0.1 20,018 6/27/2019
4.0.0 6,256 6/14/2019
3.4.0 101,140 1/9/2019
3.3.0 26,280 11/8/2018
3.2.1 44,008 9/27/2018
3.2.0 15,192 9/4/2018
3.1.0 32,505 7/4/2018
3.0.0 108,373 4/16/2018
2.2.0 12,699 3/22/2018
2.1.0 54,577 11/13/2017
2.0.0 18,271 10/17/2017
2.0.0-rc1 2,572 10/3/2017
1.6.0 35,392 8/15/2017
1.5.0 17,975 6/20/2017
1.4.0 14,880 5/19/2017
1.3.0 3,722 5/16/2017
1.2.1 7,937 5/1/2017
1.2.0 5,946 4/4/2017
1.1.1 7,497 3/15/2017
1.1.0 3,650 3/3/2017
1.0.4 4,880 2/21/2017
1.0.3 17,054 2/14/2017
0.82.1 18,468 1/27/2017
0.82.0 3,338 1/23/2017
0.81.0 5,428 12/15/2016
0.80.0 11,534 10/27/2016
0.78.1 20,583 9/15/2016
0.78.0 2,744 9/11/2016
0.77.2 5,616 8/11/2016
0.77.1 3,176 7/28/2016
0.76.1 6,070 6/15/2016
0.76.0 3,386 6/9/2016
0.75.0 3,216 6/3/2016
0.74.1 5,789 5/10/2016

## 10.10.0 (2022-02-28)

### Guid representation issue

This release fixes a major bug in the way Guid values are stored in the database. It provides an automatic migration for local (non-synchronized) databases, but extra caution is needed when upgrading an app that uses Sync.

#### **Context**

A Guid is represented by 4 components - `int`, `short`, `short`, and a `byte[8]`. Microsoft's Guids diverge from the UUID spec in that they encode the first three components with the endianness of the system (little-endian for all modern CPUs), while UUIDs encode their components as big-endian. The end result is that the same bytes have a different string representations when interpreted as a `Guid` by the .NET SDK vs when interpreted as a `UUID` by the Realm Database - e.g. `f2952191-a847-41c3-8362-497f92cb7d24` vs `912195f2-47a8-c341-8362-497f92cb7d24` (note the swapping of bytes in the first three components). You can see the issue by opening a database created by the .NET SDK in Realm Studio and inspecting the values for Guid properties.

#### **Fix**

The fix we're providing is to adjust the behavior of the .NET SDK to read/write Guids to the database with big-endian representation. This means that the SDK and the database will consistently display the same values. This has some implications which are described in the Local- and Synchronized Realms sections.

#### **Local Realms**

For local Realms, we're executing a one-time migration the first time the Realm is opened with the new SDK. During this migration, we'll update all Guid fields to big-endian format. This means that their string representation will remain the same, but the value in the database will change to match it. This means that the upgrade process should be seamless, but if you decide to downgrade to an older version of the SDK, you'll see the byte order get flipped. The migration will not execute multiple times, even if you downgrade.

#### **Synchronized Realms**

There's no client migration provided for synchronized Realms. This is because the distributed nature of the system would mean that there will inevitably be a period of inconsistent state. Instead, the values of the `Guid` properties are read as they're already stored in the database, meaning the string representation will be flipped compared to previous versions of the SDK but it will now match the representation in Atlas/Compass/Realm Studio. There are three general groups your app will fall under:
* If you don't care about the string values of Guid properties on the client, then you don't need to do anything. The values will still be unique and valid Guids.
* If you do use the string guid values from the client app - e.g. to correlate user ids with a CMS, but have complete control over your client devices - e.g. because this an internal company app, then it's advised that you execute a one-time migration of the data in Atlas and force all users to upgrade to the latest version of the app.
* If you can't force all users to update at the same time, you can do a live migration by adding an extra property for each Guid property that you have and write a trigger function that will migrate the data between the two. The old version of the app will write to the original property, while the new version will write to the new property and the trigger will convert between the two.

If you are using sync and need to update to the latest version of the SDK but are not ready to migrate your data yet, see the `Opting out` section.

#### **Opting out**

If for some reason, you want to opt out of the fixed behavior, you can temporarily opt out of it by setting the `Realm.UseLegacyGuidRepresentation` property to `true`. This is not recommended but can be used when you need more time to test out the migration while still getting bugfixes and other improvements. Setting it to `true` does two things:
1. It brings back the pre-10.10.0 behavior of reading/writing Guid values with little-endian representation.
1. It disables the migration code for local Realms. Note that it will not revert the migration if you already opened the Realm file when `UseLegacyGuidRepresentation` was set to `false`.

### Enhancements
* Lifted a limitation that would prevent you from changing the primary key of objects during a migration. It is now possible to do it with both the dynamic and the strongly-typed API:
 ```csharp
 var config = new RealmConfiguration
 {
   SchemaVersion = 5,
   MigrationCallback = (migration, oldVersion) =>
   {
     // Increment the primary key value of all Foos
     foreach (var obj in migration.NewRealm.All<Foo>())
     {
       obj.Id = obj.Id + 1000;
     }
   }
 }
 ```
* [Unity] The Realm menu item in the Unity Editor was moved to `Tools/Realm` to reduce clutter and align with other 3rd party editor plugins. (Issue [#2807](https://github.com/realm/realm-dotnet/issues/2807))

### Fixed
* Fixed an issue with xUnit tests that would cause `System.Runtime.InteropServices.SEHException` to be thrown whenever Realm was accessed in a non-async test. (Issue [#1865](https://github.com/realm/realm-dotnet/issues/1865))
* Fixed a bug that would lead to unnecessary metadata allocation when freezing a realm. (Issue [#2789](https://github.com/realm/realm-dotnet/issues/2789))
* Fixed an issue that would cause Realm-managed objects (e.g. `RealmObject`, list, results, and so on) allocated during a migration block to keep the Realm open until they are garbage collected. This had subtle implications, such as being unable to delete the Realm shortly after a migration or being unable to open the Realm with a different configuration. (PR [#2795](https://github.com/realm/realm-dotnet/pull/2795))
* Fixed an issue that prevented Unity3D's IL2CPP compiler to correctly process one of Realm's dependencies. (Issue [#2666](https://github.com/realm/realm-dotnet/issues/2666))
* Fixed the osx runtime path in the Realm NuGet package to also apply to Apple Silicon (universal) architectures (Issue [#2732](https://github.com/realm/realm-dotnet/issues/2732))

### Compatibility
* Realm Studio: 11.0.0 or later.

### Internal
* Using Core 11.8.0