Skip to main content
BlazorNative

BlazorNative

Blazor components rendered as real Android and iOS views — no WebView, no JavaScript

Real widgets, not a WebView

Your components render to a real TextView and a real UILabel. There is no browser, no JavaScript bridge, and no HTML anywhere in the process.

Compiled, not interpreted

Your UI and logic compile ahead-of-time into a platform-native library — a .NET NativeAOT binary per platform and ABI. No JIT, no IL interpreter, nothing to download at boot.

One layout engine, two platforms

Both shells delegate placement to the same C++ flexbox engine, so both compute the same frames. It is asserted by a cross-shell drift test, not promised in a README.

Typed structs on the wire

The renderer emits fixed-size struct patches through a C-ABI frame callback. Nothing on the frame path is serialized, parsed, or allocated per frame.

It is just Blazor

Components, @bind, EventCallback, cascading values, keyed lists, real disposal and DI. The render tree is the real one — only the thing at the end of it changed.

Analyzers that know the runtime

The BN rules catch what a native shell makes illegal — a blocking sleep on the dispatch lane, an exception escaping the C-ABI — at compile time, not at 3am.

You write this

<BnColumn Gap="16" Padding="16">

  <BnRow Justify="FlexJustify.SpaceBetween">
    <BnText Text="Left" />
    <BnText Text="Right" />
  </BnRow>

  <BnButton Label="Tap me" OnClick="OnTap" />

</BnColumn>

This runs

Android                 iOS
───────────────         ───────────────
FrameLayout             UIView
├─ FrameLayout          ├─ UIView
│  ├─ TextView          │  ├─ UILabel
│  └─ TextView          │  └─ UILabel
└─ Button               └─ UIButton

Real controls — and every one of
them placed at the frame Yoga
computed, which is the SAME frame
on both sides.

The packages

BlazorNative.Core

The IMobileBridge contract and the bridge implementations. A pure library.

BlazorNative.Renderer

The headless NativeRenderer and the RenderPatch model.

BlazorNative.Runtime

The NativeAOT composition root and the C-ABI export surface.

BlazorNative.Components

The Bn* component library — the flex surface, the controls, the list.

BlazorNative.Http

BridgeHttpHandler + DI — a plain HttpClient, over the shell's fetch.

BlazorNative.Analyzers

Compile-time guards for the native runtime and the C-ABI boundary.

This is a pre-release proof of concept. The API surface is unstable and changes without notice. iOS is simulator-only.

This site deliberately states no test counts, no version numbers and no milestone status — those facts are asserted by CI on every pull request, and a copy of them here would only be a copy that goes stale. For the current state of the project, read the repository and its CI.