Now on NuGet0.2.0-preview.65
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, our own GPU engine on Metal & Vulkan. No WebView, no Skia.
~250 KBgzipped web runtime
1000+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) =>
    Box(new BoxStyle { Background = ctx.Theme.Background },
      Column(gap: Space.S4, children:
      [
        Text($"{_count}", TypeRole.Display),
        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 componentsWrite a screen once and it runs everywhere: a real web page, a native window on macOS, Windows, iOS and Android, even an email. Same components, same look, checked to match on every target.
Typed styles, zero CSSStyle in C# with real types, never a class name or a stylesheet, down to the selection and the scrollbars. Rebrand the whole app, light and dark, from one color. Fonts too: drop a file into Assets or name a Google Font in one line, and your app serves it on every target, with no page ever calling Google.
Server Actions, RPC without ceremonyCall your server like a method: mark it [ServerAction] and the browser invokes it, with no API to design. Authorization, payload limits and type checks come built in.
Nothing but C#No JavaScript, no CSS, no Info.plist, no Android manifest. Your project names the SDK and nothing else, and the camera is one line of C#: the SDK writes what every platform needs.
The device, in C#Camera, location, biometrics, passkeys, deep links, files and secure storage, each a C# interface your component simply asks for. The same page still renders on the server.
Localization the .NET wayTranslate with the .resx files you already know. Every language is checked at build time, gets its own address like /pt-BR, and formats dates and money the same on the server and in the browser.
The Photon engineYour components drawn straight on the GPU with Metal and Vulkan: real text, input methods, gestures, clipboard and screen readers. Each frame redraws only what changed, so motion stays smooth and light.
Heavyweights includedA spreadsheet as large as Excel's, with its keys, its fill handle and copy and paste to and from it. A code editor with multiple cursors, snippets and live problems. A table that scrolls a million rows. Plus forms, charts, Markdown, dialogs and menus, written once for both targets.
A dev loop you already knowdotnet watch updates the browser page and the native window as you save, without losing their state. Errors point at your C# lines, with real 404 and 500 pages, SEO metadata and per-route lazy loading.
Write-once componentsWrite a screen once and it runs everywhere: a real web page, a native window on macOS, Windows, iOS and Android, even an email. Same components, same look, checked to match on every target.
Typed styles, zero CSSStyle in C# with real types, never a class name or a stylesheet, down to the selection and the scrollbars. Rebrand the whole app, light and dark, from one color. Fonts too: drop a file into Assets or name a Google Font in one line, and your app serves it on every target, with no page ever calling Google.
Server Actions, RPC without ceremonyCall your server like a method: mark it [ServerAction] and the browser invokes it, with no API to design. Authorization, payload limits and type checks come built in.
Nothing but C#No JavaScript, no CSS, no Info.plist, no Android manifest. Your project names the SDK and nothing else, and the camera is one line of C#: the SDK writes what every platform needs.
The device, in C#Camera, location, biometrics, passkeys, deep links, files and secure storage, each a C# interface your component simply asks for. The same page still renders on the server.
Localization the .NET wayTranslate with the .resx files you already know. Every language is checked at build time, gets its own address like /pt-BR, and formats dates and money the same on the server and in the browser.
The Photon engineYour components drawn straight on the GPU with Metal and Vulkan: real text, input methods, gestures, clipboard and screen readers. Each frame redraws only what changed, so motion stays smooth and light.
Heavyweights includedA spreadsheet as large as Excel's, with its keys, its fill handle and copy and paste to and from it. A code editor with multiple cursors, snippets and live problems. A table that scrolls a million rows. Plus forms, charts, Markdown, dialogs and menus, written once for both targets.
A dev loop you already knowdotnet watch updates the browser page and the native window as you save, without losing their state. Errors point at your C# lines, with real 404 and 500 pages, SEO metadata and per-route lazy loading.
Write-once componentsWrite a screen once and it runs everywhere: a real web page, a native window on macOS, Windows, iOS and Android, even an email. Same components, same look, checked to match on every target.
Typed styles, zero CSSStyle in C# with real types, never a class name or a stylesheet, down to the selection and the scrollbars. Rebrand the whole app, light and dark, from one color. Fonts too: drop a file into Assets or name a Google Font in one line, and your app serves it on every target, with no page ever calling Google.
Server Actions, RPC without ceremonyCall your server like a method: mark it [ServerAction] and the browser invokes it, with no API to design. Authorization, payload limits and type checks come built in.
Nothing but C#No JavaScript, no CSS, no Info.plist, no Android manifest. Your project names the SDK and nothing else, and the camera is one line of C#: the SDK writes what every platform needs.
The device, in C#Camera, location, biometrics, passkeys, deep links, files and secure storage, each a C# interface your component simply asks for. The same page still renders on the server.
Localization the .NET wayTranslate with the .resx files you already know. Every language is checked at build time, gets its own address like /pt-BR, and formats dates and money the same on the server and in the browser.
The Photon engineYour components drawn straight on the GPU with Metal and Vulkan: real text, input methods, gestures, clipboard and screen readers. Each frame redraws only what changed, so motion stays smooth and light.
Heavyweights includedA spreadsheet as large as Excel's, with its keys, its fill handle and copy and paste to and from it. A code editor with multiple cursors, snippets and live problems. A table that scrolls a million rows. Plus forms, charts, Markdown, dialogs and menus, written once for both targets.
A dev loop you already knowdotnet watch updates the browser page and the native window as you save, without losing their state. Errors point at your C# lines, with real 404 and 500 pages, SEO metadata and per-route lazy loading.
CHALLENGE
BLAZOR WASM
JS FRAMEWORKS
EQUANTIC.UI
Language
C#
JavaScript / TypeScript
C#, end to end
Web payload
the whole .NET runtime, downloaded
varies
~250 KB gzipped, per-page splitting
Native apps
separate MAUI codebase
React Native / Electron
the same components, GPU-rendered on four platforms
Styling
CSS / Razor
CSS-in-JS, utility classes
typed C#, atomic classes generated
Server calls
a Web API and HttpClient
REST or GraphQL to set up
built in: call it like a method
Toolchain
.NET
Node.js, npm, bundlers
only the .NET SDK, everything embedded
CHALLENGE
BLAZOR WASM
JS FRAMEWORKS
EQUANTIC.UI
Language
C#
JavaScript / TypeScript
C#, end to end
Web payload
the whole .NET runtime, downloaded
varies
~250 KB gzipped, per-page splitting
Native apps
separate MAUI codebase
React Native / Electron
the same components, GPU-rendered on four platforms
Styling
CSS / Razor
CSS-in-JS, utility classes
typed C#, atomic classes generated
Server calls
a Web API and HttpClient
REST or GraphQL to set up
built in: call it like a method
Toolchain
.NET
Node.js, npm, bundlers
only the .NET SDK, everything embedded
HOW IT WORKS
dotnet 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
each frame redraws only what changed
4
Metal or Vulkan present GPU frames on macOS, iOS, Android and Windows
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
each frame redraws only what changed
4
Metal or Vulkan present GPU frames on macOS, iOS, Android and Windows
DOCUMENTATIONEverything is documented, down to the prop
40 guides covering the compiler, runtime, Photon and server integration, plus an API page for each of the 39 catalog components: props with real types and defaults, states, accessibility, and a live preview of each variant. Search anything with ⌘K.
VS CODE EXTENSION
NEW
See the screen while you write it.
Live preview runs the real web realizer in a webview, so what you see is what ships. Click an element in the preview to jump to the line that made it, and edit properties straight into your C#.
Live preview of any screen, updating as you type.
Click-to-select, riding the V3 source maps the compiler already emits.
Property panel writing back through Roslyn rewrites, and telling you when an edit is not safe instead of guessing.
eQuanticTech.equantic-ui
development preview, free
DefaultUIDashboard
C#FormScreen.cs
Preview · FormScreen.cs
79
var theme = context.Theme;
80
81
column.Add(new Drawing(
82
    Vectors.Mark, 240,
83
    tint: Plate.Indigo));
84
85
column.Add(new Text(
86
    "Create your account",
87
    TypeRole.TitleL));
88
89
card.Add(new FormInput(
90
    _form, "Email", "Email",
91
    helper: "We never share it."));
Create your accountType a broken address and nothing turns red. Leave the field and it does.Email
you@example.com
We never share it.
Drawing
Drawing
literal · new
↑ Column
Children here are added one statement at a time. Inserting there is a change to the method's flow, not to a list, so it is not done for you.
artwork
Vectors.Mark
width
240
tint
Plate.Indigo
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
Try the 0.2.0-preview.65 preview today
Development preview. We welcome early adopters, issues and feedback on the roadmap.
eQuantic.UIeQuantic.UI
One C# codebase. Real web. Real native.MIT © eQuantic.
This page is itself an eQuantic.UI app: typed styles, atomic CSS, SSR.