Preview · open source
Write XAML.
Serve real HTML.
Web apps that load like a website: no WebAssembly, no runtime in the browser, no JavaScript to write. And native apps on Windows, macOS and Linux from the same code, with hot reload on both.
Requests per second
938
Median latency
17.9 ms
Simulated traffic, computed on the server each second.
XAML saved · 28 ms
0 lines of JavaScript
Live from the server
One codebase, every screen
Web
Windows
macOS
Linux
Android · next
iOS · next
.NET 10
C#
XAML
Aioros.Cosmo
Aioros.Pictor
Aioros.Graphs
Web
Windows
macOS
Linux
Android · next
iOS · next
.NET 10
C#
XAML
Aioros.Cosmo
Aioros.Pictor
Aioros.Graphs
The problem

One product, two stacks

A team ships its website in one stack and its desktop app in another, or wraps the website in a web view and calls it native. Two codebases to keep in step, or one app that never feels at home.
The web app
Components and client state · an API layer for the client · a bundler and its configuration · hydration
The native app
Another UI toolkit, often another language · its own navigation and data loading · or a web view that ships a browser
With Aioros
One XAML page and its view model · loaded on the server, rendered as HTML on the web · the same page native on the desktop
One XAML, every target

The page you write is the page they get

A page is XAML with a view model. The server compiles it into a plan and answers HTML and CSS; the desktop runs the same XAML natively. The card beside the code is that code, rendered by the server you are reading.
Pages/report/Page.axaml
<c:Card> <c:CardHeader Title="Weekly report" Description="Sent every Monday to your team." /> <c:CardContent> <ToggleSwitch Content="Include charts" IsChecked="{Binding Charts}" /> </c:CardContent> <c:CardFooter> <Button Content="Save" Command="{Binding Save}" /> </c:CardFooter> </c:Card>
Weekly report
Sent every Monday to your team.
Live, from the server

Pushed while you watch

A hosted service ticks each second and invalidates a data key. Only the views that read it render again, and the server pushes them to every open page.
No WebSocket code, no client state, no JavaScript of yours.
Requests per second
938
Median latency
17.9 ms
Visitors online
3,002
Requests, last 60 seconds
213141510111600900120015001800
213141510111600900120015001800
Simulated traffic, computed on the server each second.
Developer experience

Save the file. See the change.

The tooling a web developer expects from a serious framework, for XAML on the web and on the desktop.
Pages/Page.axaml
<StackPanel Spacing="12">
<TextBlock Text="Hello, world" />
<TextBlock Text="Hello, Aioros" />
</StackPanel>
Edit and see
Hello, world
Hello, Aioros
Saved · 28 ms
Hot reload, both sides
A XAML edit is on screen in about 30 ms, a C# edit in about 75 ms, on the web and on the desktop, keeping scroll, focus and what you typed.
Errors at the XAML line
A failed build or a page that throws opens an overlay over the page with the file and line; fix it and the overlay goes away.
aioros dev
One command runs the app with hot reload, finds a free port and reports the build, for the web or with --desktop.
Checked at build time
Analyzers and code fixes catch what would break a page in production before it runs; a page the server cannot compile fails the build at its line.
Performance

Compiled before the first request

Pages are traced once into plans that write their HTML straight from the view models. Measured on the same machine against the same app built with each stack.
10.2×
faster than server-rendered Next.js with its cache
7.8×
faster than Blazor static server rendering
2.1×
faster than the same app in Go
4.3×
faster than the same app in Rust with Leptos
Requests per second, by page
Lumen, an issue tracker built five times; 64 connections, 4 server cores; benchmark run 241, October 2026. Geometric mean over five pages.
/issues/LUM-105/settings/inbox/issues/projects85,62057,96153,94331,91716,378
/issues/LUM-105/settings/inbox/issues/projects85,62057,96153,94331,91716,378
/issues/LUM-105/settings/inbox/issues/projects85,62057,96153,94331,91716,378
Everything included

What a serious framework brings

Rendering, data, motion, languages and accessibility, built in and the same on every target.
28 ms
Hot reload everywhere
Save a XAML or C# file and every open page and window updates, keeping its state.
Live by default
Invalidate a data key; the views that read it update on every screen.
Themes that follow you
Light and dark from the device, per visitor, with no flash.

Hello

Hola

你好
こんにちは
Every language
Resources per culture, an address per language, precompiled.
Tab ↹
Accessible markup
Native elements, landmarks, labels and focus, written from your XAML.
A real desktop app
Not a web view: native windows, native rendering, the same pages.
Aioros.Cosmo · shadcn/ui in XAML

Every shadcn/ui component, as XAML

All 67 components with their variants, design tokens and twelve color themes in light and dark. On the web each one is real HTML (a button is a <button>, a link an <a>); on the desktop, native controls.
67/67
shadcn/ui components ported
99.5–100%
of pixels equal to shadcn/ui's own render
12
color themes, light and dark
Create an account
Enter your email below to create your account.
Notifications
Email digests
Push notifications
Only mentions
Make changes to your account here. Click save when you are done.
Save changes
Team members
Owner
SD
Sofia Davis
m@example.com
Member
JL
Jackson Lee
p@example.com
Viewer
IN
Isabella Nguyen
i@example.com
Upload progress
Buttons and badges
Badge
Secondary
Outline
Destructive
Explore Cosmo
Aioros.Pictor · Recharts in XAML

Recharts' charts, with no JavaScript of yours

Recharts 2.15.4's whole API in XAML: written by the server as SVG, interactive through CSS and the framework's script, live when the server pushes new data, and drawn natively on the desktop.
12
chart types, every Recharts export
96×
faster than Recharts' server render
2.15.4
Recharts version whose API it follows
Page BPage DPage EPage G

Page A

  • Uv : 4000
  • Pv : 2400

Page B

  • Uv : 3000
  • Pv : 1398

Page C

  • Uv : 2000
  • Pv : 9800

Page D

  • Uv : 2780
  • Pv : 3908

Page E

  • Uv : 1890
  • Pv : 4800

Page F

  • Uv : 2390
  • Pv : 3800

Page G

  • Uv : 3490
  • Pv : 4300
Page BPage CPage DPage EPage G

Page A

  • Uv : 4000
  • Pv : 2400

Page B

  • Uv : 3000
  • Pv : 1398

Page C

  • Uv : 2000
  • Pv : 9800

Page D

  • Uv : 2780
  • Pv : 3908

Page E

  • Uv : 1890
  • Pv : 4800

Page F

  • Uv : 2390
  • Pv : 3800

Page G

  • Uv : 3490
  • Pv : 4300
Area
Page BPage DPage EPage F

Page A

  • Amt : 1400
  • Pv : 800
  • Uv : 590

Page B

  • Amt : 1506
  • Pv : 967
  • Uv : 868

Page C

  • Amt : 989
  • Pv : 1098
  • Uv : 1397

Page D

  • Amt : 1228
  • Pv : 1200
  • Uv : 1480

Page E

  • Amt : 1100
  • Pv : 1108
  • Uv : 1520

Page F

  • Amt : 1700
  • Pv : 680
  • Uv : 1400
Page BPage CPage DPage EPage F

Page A

  • Amt : 1400
  • Pv : 800
  • Uv : 590

Page B

  • Amt : 1506
  • Pv : 967
  • Uv : 868

Page C

  • Amt : 989
  • Pv : 1098
  • Uv : 1397

Page D

  • Amt : 1228
  • Pv : 1200
  • Uv : 1480

Page E

  • Amt : 1100
  • Pv : 1108
  • Uv : 1520

Page F

  • Amt : 1700
  • Pv : 680
  • Uv : 1400
Composed
MathChineseEnglishGeographyPhysicsHistory
Radar
Explore Pictor
Aioros.Graphs · d3 in C#

d3's drawing engine, byte for byte

Scales, shapes, curves, hierarchies, chords, sankeys and forces ported from d3 and tested against d3's own output: the same SVG path data, byte for byte, written by C# structs and spans with no allocation per point.
19/19
charts byte-identical to d3
2.7×
faster than d3 over those charts
3.8×
faster across 52 micro-benchmarks
Force-directed network
Partition sunburst
Chord diagram
Circle packing
Tidy tree
Streamgraph
Explore Graphs
Comparison

One stack instead of two

What a product team writes and keeps in step, side by side.
Web stack + desktop stack
Web view app
Aioros
Codebases to keep in step
2
1
1
JavaScript to write
A lot
A lot
None
Native rendering on the desktop
Server-rendered, indexable pages
Live updates without client code
Hot reload on web and desktop
Platforms and roadmap

Today and next

The same pages on every target Aioros supports, and the ones it is growing into.
Web
Available
Windows
Available
macOS
Available
Linux
Available
Android
Next
iOS
Next
Preview: web, Windows, macOS and Linux
Design time for people and agents
Android and iOS
Version 1.0
FAQ

Questions, answered

Do I write any JavaScript?
No. Pages are XAML and C#. The framework ships a small script for navigation, live updates and motion, and every page works without it.
How does a XAML page become HTML?
Each page is traced once into a plan that writes its HTML and CSS straight from the view models, so a request does almost no work.
Can I bring my existing XAML?
Yes. Aioros speaks the XAML of Avalonia, with its controls, styles, bindings and view models.
Is it ready for production?
It is a preview: the framework and its libraries are tested and measured, and their APIs may still change before 1.0.
What does it run on?
.NET 10 on the server and the desktop: any browser on the web, and native windows on Windows, macOS and Linux.
Get started

Build your next app in XAML

A template with a real dashboard, a dev server with hot reload, and one codebase for the web and the desktop.
bash
$
dotnet new install Aioros.Cosmo.Templates
$
dotnet new cosmo -n MyApp
$
cd MyApp && aioros dev
✓ Ready on http://localhost:3000 · hot reload on
1
Install the templates
dotnet new install Aioros.Cosmo.Templates
2
Create an app
dotnet new cosmo -n MyApp
3
Run it with hot reload
cd MyApp && aioros dev
Add --desktop to open the same app as a native window.