Flutter's UI model, written in C#
Plumix brings Flutter's Widget → Element → RenderObject architecture to .NET. Port Flutter controls to C# with minimal conceptual translation.
dotnet add package PlumixIf you know Flutter, you already know Plumix.
Compose UIs from immutable widgets. The framework manages an element tree and a render tree under the hood — exactly the way Flutter does. Same lifecycle, same layout protocol, same paint phase. Just C#.
- Immutable widgets, mutable elements, render objects do the work
- BuildContext, State<T>, InheritedWidget — they all behave as expected
- Layout protocol: parent passes constraints, child returns a size
- Hot reload preserves State while you edit — dotnet watch, no restart
public sealed class MyApp : StatelessWidget
{
public override Widget Build(BuildContext context)
{
return new Container(
color: Colors.White,
padding: new Thickness(24),
child: new Column(
children:
[
new Text("Hello, Plumix"),
new SizedBox(height: 12),
new Text("Render tree is driven by Flutter-like widgets.")
]
)
);
}
}Built for parity
Four principles that keep Plumix faithful to Flutter — and predictable for C# developers.
Widget · Element · RenderObject
The same three-tree architecture as Flutter — not a thin wrapper around an existing UI toolkit.
Port Dart to C# directly
Translate Flutter widgets line-by-line. Familiar names, familiar lifecycle, familiar layout protocol.
Avalonia as infrastructure
Avalonia handles the window, input, and drawing surface. All layout and paint logic lives in Plumix.
Parity by default
When behavior diverges from Flutter, it is explicitly documented — never silently skipped.
Why Plumix exists
Plumix is not "Flutter inspired." It is a deliberate translation of Flutter's architecture into the .NET runtime.
Flutter-faithful architecture
Widget, Element, RenderObject — the same mental model as Flutter, not a thin wrapper around another toolkit.
Dart → C# without friction
Porting a Flutter control should feel like translation, not rewriting. APIs and lifecycle mirror Flutter intentionally.
Avalonia as infrastructure, not UI
Avalonia provides the host, platform lifecycle, and rendering surface. All layout and paint behavior is framework-owned.
Parity by default
When behavior diverges from Flutter, it is explicitly documented in the changelog and reference — not silently skipped.
Three packages, one ecosystem
Install only what you need. Material and Cupertino sit on top of Plumix core.
Plumix
Core framework — widgets, elements, render objects, layout & paint pipeline.
Plumix.Material
Material Design layer — scaffold, buttons, FAB, cards, list tiles, drawer, navigation bar, switch/checkbox/radio, ripple, Hero transitions, plus dropdowns, popup menus, steppers, refresh indicators, data tables, and the About/License flow.
Plumix.Cupertino
Cupertino adaptive controls — CupertinoCheckbox, CupertinoRadio, and Cupertino-path Switch for iOS / macOS aesthetics.
Current status
Five milestones tracking the path to a fully Flutter-parity .NET UI framework.
- M1Core Parity Hardening Shipped
- M2Input / Focus / Accessibility Shipped
- M3Port-first Widget Set Expansion Shipped
- M4Material Library Rewrite In progress
- M5Cross-host Sample Parity & Stability Planned
Common questions
How is Plumix different from Avalonia?
Plumix is not a wrapper over Avalonia's control set. Avalonia supplies the window, platform lifecycle, input plumbing and drawing surface; every layout, paint and hit-test decision above that surface is made by Plumix's own render tree. You write Flutter-style widgets, not XAML.
Do I need to know Flutter to use Plumix?
No. Plumix is a normal C# UI framework you can learn on its own. But if you already know Flutter, the API surface, lifecycle and layout protocol are deliberately the same, so most of your existing knowledge transfers directly.
Can I port an existing Flutter widget to C#?
That is the primary design goal. Widget, Element and RenderObject exist with the same responsibilities and mostly the same names, so porting a Dart widget is closer to translation than to a rewrite. Where behaviour intentionally diverges from Flutter, it is documented in the changelog.
Which platforms does Plumix support?
Windows, macOS and Linux desktop, via the Avalonia host. The framework targets net8.0 and later.
Is Plumix production ready?
Not yet. Plumix is at v0.5 and follows a public milestone roadmap: core parity, input and accessibility, and the port-first widget set have shipped, while the Material library rewrite and cross-host sample parity are still in progress.
Does Plumix support hot reload?
Yes. Running under dotnet watch preserves State across edits, so you keep your counter values and scroll positions while the widget tree rebuilds — the same workflow Flutter developers expect.
Start porting Flutter widgets today
Read the architecture guide, browse the controls catalog, or jump straight into the source.
