Realm 11.6.0
See the version list below for details.
dotnet add package Realm --version 11.6.0
NuGet\Install-Package Realm -Version 11.6.0
<PackageReference Include="Realm" Version="11.6.0" />
paket add Realm --version 11.6.0
#r "nuget: Realm, 11.6.0"
// Install Realm as a Cake Addin #addin nuget:?package=Realm&version=11.6.0 // Install Realm as a Cake Tool #tool nuget:?package=Realm&version=11.6.0
<picture> <source srcset="./media/logo-dark.svg" media="(prefers-color-scheme: dark)" alt="realm by MongoDB"> <img src="./media/logo.svg" alt="realm by MongoDB"> </picture>
Realm is a mobile database that runs directly on phones, tablets or wearables. It supports all major mobile and desktop operating systems, such as iOS, Android, UWP, macOS, Linux, and Windows. For a full list of supported platforms and their versions, check out the Supported Platforms sub-section in the documentation.
Features
- Mobile-first: Realm is the first database built from the ground up to run directly inside phones, tablets, and wearables.
- Simple: Data is directly exposed as objects and queryable by code, removing the need for ORM's riddled with performance & maintenance issues. Plus, we've worked hard to keep our API down to just a few common classes: most of our users pick it up intuitively, getting simple apps up & running in minutes.
- Modern: Realm supports relationships, generics, vectorization and modern C# idioms.
- Fast: Realm is faster than even raw SQLite on common operations while maintaining an extremely rich feature set.
- Device Sync: Makes it simple to keep data in sync across users, devices, and your backend in real-time. Get started for free with a template application and create the cloud backend.
Getting Started
Model definition
Define a persistable model by inheriting from IRealmObject
. The Realm source generator will generate an implementation for most of the functionality, so you only need to specify the properties you want to persist:
public partial class Person : IRealmObject
{
[PrimaryKey]
public ObjectId Id { get; private set; } = ObjectId.GenerateNewId();
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTimeOffset Birthday { get; set; }
// You can define constructors as usual
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
}
Open a Realm file
Open a Realm instance by calling Realm.GetInstance
:
// You can provide a relative or an absolute path to the Realm file or let
// Realm use the default one.
var realm = Realm.GetInstance("people.realm");
CRUD operations
Add, read, update, and remove objects by calling the corresponding API on the Realm
instance:
// Always mutate the Realm instance in a write transaction
realm.Write(() =>
{
realm.Add(new Person("John", "Smith"));
});
var peopleWithJ = realm.All<Person>().Where(p => p.FirstName.StartsWith("J"));
// All Realm collections and objects are reactive and implement INotifyCollectionChanged/INotifyPropertyChanged
peopleWithJ.AsRealmCollection().CollectionChanged += (s, e) =>
{
// React to notifications
};
For more examples, see the detailed instructions in our User Guide to add Realm to your solution.
Documentation
The documentation can be found at docs.mongodb.com/realm/dotnet/. The API reference is located at docs.mongodb.com/realm-sdks/dotnet/latest/.
Getting Help
- Need help with your code?: Look for previous questions on the #realm tag — or ask a new question. You can also check out our Community Forum where general questions about how to do something can be discussed.
- Have a bug to report? Open an issue. If possible, include the version of Realm, a full log, the Realm file, and a project that shows the issue.
- Have a feature request? Open an issue. Tell us what the feature should do, and why you want the feature.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. 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 | net46 is compatible. 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 is compatible. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios is compatible. |
Xamarin.Mac | xamarinmac is compatible. |
Xamarin.TVOS | xamarintvos is compatible. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Fody (>= 6.8.0)
- Microsoft.CSharp (>= 4.5.0)
- MongoDB.Bson (>= 2.19.1)
- Realm.PlatformHelpers (>= 11.6.0)
- Remotion.Linq (>= 2.2.0)
- System.Buffers (>= 4.5.1)
- System.Dynamic.Runtime (>= 4.3.0)
- System.Memory (>= 4.5.5)
- System.Net.WebSockets.Client (>= 4.3.2)
- System.Runtime.CompilerServices.Unsafe (>= 6.0.0)
- System.Threading.Channels (>= 6.0.0)
-
net6.0
- Fody (>= 6.8.0)
- Microsoft.CSharp (>= 4.5.0)
- MongoDB.Bson (>= 2.19.1)
- Realm.PlatformHelpers (>= 11.6.0)
- Remotion.Linq (>= 2.2.0)
- System.Buffers (>= 4.5.1)
- System.Dynamic.Runtime (>= 4.3.0)
- System.Memory (>= 4.5.5)
- System.Net.WebSockets.Client (>= 4.3.2)
- System.Runtime.CompilerServices.Unsafe (>= 6.0.0)
- System.Threading.Channels (>= 6.0.0)
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
Package Description |
|
ItEnterprise.WmsStandard
ItEnterprise WmsStandard for Xamarin Forms |
GitHub repositories (7)
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.
|
|
Piotrekol/CollectionManager
An extensive tool for creating, editing, and exporting of osu! collections.
|
|
realm/realm-draw
The official Realm Draw app used in promotional videos
|
Version | Downloads | Last updated | |
---|---|---|---|
20.0.0 | 19,916 | 9/9/2024 | |
12.4.1 | 13,082 | 9/16/2024 | |
12.4.0 | 19,393 | 8/25/2024 | |
12.3.0 | 38,325 | 7/20/2024 | |
12.2.0 | 53,005 | 5/22/2024 | |
12.1.0 | 15,726 | 5/1/2024 | |
12.0.0 | 12,805 | 4/17/2024 | |
11.7.0 | 96,990 | 2/5/2024 | |
11.6.1 | 91,178 | 11/17/2023 | |
11.6.0 | 23,690 | 11/4/2023 | |
11.5.0 | 288,936 | 9/16/2023 | |
11.4.0 | 32,738 | 8/16/2023 | |
11.3.0 | 48,922 | 7/26/2023 | |
11.2.0 | 17,443 | 7/8/2023 | |
11.1.2 | 111,908 | 6/20/2023 | |
11.1.1 | 7,710 | 6/19/2023 | |
11.1.0 | 2,755 | 6/17/2023 | |
11.0.0 | 48,695 | 5/8/2023 | |
10.21.1 | 45,314 | 4/21/2023 | |
10.21.0 | 24,807 | 3/24/2023 | |
10.20.0 | 91,223 | 2/10/2023 | |
10.19.0 | 36,422 | 1/6/2023 | |
10.18.0 | 138,965 | 11/2/2022 | |
10.17.0 | 94,469 | 10/6/2022 | |
10.16.0 | 12,937 | 10/3/2022 | |
10.15.1 | 111,234 | 8/8/2022 | |
10.15.0 | 5,760 | 8/5/2022 | |
10.14.0 | 189,995 | 6/2/2022 | |
10.13.0 | 28,462 | 5/18/2022 | |
10.12.0 | 18,449 | 5/5/2022 | |
10.11.2 | 35,233 | 4/21/2022 | |
10.11.1 | 21,874 | 3/31/2022 | |
10.11.0 | 5,597 | 3/28/2022 | |
10.10.0 | 96,290 | 2/28/2022 | |
10.9.0 | 82,155 | 1/21/2022 | |
10.8.0 | 38,463 | 1/17/2022 | |
10.7.1 | 106,968 | 11/20/2021 | |
10.7.0 | 7,257 | 11/10/2021 | |
10.6.0 | 170,586 | 9/30/2021 | |
10.5.1 | 18,614 | 9/22/2021 | |
10.5.0 | 31,110 | 9/9/2021 | |
10.4.1 | 3,837 | 9/3/2021 | |
10.4.0 | 11,408 | 8/31/2021 | |
10.3.0 | 140,433 | 7/7/2021 | |
10.2.1 | 27,169 | 7/1/2021 | |
10.2.0 | 28,757 | 6/15/2021 | |
10.2.0-beta.2 | 786 | 5/5/2021 | |
10.2.0-beta.1 | 363 | 4/12/2021 | |
10.1.4 | 20,050 | 5/12/2021 | |
10.1.3 | 23,661 | 4/29/2021 | |
10.1.2 | 29,747 | 3/19/2021 | |
10.1.1 | 22,737 | 2/25/2021 | |
10.1.0 | 16,075 | 2/9/2021 | |
10.0.1 | 8,066 | 2/2/2021 | |
10.0.0-beta.6 | 445 | 1/26/2021 | |
10.0.0-beta.5 | 653 | 1/19/2021 | |
10.0.0-beta.3 | 1,167 | 12/10/2020 | |
10.0.0-beta.2 | 1,488 | 11/4/2020 | |
10.0.0-beta.1 | 747 | 10/16/2020 | |
10.0.0-alpha.43 | 375 | 10/9/2020 | |
10.0.0-alpha.34 | 484 | 10/4/2020 | |
5.1.3 | 26,689 | 2/10/2021 | |
5.1.2 | 84,668 | 10/20/2020 | |
5.1.1 | 28,028 | 10/2/2020 | |
5.1.0 | 7,628 | 9/30/2020 | |
5.0.1 | 10,896 | 9/9/2020 | |
4.3.0 | 279,528 | 2/5/2020 | |
4.2.0 | 70,472 | 10/8/2019 | |
4.1.0 | 87,981 | 8/6/2019 | |
4.0.1 | 20,447 | 6/27/2019 | |
4.0.0 | 6,381 | 6/14/2019 | |
3.4.0 | 104,704 | 1/9/2019 | |
3.3.0 | 26,530 | 11/8/2018 | |
3.2.1 | 50,406 | 9/27/2018 | |
3.2.0 | 17,554 | 9/4/2018 | |
3.1.0 | 33,606 | 7/4/2018 | |
3.0.0 | 110,583 | 4/16/2018 | |
2.2.0 | 15,151 | 3/22/2018 | |
2.1.0 | 55,382 | 11/13/2017 | |
2.0.0 | 18,461 | 10/17/2017 | |
2.0.0-rc1 | 2,652 | 10/3/2017 | |
1.6.0 | 35,710 | 8/15/2017 | |
1.5.0 | 18,100 | 6/20/2017 | |
1.4.0 | 15,003 | 5/19/2017 | |
1.3.0 | 3,788 | 5/16/2017 | |
1.2.1 | 8,031 | 5/1/2017 | |
1.2.0 | 6,053 | 4/4/2017 | |
1.1.1 | 7,573 | 3/15/2017 | |
1.1.0 | 3,750 | 3/3/2017 | |
1.0.4 | 4,981 | 2/21/2017 | |
1.0.3 | 17,137 | 2/14/2017 | |
0.82.1 | 18,539 | 1/27/2017 | |
0.82.0 | 3,460 | 1/23/2017 | |
0.81.0 | 5,557 | 12/15/2016 | |
0.80.0 | 11,693 | 10/27/2016 | |
0.78.1 | 20,657 | 9/15/2016 | |
0.78.0 | 2,800 | 9/11/2016 | |
0.77.2 | 5,674 | 8/11/2016 | |
0.77.1 | 3,233 | 7/28/2016 | |
0.76.1 | 6,125 | 6/15/2016 | |
0.76.0 | 3,498 | 6/9/2016 | |
0.75.0 | 3,313 | 6/3/2016 | |
0.74.1 | 6,010 | 5/10/2016 |
## 11.6.0 (2023-11-03)
### Enhancements
* Added the `App.EmailPasswordAuth.RetryCustomConfirmationAsync` method to be able to run again the confirmation function on the server for a given email. (Issue [#3463](https://github.com/realm/realm-dotnet/issues/3463))
* Added `User.Changed` event that can be used to notify subscribers that something about the user changed - typically this would be the user state or the access token. (Issue [#3429](https://github.com/realm/realm-dotnet/issues/3429))
* Added support for customizing the ignore attribute applied on certain generated properties of Realm models. The configuration option is called `realm.custom_ignore_attribute` and can be set in a global configuration file (more information about global configuration files can be found in the [.NET documentation](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/configuration-files)). The Realm generator will treat this as an opaque string, that will be appended to the `IgnoreDataMember` and `XmlIgnore` attributes already applied on these members. The attributes must be fully qualified unless the namespace they reside in is added to a global usings file. For example, this is how you would add `JsonIgnore` from `System.Text.Json`:
```
realm.custom_ignore_attribute = [System.Text.Json.Serialization.JsonIgnore]
```
(Issue [#2579](https://github.com/realm/realm-dotnet/issues/2579))
* The Realm source generator will now error out in case a collection in the model classes is assigned to a non-null value either in a property initializer or in a constructor. Realm collections are initialized internally and assigning non-null values to the property is not supported, where the `null!` assignment is only useful to silence nullable reference type warnings, in reality the collection will never be null. (Issue [#3455](https://github.com/realm/realm-dotnet/issues/3455))
* Made WebSocket error logging more verbose when using `AppConfiguration.UseManagedWebSockets = true`. [#3459](https://github.com/realm/realm-dotnet/pull/3459)
### Fixed
* Added an error that is raised when interface based Realm classes are used with a language version lower than 8.0. At the same time, removed the use of `not` in the generated code, so that it's compatible with a minumum C# version of 8.0. (Issue [#3265](https://github.com/realm/realm-dotnet/issues/3265))
* Logging into a single user using multiple auth providers created a separate SyncUser per auth provider. This mostly worked, but had some quirks:
- Sync sessions would not necessarily be associated with the specific SyncUser used to create them. As a result, querying a user for its sessions could give incorrect results, and logging one user out could close the wrong sessions.
- Existing local synchronized Realm files created using version of Realm from August - November 2020 would sometimes not be opened correctly and would instead be redownloaded.
- Removing one of the SyncUsers would delete all local Realm files for all SyncUsers for that user.
- Deleting the server-side user via one of the SyncUsers left the other SyncUsers in an invalid state.
- A SyncUser which was originally created via anonymous login and then linked to an identity would still be treated as an anonymous users and removed entirely on logout.
(Core 13.21.0)
* If a user was logged out while an access token refresh was in progress, the refresh completing would mark the user as logged in again and the user would be in an inconsistent state (Core 13.21.0).
* If querying over a geospatial dataset that had some objects with a type property set to something other than 'Point' (case insensitive) an exception would have been thrown. Instead of disrupting the query, those objects are now just ignored. (Core 13.21.0)
* Receiving a write_not_allowed error from the server would have led to a crash. (Core 13.22.0)
* Updating subscriptions did not trigger Realm autorefreshes, sometimes resulting in async refresh hanging until another write was performed by something else. (Core 13.23.1)
* Fix interprocess locking for concurrent realm file access resulting in a interprocess deadlock on FAT32/exFAT filesystems. (Core 13.23.1)
### Compatibility
* Realm Studio: 13.0.0 or later.
### Internal
* Using Core 13.20.1.