Now on NuGet0.2.0-preview.5
One C# codebase.
Real web. Real native.
Write components once in C#. On the web they compile to optimized JavaScript at build time, without WASM. Natively they render through Photon, a proprietary GPU engine on Metal & Vulkan. No WebView, no Skia.
~85 KBgzipped web runtime
500+C# conformance cases
0Node, npm or bundler setup
MITopen source
HomePage.cs
[Page("/", Title = "MyApp")]
public sealed class HomePage : StatefulComponent
{
private int _count;
public override VisualNode Build(ComponentContext ctx) =>
Column(gap: Space.S4, children: [
Text($"{_count}", TypeRole.Display),
Row(gap: Space.S3, children: [
Button("Count", onPressed: () =>
SetState(() => _count++)),
]),
]);
}
one class · a hydrated web page and a native GPU screen
WHY EQUANTIC.UI
Not "runs in a WebView". Each target gets its real rendering path.
Write-once componentsOne abstract vocabulary: Box, Row, Column, Text, Button, ScrollView. Two realizers: DOM + CSS on the web, GPU pixels on macOS, iOS and Android. Parity is enforced by a cross-target harness and a pixel golden suite.
Typed styles, zero CSSYou declare BoxStyle, ColorToken, Space, TypeRole. The web emits deduplicated atomic CSS (the 100th card adds zero bytes); native resolves the same values to dp and GPU paint. Rebrand the whole app from one seed color.
Server Actions, RPC without ceremonyMark a method [ServerAction] and call it from the client. Allowlisted endpoints, [Authorize] RBAC before execution, payload limits and type allowlisting built in.
The Photon engineMetal and Vulkan backends held to ±1 LSB parity against a CPU reference. Real text, IME composition, gestures, clipboard, VoiceOver. Steady-state frames allocate under 72 KB.
Heavyweights includedAn Excel-grade Spreadsheet, a six-language code editor and a windowed ListView, authored once and running on both targets. Plus buttons, inputs, cards, tabs, dialogs, drawers, menus, toasts.
A dev loop you already knowdotnet watch hot-reloads the browser page and the native window in place. C# stack traces in a Next.js-style overlay, true 404/500 pages, SEO metadata, per-route lazy loading.
Challenge
Blazor WASM
JS frameworks
eQuantic.UI
Web payload
~2 MB+ runtime
varies
~85 KB gzipped, per-page splitting
Native apps
separate MAUI codebase
React Native / Electron
the same components, GPU-rendered
Styling
CSS / Razor
CSS-in-JS, utility classes
typed C#, atomic classes generated
Toolchain
.NET
Node.js, npm, bundlers
only the .NET SDK, everything embedded
HOW IT WORKSdotnet build is the entire toolchain
Web pipeline
1
Roslyn parses your components (.cs)
2
eqc transpiles C# to TypeScript, two-layer type checking
3
embedded Bun bundles with per-page splitting
4
ASP.NET Core serves SSR pages, the client hydrates
Native pipeline · Photon
1
the same components compile as .NET
2
PhotonHost lays out with its own C# flex engine
3
a display list is realized per frame
4
Metal / Vulkan present GPU frames on macOS, iOS, Android
QUICK STARTA real app in three commands
Prerequisite: the .NET 10 SDK. That is it. The TypeScript and bundling toolchain ships embedded, so there is nothing else to install.
Hot reload, both targets
SSR + hydration
Templates included
dotnet new install eQuantic.UI.Templates
dotnet new equantic-app -n MyApp
cd MyApp && dotnet run
→ web on localhost · swap the template for equantic-native
  and the same code opens a GPU window
eQuanticTry the 0.2.0-preview.5 preview today
Development preview. We welcome early adopters, issues and feedback on the roadmap.
eQuanticeQuantic
One C# codebase. Real web. Real native. MIT © eQuantic.
This page is itself an eQuantic.UI app: typed styles, atomic CSS, SSR.