Skip to content

Getting started

Prerequisites

  • .NET SDK.NET 8 for libraries and samples; .NET 10 for the generator repo Nuke build (global.json)
  • Git

NuGet packages (preview)

0.1.0-preview4 is on nuget.org (8 meta-packages: Events, RestAPI, SignalR, and Mqtt). Each feature ships two packages (R3 and System.Reactive):

PackageUse when
Observables.Events.R3Classic / routed CLR events → R3
Observables.Events.ReactiveSame → IObservable<T>
Observables.RestAPI.R3Declarative HTTP → Task + R3 Observable<T>
Observables.RestAPI.ReactiveSame → System.Reactive
Observables.SignalR.R3SignalR hub client → R3
Observables.SignalR.ReactiveSame → System.Reactive
Observables.Mqtt.R3MQTT topic proxy → R3
Observables.Mqtt.ReactiveSame → System.Reactive

Preview releases use Git tag + NuGet only (no GitHub Release). Always add the matching reactive runtime yourself (R3 or System.Reactive).

Events (R3)

xml
<PackageReference Include="Observables.Events.R3" Version="0.1.0-preview4" />
<PackageReference Include="R3" Version="1.3.0" />
csharp
using Observables.Events.R3;
using R3;

var source = new ClickSource();
source.Events().Click.Subscribe(_ => Console.WriteLine("Clicked"));

Routed UI events (Avalonia, etc.) are included in Events; enable with <ObservableRoutedEvents>true</ObservableRoutedEvents> in your project (see Events).

RestAPI (R3)

xml
<PackageReference Include="Observables.RestAPI.R3" Version="0.1.0-preview4" />
<PackageReference Include="R3" Version="1.3.0" />
csharp
using Observables.RestAPI;
using R3;

var api = RestService.For<IMyApi>(httpClient);
User user = await api.GetUserAsync(42);
User reactive = await api.GetUserObservable(7).FirstAsync();

SignalR (R3)

See SignalR.

xml
<PackageReference Include="Observables.SignalR.R3" Version="0.1.0-preview4" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.8" />
<PackageReference Include="R3" Version="1.3.0" />
csharp
using Observables.SignalR;
using R3;

var hub = HubService.For<IMyHub>(hubConnection);

Mqtt (R3)

See Mqtt.

xml
<PackageReference Include="Observables.Mqtt.R3" Version="0.1.0-preview4" />
<PackageReference Include="MQTTnet" Version="4.3.7.1207" />
<PackageReference Include="R3" Version="1.3.0" />

Pin MQTTnet 4.x (not 5.x) — see Mqtt — Why MQTTnet 4.x.

csharp
using Observables.Mqtt;
using R3;

var topics = MqttService.For<IMyTopics>(mqttClient);

Clone layout (optional)

For generator development, place repositories as siblings:

Skymly/
  Observables/
  Observables.Samples/
  Observables.Docs/

Observables.Samples defaults to NuGet; use -p:UseLocalObservables=true when ../Observables exists.

Build the generator solution

powershell
cd Observables
dotnet build Observables.slnx
dotnet run --project build/_build.csproj -- --target Ci --configuration Release

Documentation site (this repo)

bash
cd Observables.Docs
npm install
npm run docs:dev

Released under the MIT License.