![]() |
VOOZH | about |
dotnet add package Agibuild.Fulora.Avalonia --version 1.5.10
NuGet\Install-Package Agibuild.Fulora.Avalonia -Version 1.5.10
<PackageReference Include="Agibuild.Fulora.Avalonia" Version="1.5.10" />
<PackageVersion Include="Agibuild.Fulora.Avalonia" Version="1.5.10" />Directory.Packages.props
<PackageReference Include="Agibuild.Fulora.Avalonia" />Project file
paket add Agibuild.Fulora.Avalonia --version 1.5.10
#r "nuget: Agibuild.Fulora.Avalonia, 1.5.10"
#:package Agibuild.Fulora.Avalonia@1.5.10
#addin nuget:?package=Agibuild.Fulora.Avalonia&version=1.5.10Install as a Cake Addin
#tool nuget:?package=Agibuild.Fulora.Avalonia&version=1.5.10Install as a Cake Tool
<h1 align="center">Fulora</h1>
<p align="center"> <strong>Build desktop apps at web speed, without giving up native power.</strong><br/> <sub>A typed, policy-driven hybrid app platform for .NET and Avalonia.</sub> </p>
<p align="center"> <img src="https://img.shields.io/nuget/v/Agibuild.Fulora.Avalonia?logo=nuget&label=NuGet&color=004880&style=flat-square" /> <img src="https://img.shields.io/nuget/dt/Agibuild.Fulora.Avalonia?logo=nuget&label=Downloads&color=00a86b&style=flat-square" /> <a href="https://github.com/AGIBuild/Agibuild.Fulora/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/AGIBuild/Agibuild.Fulora/ci.yml?label=CI&logo=github&style=flat-square" /></a> <img src="https://img.shields.io/badge/License-MIT-yellow?style=flat-square" /> </p>
<p align="center"> <img src="https://img.shields.io/badge/Windows-WebView2-0078D4?style=flat-square&logo=windows" /> <img src="https://img.shields.io/badge/macOS-WKWebView-000000?style=flat-square&logo=apple" /> <img src="https://img.shields.io/badge/Linux-WebKitGTK-FCC624?style=flat-square&logo=linux&logoColor=black" /> <img src="https://img.shields.io/badge/iOS-WKWebView-000000?style=flat-square&logo=apple" /> <img src="https://img.shields.io/badge/Android-WebView-3DDC84?style=flat-square&logo=android&logoColor=white" /> </p>
<p align="center"> <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FAGIBuild%2FAgibuild.Fulora%2Fbadges%2Funit-tests.json&style=flat-square" alt="Unit Tests" /> <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FAGIBuild%2FAgibuild.Fulora%2Fbadges%2Fintegration-tests.json&style=flat-square" alt="Integration Tests" /> <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FAGIBuild%2FAgibuild.Fulora%2Fbadges%2Fline-coverage.json&style=flat-square" alt="Line Coverage" /> <img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FAGIBuild%2FAgibuild.Fulora%2Fbadges%2Fbranch-coverage.json&style=flat-square" alt="Branch Coverage" /> </p>
You have a fast-moving web team and a battle-tested .NET desktop stack.
Most hybrid approaches force a compromise: either weak host-web contracts, or a rewrite when complexity grows.
Fulora is built for the middle path that scales:
From "just embed one page" to "run a full product shell", you stay on one runtime model.
Choose the onboarding path that matches where you are today.
Recommended (CLI + template):
dotnet tool install -g Agibuild.Fulora.Cli
dotnet new install Agibuild.Fulora.Templates
fulora new MyApp --frontend react
cd MyApp
fulora dev
Alternative (template only):
dotnet new install Agibuild.Fulora.Templates
dotnet new agibuild-hybrid -n MyApp
cd MyApp
dotnet run --project MyApp.Desktop
Manual (add WebView to an existing Avalonia app):
dotnet add package Agibuild.Fulora.Avalonia
In Program.cs:
AppBuilder.Configure<App>()
.UsePlatformDetect()
.UseFulora()
.StartWithClassicDesktopLifetime(args);
In XAML:
<Window xmlns:wv="clr-namespace:Agibuild.Fulora;assembly=Agibuild.Fulora">
<wv:WebView x:Name="WebView"
Source="https://example.com" />
</Window>
Full guide: ·
Explore what Fulora can do before diving into the docs.
The bridge is the core experience: predictable contracts, async-friendly calls, and no fragile string-based IPC.
Expose C# to JavaScript:
[JsExport]
public interface IGreeterService
{
Task<string> Greet(string name);
}
webView.Bridge.Expose<IGreeterService>(new GreeterService());
Call from JavaScript:
const msg = await window.agWebView.rpc.invoke("GreeterService.greet", {
name: "World"
});
Call JavaScript from C#:
[JsImport]
public interface INotificationService
{
Task ShowNotification(string message);
}
var notifications = webView.Bridge.GetProxy<INotificationService>();
await notifications.ShowNotification("File saved!");
Run your frontend exactly how your team already works: embedded assets in production, hot reload in development.
Production (embedded):
webView.EnableSpaHosting(new SpaHostingOptions
{
EmbeddedResourcePrefix = "wwwroot",
ResourceAssembly = typeof(MainWindow).Assembly,
});
await webView.NavigateAsync(new Uri("app://localhost/index.html"));
Development (HMR):
webView.EnableSpaHosting(new SpaHostingOptions
{
DevServerUrl = "http://localhost:5173"
});
See complete patterns, not toy snippets.
| Sample | Description |
|---|---|
| Avalonia + React (Vite), typed bridge, SPA hosting | |
AI chat with IAsyncEnumerable streaming, cancellation, Microsoft.Extensions.AI |
|
| Full-featured reference app (plugins, shell, CLI) |
Walkthrough: ·
From a single embedded page to a full product shell — everything you need is already here.
Core
[JsExport] / [JsImport], source-generated C#/JS proxies, AOT-safe; V2: byte[]/Uint8Array, CancellationToken/AbortSignal, IAsyncEnumerable streaming, overloadsIWebAuthBroker), Web dialog (IWebDialog), screenshot & PDF, cookies, command managerEcosystem
fulora new, dev, generate, search, add plugin, list plugins --checkDetails: · ·
One runtime core, multiple platform adapters.
graph TD
subgraph app ["Your Avalonia App"]
WebView["WebView Control"]
Bridge["Typed Bridge<br/>C# ↔ JS"]
Gateway["Capability Gateway<br/>Host / System API"]
WebView --- Core
Bridge --- Core
Gateway --- Core
Core["Runtime Core<br/>Navigation · RPC · Shell · Diagnostics · Policy"]
Core --- Adapter["IWebViewAdapter"]
end
Adapter --- WKWebView
Adapter --- WebView2
Adapter --- WebKitGTK
Adapter --- AndroidWebView["Android WebView"]
Fulora helps teams move from first WebView integration to full hybrid platform without replacing their foundation.
Two paths, one runtime:
Unlike wrapper-only solutions, Fulora provides typed host/web contracts, policy-governed capabilities, machine-checkable diagnostics, and scalable app-shell patterns out of the box.
Current status: Phase 12 (Enterprise & Advanced Scenarios) completed. All roadmap phases through 12 are done.
·
Quality badges at the top of the page are updated automatically by CI on every successful build to main from these CI gates:
nuke Test # Unit + Integration
nuke Coverage # Coverage report + threshold enforcement
nuke NugetPackageTest # Pack → install → run smoke test
For local template validation (not required by the default CI badge pipeline):
nuke TemplateE2E # Template end-to-end test
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-android36.0 net10.0-android36.0 is compatible. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-ios18.0 net10.0-ios18.0 is compatible. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.6.7 | 116 | 4/23/2026 |
| 1.6.6 | 65 | 4/23/2026 |
| 1.6.2 | 84 | 4/22/2026 |
| 1.6.1 | 65 | 4/22/2026 |
| 1.6.0 | 72 | 4/21/2026 |
| 1.5.11 | 114 | 4/3/2026 |
| 1.5.10 | 128 | 3/17/2026 |
| 1.5.9 | 81 | 3/17/2026 |
| 1.5.8 | 72 | 3/16/2026 |
| 1.5.7 | 72 | 3/16/2026 |
| 1.5.6 | 88 | 3/16/2026 |
| 1.5.5 | 70 | 3/15/2026 |
| 1.5.4 | 72 | 3/15/2026 |
| 1.5.3 | 76 | 3/15/2026 |
| 1.5.2 | 73 | 3/14/2026 |
| 1.5.1.160 | 71 | 3/14/2026 |
| 1.5.0.157 | 79 | 3/13/2026 |
| 1.5.0.156 | 75 | 3/13/2026 |
| 1.5.0.151 | 63 | 3/13/2026 |
| 1.5.0.150 | 70 | 3/13/2026 |