Realm 11.4.0
See the version list below for details.
dotnet add package Realm --version 11.4.0
NuGet\Install-Package Realm -Version 11.4.0
<PackageReference Include="Realm" Version="11.4.0" />
paket add Realm --version 11.4.0
#r "nuget: Realm, 11.4.0"
// Install Realm as a Cake Addin #addin nuget:?package=Realm&version=11.4.0 // Install Realm as a Cake Tool #tool nuget:?package=Realm&version=11.4.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.4.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.4.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 | 14,491 | 9/9/2024 | |
12.4.1 | 8,374 | 9/16/2024 | |
12.4.0 | 16,665 | 8/25/2024 | |
12.3.0 | 34,046 | 7/20/2024 | |
12.2.0 | 50,117 | 5/22/2024 | |
12.1.0 | 12,696 | 5/1/2024 | |
12.0.0 | 12,664 | 4/17/2024 | |
11.7.0 | 92,254 | 2/5/2024 | |
11.6.1 | 89,431 | 11/17/2023 | |
11.6.0 | 22,813 | 11/4/2023 | |
11.5.0 | 276,948 | 9/16/2023 | |
11.4.0 | 31,809 | 8/16/2023 | |
11.3.0 | 46,992 | 7/26/2023 | |
11.2.0 | 17,042 | 7/8/2023 | |
11.1.2 | 110,082 | 6/20/2023 | |
11.1.1 | 7,507 | 6/19/2023 | |
11.1.0 | 2,737 | 6/17/2023 | |
11.0.0 | 47,424 | 5/8/2023 | |
10.21.1 | 44,305 | 4/21/2023 | |
10.21.0 | 24,601 | 3/24/2023 | |
10.20.0 | 90,913 | 2/10/2023 | |
10.19.0 | 35,839 | 1/6/2023 | |
10.18.0 | 138,188 | 11/2/2022 | |
10.17.0 | 93,874 | 10/6/2022 | |
10.16.0 | 12,908 | 10/3/2022 | |
10.15.1 | 110,783 | 8/8/2022 | |
10.15.0 | 5,733 | 8/5/2022 | |
10.14.0 | 188,149 | 6/2/2022 | |
10.13.0 | 28,411 | 5/18/2022 | |
10.12.0 | 18,420 | 5/5/2022 | |
10.11.2 | 35,121 | 4/21/2022 | |
10.11.1 | 21,832 | 3/31/2022 | |
10.11.0 | 5,571 | 3/28/2022 | |
10.10.0 | 96,249 | 2/28/2022 | |
10.9.0 | 81,734 | 1/21/2022 | |
10.8.0 | 38,440 | 1/17/2022 | |
10.7.1 | 106,636 | 11/20/2021 | |
10.7.0 | 7,235 | 11/10/2021 | |
10.6.0 | 169,427 | 9/30/2021 | |
10.5.1 | 18,481 | 9/22/2021 | |
10.5.0 | 31,059 | 9/9/2021 | |
10.4.1 | 3,813 | 9/3/2021 | |
10.4.0 | 11,384 | 8/31/2021 | |
10.3.0 | 140,210 | 7/7/2021 | |
10.2.1 | 27,139 | 7/1/2021 | |
10.2.0 | 28,653 | 6/15/2021 | |
10.2.0-beta.2 | 786 | 5/5/2021 | |
10.2.0-beta.1 | 363 | 4/12/2021 | |
10.1.4 | 19,988 | 5/12/2021 | |
10.1.3 | 23,381 | 4/29/2021 | |
10.1.2 | 29,711 | 3/19/2021 | |
10.1.1 | 22,716 | 2/25/2021 | |
10.1.0 | 15,845 | 2/9/2021 | |
10.0.1 | 7,795 | 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 | 374 | 10/9/2020 | |
10.0.0-alpha.34 | 484 | 10/4/2020 | |
5.1.3 | 26,562 | 2/10/2021 | |
5.1.2 | 84,557 | 10/20/2020 | |
5.1.1 | 28,014 | 10/2/2020 | |
5.1.0 | 7,580 | 9/30/2020 | |
5.0.1 | 10,874 | 9/9/2020 | |
4.3.0 | 278,629 | 2/5/2020 | |
4.2.0 | 70,401 | 10/8/2019 | |
4.1.0 | 87,845 | 8/6/2019 | |
4.0.1 | 20,425 | 6/27/2019 | |
4.0.0 | 6,366 | 6/14/2019 | |
3.4.0 | 104,175 | 1/9/2019 | |
3.3.0 | 26,487 | 11/8/2018 | |
3.2.1 | 49,447 | 9/27/2018 | |
3.2.0 | 17,213 | 9/4/2018 | |
3.1.0 | 33,399 | 7/4/2018 | |
3.0.0 | 110,316 | 4/16/2018 | |
2.2.0 | 14,871 | 3/22/2018 | |
2.1.0 | 55,284 | 11/13/2017 | |
2.0.0 | 18,436 | 10/17/2017 | |
2.0.0-rc1 | 2,634 | 10/3/2017 | |
1.6.0 | 35,628 | 8/15/2017 | |
1.5.0 | 18,058 | 6/20/2017 | |
1.4.0 | 14,977 | 5/19/2017 | |
1.3.0 | 3,772 | 5/16/2017 | |
1.2.1 | 8,014 | 5/1/2017 | |
1.2.0 | 6,033 | 4/4/2017 | |
1.1.1 | 7,554 | 3/15/2017 | |
1.1.0 | 3,730 | 3/3/2017 | |
1.0.4 | 4,961 | 2/21/2017 | |
1.0.3 | 17,118 | 2/14/2017 | |
0.82.1 | 18,527 | 1/27/2017 | |
0.82.0 | 3,445 | 1/23/2017 | |
0.81.0 | 5,543 | 12/15/2016 | |
0.80.0 | 11,660 | 10/27/2016 | |
0.78.1 | 20,645 | 9/15/2016 | |
0.78.0 | 2,787 | 9/11/2016 | |
0.77.2 | 5,660 | 8/11/2016 | |
0.77.1 | 3,220 | 7/28/2016 | |
0.76.1 | 6,112 | 6/15/2016 | |
0.76.0 | 3,472 | 6/9/2016 | |
0.75.0 | 3,288 | 6/3/2016 | |
0.74.1 | 5,970 | 5/10/2016 |
## 11.4.0 (2023-08-16)
### Enhancements
* Added `IQueryable.SubscribeAsync` API as a shorthand for using `SubscriptionSet.Add`. It is a syntax sugar that roughly translates to:
```csharp
realm.Subscriptions.Update(() =>
{
realm.Subscriptions.Add(query);
});
await realm.Subscriptions.WaitForSynchronization();
// This can now be expressed as
await query.SubscribeAsync();
```
It offers a parameter to control whether to wait every time for synchronization or just the first time a subscription is added, as well as cancellation token support. (PR [#3403](https://github.com/realm/realm-dotnet/pull/3403))
* Added an optional `cancellationToken` argument to `Session.WaitForDownloadAsync/WaitForUploadAsync`. (PR [#3403](https://github.com/realm/realm-dotnet/pull/3403))
* Added an optional `cancellationToken` argument to `SubscriptionSet.WaitForSynchronization`. (PR [#3403](https://github.com/realm/realm-dotnet/pull/3403))
* Fixed a rare corruption of files on streaming format (often following compact, convert or copying to a new file). (Core 13.17.1)
* Trying to search a full-text indexes created as a result of an additive schema change (i.e. applying the differences between the local schema and a synchronized realm's schema) could have resulted in an IllegalOperation error with the error code `Column has no fulltext index`. (Core 13.17.1)
* Sync progress for DOWNLOAD messages from server state was updated wrongly. This may have resulted in an extra round-trip to the server. (Core 13.17.1)
* Added option to use managed WebSockets ([`System.Net.WebSockets.ClientWebSocket`](https://learn.microsoft.com/en-us/dotnet/api/system.net.websockets.clientwebsocket)) instead of Realm's built-in WebSocket client for Sync traffic. Managed WebSockets offer improved support for proxies and firewalls that require authentication. This feature is currently opt-in and can be enabled by setting `AppConfiguration.UseManagedWebSockets` to true. Managed WebSockets will become the default in a future version. ([PR #3412](https://github.com/realm/realm-dotnet/pull/3412)).
* Fixed an issue that would make `realm.SyncSession` garbage collected even when there are subscribers to `realm.SyncSession.PropertyChanged`.
### Fixed
* Fixed a race condition between canceling an async write transaction and closing the Realm file, which could result in an `ObjectDisposedException : Safe handle has been closed` being thrown. ([PR #3400](https://github.com/realm/realm-dotnet/pull/3400))
* Fixed an issue where in the extremely rare case that an exception is thrown by `Realm.RefreshAsync`, that exception would have been ignored and `false` would have been returned. ([PR #3400](https://github.com/realm/realm-dotnet/pull/3400))
* Fixed the nullability annotation of `SubscriptionSet.Find` to correctly indicate that `null` is returned if the subscription doesn't exist in the subscription set. (PR [#3403](https://github.com/realm/realm-dotnet/pull/3403))
* Fixed an issue where executing `Filter` queries using remapped properties would only work with the native name rather than the managed one. Now both will work - e.g.:
```csharp
partial class MyModel : IRealmObject
{
[MapTo("Bar")]
public int Foo { get; set; }
}
// Both of these are valid now
realm.All<MyModel>().Filter("Foo > 5");
realm.All<MyModel>().Filter("Bar > 5");
```
(Issue [#3149](https://github.com/realm/realm-dotnet/issues/3149))
### Compatibility
* Realm Studio: 13.0.0 or later.
### Internal
* Using Core 13.17.1