Rambla 0.5.2
dotnet add package Rambla --version 0.5.2
NuGet\Install-Package Rambla -Version 0.5.2
<PackageReference Include="Rambla" Version="0.5.2" />
<PackageVersion Include="Rambla" Version="0.5.2" />
<PackageReference Include="Rambla" />
paket add Rambla --version 0.5.2
#r "nuget: Rambla, 0.5.2"
#:package Rambla@0.5.2
#addin nuget:?package=Rambla&version=0.5.2
#tool nuget:?package=Rambla&version=0.5.2
Rambla
High-frequency observable state for real-time .NET desktop applications. Thread-safe updates, batching, coalescing and diagnostics for UI state that changes faster than it can be rendered.
Rambla separates state mutation from UI notification. You write state from any thread; Rambla decides when and how the UI is told — coalescing intermediate values and batching notifications into a single dispatcher hop per frame.
using Rambla;
public partial class MarketViewModel : RamblaState
{
[State] private decimal _bid; // generates an observable `Bid` property
[State] private decimal _ask; // → `Ask`
[State] private decimal _pnl; // → `PnL`
}
From any background worker — no Dispatcher.Invoke, no OnPropertyChanged:
vm.Bid = 1.2345m;
vm.Ask = 1.2346m;
vm.PnL = 23m;
A price that ticks five times in 5 ms notifies the UI once, with the final value. 100,000 mutations collapse to ~101 effective notifications — a ~99.9% reduction.
What ships in this package
- The
RamblaStateengine: thread-safeSetField,BeginUpdatebatching, coalesced flush. - The
[State]source generator. AsyncStateCommandand the[StateCommand]generator: an async command with its run lifecycle — busy flag, captured error, cancel command, and optional latest-wins (CancelPrevious).RamblaList<T>: a high-frequency observable collection — thread-safe writes, one coalesced flush raising the minimumCollectionChangedevents (Batch,ReplaceSnapshotwith a minimal diff, single-Resetfallback).RamblaDictionary<K,V>: the keyed companion — insertion-ordered entries, latest-value-wins per key, same coalesced minimum-diff flush.IStateSchedulerwith immediate + synchronization-context implementations.ThrottlingStateScheduler: a decorator that caps flushes atMaxRefreshRateper second (default 60), releasing the first update after an idle period immediately and pacing bursts.- Opt-in coalescing metrics.
The core is netstandard2.0 and never references Dispatcher. For WPF, add
the Rambla.Wpf adapter; for
Avalonia, Rambla.Avalonia.
When not to use it
Rambla is for state that repeats faster than it renders. With a no-op subscriber the naive path wins on raw CPU, and for high-entropy streams (thousands of distinct properties per flush) coalescing can't help. It is not an event bus — if every intermediate value matters, use a queue/stream instead.
Links
- Repository & docs: https://github.com/nicoseijas/RamblaState
- Getting started: https://github.com/nicoseijas/RamblaState/wiki/Getting-Started
- Benchmarks: https://github.com/nicoseijas/RamblaState/blob/main/BENCHMARKS.md
- Frozen V1 semantics: https://github.com/nicoseijas/RamblaState/blob/main/SEMANTICS.md
- Roadmap: https://github.com/nicoseijas/RamblaState/blob/main/ROADMAP.md
Released under the MIT License. Pre-1.0: the API may still change before 1.0.
| Product | Versions 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Rambla:
| Package | Downloads |
|---|---|
|
Rambla.Wpf
WPF dispatcher adapter for Rambla. Marshals coalesced state flushes onto the UI thread via the WPF Dispatcher. |
|
|
Rambla.Diagnostics
Live diagnostics for Rambla: mutation/notification rates, coalescing ratio, dispatcher latency, hot-property detection and actionable recommendations. Turns the invisible cost of pushing background state to the UI into something you can observe and prove. |
|
|
Rambla.Avalonia
Avalonia dispatcher adapter for Rambla. Marshals coalesced state flushes onto the UI thread via the Avalonia Dispatcher. |
GitHub repositories
This package is not used by any popular GitHub repositories.