Runic.Application 0.5.0-preview.3

Suggested Alternatives

Runic.Application.Views

Additional Details

Renamed to Runic.Application.Views in 0.7.0-preview.7. Namespaces are unchanged; replace the package reference.

This is a prerelease version of Runic.Application.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Runic.Application --version 0.5.0-preview.3
                    
NuGet\Install-Package Runic.Application -Version 0.5.0-preview.3
                    
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="Runic.Application" Version="0.5.0-preview.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Runic.Application" Version="0.5.0-preview.3" />
                    
Directory.Packages.props
<PackageReference Include="Runic.Application" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Runic.Application --version 0.5.0-preview.3
                    
#r "nuget: Runic.Application, 0.5.0-preview.3"
                    
#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.
#:package Runic.Application@0.5.0-preview.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Runic.Application&version=0.5.0-preview.3&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Runic.Application&version=0.5.0-preview.3&prerelease
                    
Install as a Cake Tool

Runic Application

This is the host-neutral replacement for the preview Application Bridge. It selects contracts through explicit partial RunicWindow<TViewModel> and RunicView<TViewModel> classes, then generates C# attachments and ordinary TypeScript modules after the app's MVVM source generators run. There is no [RunicViewModel] fallback or adapter to the old bridge in this package.

A View is a logical .NET presentation object with typed DataContext. Its browser counterpart can be a plain TypeScript function or a component in a web framework. The browser sends mount and unmount acknowledgements so a content session creates a fresh View for each presentation and releases its lifetime when the outlet changes. The ViewModel belongs to its application or window DI scope and may survive View changes. Window-local routes and operation admission are host-neutral; native window creation belongs to a host adapter.

Generated clients expose a snapshot, subscriptions, typed property setters, commands, and disposal. Calls reject with typed errors. Accepted operations remain owned by .NET across a browser reload; a reconnect gets a new snapshot. A transport failure after acceptance can leave completion unknown, so callers should inspect state before retrying a non-idempotent command. The generated field-write API returns receipts and version conflicts; frontend form helpers must await pending edits before issuing Save.

The runtime emits state and replies with generated and explicit Utf8JsonWriter code. The build tool inspects the compiled application; release runtime serialization does not reflect over ViewModel members. The first-window package is exercised through Native AOT and Chromium in CI. RUNICBRIDGE002 rejects a selected CommunityToolkit ObservableValidator ViewModel in Native AOT until its validation behavior is verified.

The first-window, Toolkit Notes, and Reactive Notes examples exercise the packaged graph and generated ordinary TypeScript client.

Typed commands and checked writes

CommunityToolkit IRelayCommand<T> and IAsyncRelayCommand<T> use the same supported input shapes and generated codecs as ReactiveUI commands: scalars, nullable values, DTOs, collections, unions, and explicit custom codecs. Generated canX(input) queries use the actual parameter. Async Toolkit commands expose startX, completion, recovery, and cancellation, with no invented result value. Toolkit cancellation calls the command's Cancel() and therefore targets its current execution; it does not isolate concurrent invocations of the same command instance.

Checked-write receipts decode their values just like state: for example, an Int64 receipt's snapshot.value or conflict's incoming.value is a bigint. An identical request ID and payload replays its receipt. Reusing an ID with a different baseline version, baseline value, or new value produces a conflict. Each field retains at most 64 receipts within a default 256 KiB encoded-value and receipt-metadata budget. Evicted or oversized receipts leave bounded request-ID tombstones; reconcile authoritative state before issuing a new ID. The write may have succeeded even when its receipt could not be retained.

Batch synchronous model updates

using (BridgeSnapshotBatch.Begin(document))
{
    document.Title = imported.Title;
    document.Content = imported.Content;
    document.Language = imported.Language;
}

Nested scopes on the same model capture and publish one final snapshot per attached bridge when the outer scope ends. Notifications still advance the revision, and direct command/checked-write replies capture current state immediately. A batch controls snapshot work; it does not make mutations atomic or own the model scheduler. Enter the model's execution context as usual and keep the batch around synchronous changes, after awaiting I/O. The translations editor uses this during bulk document reconciliation and command result updates.

Structured validation

Models and nested DTOs may implement INotifyDataErrorInfo. Generated snapshots then expose validation.hasErrors, validation.truncated, and validation.errors, alongside existing property error string arrays. Each error contains a path of wire property names, list indexes, or dictionary keys and a message. Root entity errors use an empty path. Aliases are preserved, so a postal-code error might have the path ["profile", "postal-code"].

Return a BridgeValidationMessage from GetErrors to supply a stable Code, Severity, or relative CLR MemberPaths. Ordinary strings and ValidationResult remain supported. Generated metadata resolves paths without runtime reflection. Traversal and messages are bounded; truncated reports when validation details are incomplete. Nested ErrorsChanged notifications publish new validation state, and removed objects lose their subscriptions. This projection works across model frameworks; it does not run validation rules itself.

Use [RunicIgnore] on validation-only DTO properties such as a computed HasErrors; their values are represented by the validation projection.

Incremental generation

The generator caches successful multi-view generation in its C# obj output directory. It hashes the model/dependency assemblies, generator assemblies, output-affecting options, and generated output contents. Missing or edited outputs invalidate the cache; unchanged generated files keep their timestamps. Set RUNIC_BRIDGE_CODEGEN_FORCE=1 or RUNIC_BRIDGE_CODEGEN_CACHE=0 to bypass it.

This skips redundant bridge generation, not application compilation or the configured frontend build command. Custom frontend commands may consume inputs unknown to the bridge generator, so their existing build semantics are preserved.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on Runic.Application:

Package Downloads
Runic.Application.CsWebUi

CS-WebUI host adapter for Runic Window and View applications.

Runic.Application.ReactiveUI

ReactiveUI routing, view location, and activation for Runic Views.

Runic.Application.Desktop

Runic Window and View host adapter for Runic Desktop.

Runic.Application.ReactiveUI.Reactive

System.Reactive-flavor ReactiveUI routing, view location, activation, and scheduling for Runic Views.

GitHub repositories

This package is not used by any popular GitHub repositories.