Native web-component runtime
WebScene
Run application-owned web components through a native scene pipeline instead of an embedded browser.
Overview
A native V8, DOM, CSS, layout, Canvas, and SVG runtime for trusted packaged web components, publishing immutable scene updates into Avalonia and Uno hosts without a WebView.
WebScene keeps hot DOM, CSS, layout, Canvas, SVG, and JavaScript work inside a dedicated native engine. The application UI thread consumes immutable scene state, while typed host capabilities and framework SDK controls keep the security and lifecycle boundary explicit.
Native V8, DOM, CSS, layout, Canvas, and SVG
Packaged components without WebView or Chromium hosting
Avalonia and Uno native presenters
Custom Elements, Shadow DOM, typed interop, and CDP
Built for
Where it fits.
- .NET products shipping trusted JavaScript or TypeScript component surfaces
- Avalonia and Uno teams embedding charts, editors, dashboards, or plug-ins
- Runtime authors exploring a bounded native web-compatibility profile
Compatibility & status
Reference presenter
Skia desktop presenter
macOS arm64, Linux x64, Windows x64
Versioned component profile
In the work
Real output,
not a mockup.


Architecture
Clear layers.
Replaceable seams.
Runtime
A dedicated native V8 isolate owns JavaScript, DOM, CSS, layout, Canvas, SVG, and component execution.
Scene
Immutable updates cross the native ABI instead of issuing fine-grained UI-thread calls.
Host
Avalonia and Uno presenters integrate the scene with framework lifecycle, input, and composition.
Capability
Generated typed interop exposes only application-approved .NET services to packaged components.
Inside WebScene
One repository.
Multiple serious systems.
Explore the focused capabilities, their package boundaries, architecture, installation, and smallest useful example.
A dedicated native V8 engine executes a bounded web-component profile and publishes immutable DOM, layout, Canvas, SVG, and paint state through a scene-oriented ABI.
2 modules→02 · Explicit host capabilitiesComponents & Typed InteropCustom Elements, an initial Shadow DOM and slotting slice, component manifests, and generated TypeScript-to-.NET bridges package reusable UI while keeping host authority explicit.
2 modules→03 · Native framework presentationAvalonia & Uno HostsFramework SDK controls host the same native component lifecycle and immutable scene stream inside Avalonia and Uno Skia desktop applications.
4 modules→04 · Raw CDP sessionsV8 Inspector DebuggingDedicated V8 isolates expose authenticated raw Inspector WebSockets and optional Chrome discovery endpoints for source debugging, pause state, live edits, and agent tooling.
2 modules→Quick start
From package
to first frame.
Choose the package workflow used by your repository, then start from the smallest working example. Replace VERSION with the current stable or prerelease version shown on NuGet.
git clone --recurse-submodules https://github.com/wieslawsoltes/WebScene.git# Build a native runtime sample for the target RID.dotnet run --project samples/NativeRuntimeShowcase.AvaloniaPackage surface
Start focused.
Compose as needed.
Portable component lifecycle, scene, and runtime contracts.
↗02WebScene.Sdk.AvaloniaReusable native component host for Avalonia applications.
↗03WebScene.Sdk.UnoReusable native component host for Uno Skia desktop applications.
↗04WebScene.JavaScript.InteropTyped TypeScript-to-.NET host capability generation and runtime bridge.
↗05WebScene.NativeEngine.Runtime.osx-arm64Native V8 and scene engine assets for macOS arm64; matching Linux x64 and Windows x64 packages are also published.
↗Source, docs, samples, and releases
The repository is the source of truth.
Use the current documentation and samples, inspect changes, report issues, or support continued open-source maintenance.