AlisReactive.Fusion
1.0.0-preview.21
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
<PackageReference Include="AlisReactive.Fusion" Version="1.0.0-preview.21" />
<PackageVersion Include="AlisReactive.Fusion" Version="1.0.0-preview.21" />
<PackageReference Include="AlisReactive.Fusion" />
paket add AlisReactive.Fusion --version 1.0.0-preview.21
#r "nuget: AlisReactive.Fusion, 1.0.0-preview.21"
#:package AlisReactive.Fusion@1.0.0-preview.21
#addin nuget:?package=AlisReactive.Fusion&version=1.0.0-preview.21&prerelease
#tool nuget:?package=AlisReactive.Fusion&version=1.0.0-preview.21&prerelease
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
.tsinAlis.Reactive.Assets/Scripts/→npm run watchrewrites the bundle → browser refresh serves new bytes. - Edit
.cssinAlis.Reactive.Assets/Styles/→npm run watch:cssrewritesdesign-system.dev.css→ browser refresh. - Edit
.cshtmlor.cs→dotnet watchhot-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 | Versions 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. |
-
.NETFramework 4.8
- AlisReactive (>= 1.0.0-preview.21)
- AlisReactive.Native (>= 1.0.0-preview.21)
- Microsoft.AspNet.Mvc (>= 5.3.0)
- Syncfusion.EJ2.MVC5 (>= 32.2.8)
-
net10.0
- AlisReactive (>= 1.0.0-preview.21)
- AlisReactive.Native (>= 1.0.0-preview.21)
- Syncfusion.EJ2.AspNet.Core (>= 32.2.8)
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 |