A modern and cross-platform native window framework for .NET that lets you build desktop applications using web technologies — load any URL, render HTML strings, or embed a full Blazor application inside a native window
Supports Windows (WebView2), Linux (WebKit2GTK), and macOS (WKWebView)
Note: This project is a modern rework of Photino.Net, Photino.Net.Server, Photino.Blazor and Photino.Native and is not affiliated with or endorsed by the original Photino authors
Install: dotnet add package InfiniLore.InfiniFrame
using InfiniFrame;
var window = InfiniFrameWindowBuilder.Create()
.SetTitle("My App")
.SetSize(1280, 720)
.Center()
.SetStartUrl("https://example.com")
.Build();
window.WaitForClose();Install: dotnet add package InfiniLore.InfiniFrame.BlazorWebView
using InfiniFrame.BlazorWebView;
var builder = InfiniFrameBlazorAppBuilder.CreateDefault(args, w => w
.SetTitle("My Blazor App")
.SetSize(1280, 720)
.Center()
);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");
builder.Build().Run();Install: dotnet add package InfiniLore.InfiniFrame.WebServer
using InfiniFrame.WebServer;
var app = InfiniFrameWebApplication.CreateBuilder(args)
.Build()
.UseAutoServerClose();
app.Run();Your Application
│
├── InfiniLore.InfiniFrame ← Core: window builder & runtime
├── InfiniLore.InfiniFrame.BlazorWebView ← Blazor app lifecycle
├── InfiniLore.InfiniFrame.WebServer ← ASP.NET Core integration
│
├── InfiniLore.InfiniFrame.Blazor ← Window chrome Razor components
├── InfiniLore.InfiniFrame.Js ← JS/Blazor interop
│
└── InfiniLore.InfiniFrame.Shared ← Interfaces, types, native interop
└── InfiniFrame.Native (internal) ← C++ platform layer
Only one of BlazorWebView, WebServer, or the core InfiniFrame package is needed for a given application type — they are independent integration paths
| Example | What it demonstrates |
|---|---|
| BlazorWebView | Basic Blazor app in a native window |
| BlazorWebView.MultiWindowSample | Multiple independent windows with different Blazor components |
| WebApp.Blazor | Blazor Server hosted via ASP.NET Core |
| WebApp.React | React frontend with custom scheme handler and web messaging |
| WebApp.Vue | Vue.js frontend with all built-in JS message handlers |
- Getting Started — Installation, first app, platform requirements
- Core Window — Builder pattern, configuration, events, messaging
- Blazor WebView — Hosting a full Blazor app in a native window
- Web Server — ASP.NET Core + native window integration
- Custom Window Chrome — Chromeless windows with Blazor components
- JavaScript Interop — Communicating between JS and C#
- Window API —
IInfiniFrameWindowfull reference - Builder API — All fluent builder methods
- Events — Event system reference
- Types — Enums, value types, and delegates
- Breaking Changes vs Photino.NET — API, namespace, event system, and behavioral differences from the original Photino projects
| Platform | Browser Engine | Requirement |
|---|---|---|
| Windows | WebView2 (Chromium) | Windows 10 or later, WebView2 Runtime |
| Linux | WebKit2GTK | GTK 3+ |
| macOS | WKWebView | macOS 10.15 Catalina or later |
This repo was originally forked from Photino.NET and then the history of the Photino.Blazor and Photino.Net.Server repositories were merged into this. By merging the histories, it was possible to ease further development, especially whilst also preserving the original commit history and attribution from the contributors of Photino.
This was also done for the Photino.Native library, but given the extensive work that had already been done, git was seemingly unable to fully merge the commit history without losing the original commit history.
Unlike the other projects in the InfiniLore ecosystem, this repo follows the same Apache 2.0 License as the original Photino projects
