AlisReactive.Fusion 1.0.0-preview.21

This is a prerelease version of AlisReactive.Fusion.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package AlisReactive.Fusion --version 1.0.0-preview.21
                    
NuGet\Install-Package AlisReactive.Fusion -Version 1.0.0-preview.21
                    
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="AlisReactive.Fusion" Version="1.0.0-preview.21" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AlisReactive.Fusion" Version="1.0.0-preview.21" />
                    
Directory.Packages.props
<PackageReference Include="AlisReactive.Fusion" />
                    
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 AlisReactive.Fusion --version 1.0.0-preview.21
                    
#r "nuget: AlisReactive.Fusion, 1.0.0-preview.21"
                    
#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 AlisReactive.Fusion@1.0.0-preview.21
                    
#: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=AlisReactive.Fusion&version=1.0.0-preview.21&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=AlisReactive.Fusion&version=1.0.0-preview.21&prerelease
                    
Install as a Cake Tool

Alis.Reactive

Plan-driven reactive framework for ASP.NET MVC. C# fluent builders produce JSON plans executed by a browser runtime. Zero JavaScript in views.

Packages

Package Description
Alis.Reactive Core plan model, builders, and serialization
Alis.Reactive.Native Native HTML components (TextBox, CheckBox, DropDown, Button, etc.)
Alis.Reactive.Fusion Syncfusion EJ2 component integration
Alis.Reactive.FluentValidator FluentValidation rule extraction to client-side validation
Alis.Reactive.NativeTagHelpers ASP.NET Core Tag Helpers for native components

Target Frameworks

All library packages target both net48 and net10.0 (except NativeTagHelpers which is net10.0 only).

Repo Layout

Alis.Reactive/                    C# library (packed as AlisReactive NuGet)
Alis.Reactive.Native/             C# native-component library
Alis.Reactive.Fusion/             C# Syncfusion-component library
Alis.Reactive.FluentValidator/    C# validator-extraction library
Alis.Reactive.NativeTagHelpers/   C# tag helpers (net10 only)
Alis.Reactive.Analyzers/          Roslyn analyzers (shipped with AlisReactive)

Alis.Reactive.Assets/             Framework JS + CSS source (pure npm package, no csproj)
├── Scripts/                      TypeScript source (runtime)
├── Styles/                       Tailwind input + component CSS
└── dist/                         esbuild + tailwind output (gitignored)
    ├── scripts/alis-reactive.dev.js
    └── css/design-system.dev.css

Alis.Reactive.SandboxApp/         Dev harness + breathing example (consumer of AlisReactive)
├── Scripts/sandbox-plugins.ts    Sandbox-only bundle
├── Styles/sandbox.css            Sandbox-only Tailwind utilities
├── Views/                        Razor views demonstrating the framework
└── wwwroot/                      sandbox bundles land here; framework bundles are served
                                  directly from Alis.Reactive.Assets/dist/ via a
                                  CompositeFileProvider in Program.cs

tests/                            All test projects (NUnit + vitest)

The framework's JS runtime lives in Alis.Reactive.Assets/ — a sibling folder with its own package.json. No csproj. No MSBuild orchestration of npm. This mirrors how dotnet/aspnetcore ships Blazor's Web.JS and SignalR's TypeScript client.

Prerequisites

  • .NET SDK 10.0.x
  • Node.js 22+ and npm
  • (First run only) pwsh tests/Alis.Reactive.PlaywrightTests/bin/Debug/net10.0/playwright.ps1 install --with-deps chromium

Quickstart: run the sandbox

Three commands, in any order, each in its own terminal. The sandbox serves the framework JS/CSS directly from Alis.Reactive.Assets/dist/ via a CompositeFileProvider (no copy to wwwroot). Same URL structure the NuGet consumer experience produces on their side via AlisReactive.targets.

# Terminal 1 — install JS deps + build bundles once
npm ci
npm run build:all

# Terminal 2 — run the sandbox
dotnet run --project Alis.Reactive.SandboxApp
# → http://localhost:5220

The sandbox layout loads:

<link rel="stylesheet" href="~/css/design-system.dev.css" asp-append-version="true"/>
<link rel="stylesheet" href="~/css/sandbox.css"         asp-append-version="true"/>
<script src="~/scripts/alis-reactive.dev.js"            asp-append-version="true"></script>
<script src="~/js/sandbox-plugins.js"                   asp-append-version="true"></script>

A net10 NuGet consumer's layout uses the same pattern — only the version token differs (~/scripts/alis-reactive.{pkg-version}.js, ~/css/design-system.{pkg-version}.css).

Watch mode: fast edit/refresh loop

For framework development, run three parallel watchers (one per terminal):

# Terminal 1 — esbuild --watch rebuilds alis-reactive.dev.js on every TS edit (~50ms)
npm run watch

# Terminal 2 — tailwind --watch rebuilds design-system.dev.css on every CSS/Razor edit
npm run watch:css

# Terminal 3 — dotnet watch rebuilds Razor/C# and reloads the browser via ASP.NET Core hot reload
dotnet watch --project Alis.Reactive.SandboxApp
# → http://localhost:5220

Edit loop:

  • Edit .ts in Alis.Reactive.Assets/Scripts/npm run watch rewrites the bundle → browser refresh serves new bytes.
  • Edit .css in Alis.Reactive.Assets/Styles/npm run watch:css rewrites design-system.dev.css → browser refresh.
  • Edit .cshtml or .csdotnet watch hot-reloads (or rebuilds + re-serves).

Sandbox-only bundles also have watchers if you edit them:

npm run watch:sandbox-plugins   # rebuilds SandboxApp/wwwroot/js/sandbox-plugins.js
npm run watch:sandbox-css       # rebuilds SandboxApp/wwwroot/css/sandbox.css

Build everything once

npm ci
npm run build:all            # TS → dist/scripts, CSS → dist/css, sandbox bundles → wwwroot
dotnet build                 # all C# projects

Run tests

Always kill any lingering dev sandbox first (lsof -ti:5220 | xargs kill -9) so Playwright's Kestrel port selection works.

# .NET unit tests
dotnet test tests/Alis.Reactive.UnitTests
dotnet test tests/Alis.Reactive.Native.UnitTests
dotnet test tests/Alis.Reactive.Fusion.UnitTests
dotnet test tests/Alis.Reactive.FluentValidator.UnitTests
dotnet test tests/Alis.Reactive.Analyzers.Tests
dotnet test tests/Alis.Reactive.DesignSystem.Tests
dotnet test tests/Alis.Reactive.NativeTagHelpers.Tests

# Playwright (end-to-end, browser-driven)
dotnet build                 # Playwright fixture starts SandboxApp via `dotnet run`; prebuild keeps startup under 30s
dotnet test tests/Alis.Reactive.PlaywrightTests \
    --logger "console;verbosity=detailed"

# TypeScript
npm run typecheck            # both tsconfigs (framework + sandbox)
npm run lint
npm test                     # vitest

Pack the NuGet

npm ci
npm run build:all            # writes Alis.Reactive.Assets/dist/scripts/alis-reactive.dev.js + dist/css/design-system.dev.css
dotnet build --configuration Release
dotnet pack Alis.Reactive/Alis.Reactive.csproj \
    --configuration Release --no-build \
    --output ./nupkgs
# → nupkgs/AlisReactive.<version>.nupkg

dotnet pack does not invoke npm. If the bundles are missing, VerifyBundlesExistBeforePack fails fast with a clear message. CI or the developer runs npm run build:all first; pack just packages the output.

The NuGet ships unversioned bundle names (build/assets/js/alis-reactive.js, build/assets/css/design-system.css, with the same files mirrored under buildTransitive/). The shipped AlisReactive.targets file copies them into the consumer's wwwroot/scripts/ (net10) or Content/alisreactive/ (net48) with the package version baked into the filename.

Gitignore hygiene

After any npm run build:all, git status must stay clean. The ignored output paths:

  • Alis.Reactive.Assets/dist/ (framework bundles)
  • Alis.Reactive.SandboxApp/wwwroot/js/sandbox-plugins.js (sandbox bundle)
  • Alis.Reactive.SandboxApp/wwwroot/css/sandbox.css (sandbox bundle)

If any of the above shows up in git status, something in the build pipeline is writing to a tracked path — file an issue; do not git add.

License

MIT

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. 
.NET Framework net48 is compatible.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0-preview.22 43 5/15/2026
1.0.0-preview.21 86 4/28/2026
1.0.0-preview.20 57 4/22/2026
1.0.0-preview.19 58 4/21/2026
1.0.0-preview.18 52 4/16/2026
1.0.0-preview.17 59 4/15/2026
1.0.0-preview.16 58 4/14/2026
1.0.0-preview.15 56 4/13/2026
1.0.0-preview.14 73 4/13/2026
1.0.0-preview.13 56 4/12/2026
1.0.0-preview.11 59 4/12/2026
1.0.0-preview.8 61 4/12/2026
1.0.0-preview.7 58 4/12/2026
1.0.0-preview.6 53 4/12/2026
1.0.0-preview.2 99 4/9/2026
1.0.0-preview.1 67 4/9/2026