Plumix.Elmish 0.2.0-alpha.2

This is a prerelease version of Plumix.Elmish.
dotnet add package Plumix.Elmish --version 0.2.0-alpha.2
                    
NuGet\Install-Package Plumix.Elmish -Version 0.2.0-alpha.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Plumix.Elmish" Version="0.2.0-alpha.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Plumix.Elmish" Version="0.2.0-alpha.2" />
                    
Directory.Packages.props
<PackageReference Include="Plumix.Elmish" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Plumix.Elmish --version 0.2.0-alpha.2
                    
#r "nuget: Plumix.Elmish, 0.2.0-alpha.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Plumix.Elmish@0.2.0-alpha.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Plumix.Elmish&version=0.2.0-alpha.2&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Plumix.Elmish&version=0.2.0-alpha.2&prerelease
                    
Install as a Cake Tool

<p align="center"> <img src="icon.png" alt="Plumix" width="120" /> </p>

Plumix

Flutter-inspired UI framework for .NET — build declarative, widget-based UIs in C# or F# with Flutter's Widget/Element/RenderObject architecture.

Website Plumix Plumix.Material Plumix.Cupertino CI

plumix.net · NuGet packages

Vision

  • Keep Widget/Element/RenderObject architecture as close as practical to Flutter.
  • Make rewriting controls from Flutter (Dart) to C# straightforward, with minimal conceptual translation.
  • Reuse Avalonia mostly as platform infrastructure: app/window host, lifecycle, input plumbing, and drawing backend abstractions.
  • Keep layout and paint behavior inside this framework's render layer.

Definition of Done

  1. App UI is built with Flutter-like widgets and lifecycle primitives (StatefulWidget, State, SetState, reconciliation).
  2. Render/layout/paint behavior is framework-owned (RenderObject/RenderBox/render pipeline), not Avalonia-control-driven UI logic.
  3. Samples demonstrate real framework usage via widget host flow, not only low-level render demos.
  4. Core primitives are stable and close enough to Flutter semantics for practical Dart-to-C# control porting.

Project Tracking

Example

C#

using Avalonia.Media;
using Plumix.Widgets;

namespace MyApp;

public sealed class MyApp : StatelessWidget
{
    public override Widget Build(BuildContext context)
    {
        return new Scaffold(
            body: new Center(
                child: new Column(
                    mainAxisAlignment: MainAxisAlignment.Center,
                    children:
                    [
                        new Text(
                            "Hello, Plumix!",
                            style: new TextStyle(fontSize: 32, fontWeight: FontWeight.Bold)
                        ),
                        new SizedBox(height: 16),
                        new Text("Flutter-like widgets, powered by .NET and Avalonia."),
                        new SizedBox(height: 24),
                        new ElevatedButton(
                            onPressed: () => { /* handle tap */ },
                            child: new Text("Get Started")
                        )
                    ]
                )
            )
        );
    }
}

F#

Plumix also ships first-class F# support: Plumix.FSharp provides Feliz-style Ui.* widget factories, and Plumix.Elmish hosts a standard Elmish (MVU) program as a widget — Plumix's own element reconciliation does the diffing, so there is no extra virtual-DOM layer.

open Elmish
open Plumix.Elmish
open Plumix.FSharp

type Model = { Count: int }
type Msg = Increment

let init () = { Count = 0 }, Cmd.none

let update msg model =
    match msg with
    | Increment -> { model with Count = model.Count + 1 }, Cmd.none

let view model dispatch =
    Ui.scaffold (
        appBar = Ui.appBar (titleText = "Hello, Plumix!"),
        body =
            Ui.center (
                Ui.column (
                    mainAxisAlignment = MainAxisAlignment.Center,
                    spacing = 12.0,
                    children = [
                        Ui.text ("Hello, Plumix!", fontSize = 32.0, fontWeight = FontWeight.Bold)
                        Ui.text "Flutter-like widgets, powered by .NET and Avalonia."
                        Ui.text (string model.Count, fontSize = 24.0)
                    ])),
        floatingActionButton =
            Ui.floatingActionButton (child = Ui.icon Icons.Add, onPressed = fun () -> dispatch Increment))

/// The MVU program as a plain Plumix widget — mount it anywhere in a widget tree.
let app () : Widget =
    Program.mkProgram init update view |> Program.toWidget

Prefer classic Flutter style? StatefulWidget/SetState work from F# too — see src/Sample/Plumix.FSharpSample for both variants side by side.

Contributing

Plumix is developed AI-first: code contributions are expected to be produced with a frontier coding agent (Claude Opus 4.8, GPT-5.5, or newer). Bug reports and discussions are welcome from everyone. See CONTRIBUTING.md for the workflow, commands, and PR checklist.

Looking for something to work on? docs/CUPERTINO_TODO.md lists the Cupertino widgets that still need porting — pick one, claim it, and send a PR.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.2.0-alpha.2 65 8/20/2026
0.2.0-alpha.1 71 8/13/2026
0.1.0-alpha.14 66 8/9/2026
0.1.0-alpha.13 62 8/1/2026
0.1.0-alpha.12 66 7/29/2026
0.1.0-alpha.11 64 7/26/2026
0.1.0-alpha.10 69 7/22/2026
0.1.0-alpha.9 61 7/20/2026