Releases
Plumix changelog
Every Plumix release, newest first. Ports name their Dart source file, C#-only changes are marked as such, and every breaking change is listed by name.
v0.4.0-beta.3 — 2026-10-24
- Android: the Activity's back callback steps aside while the soft keyboard is shown, so back hides it first (C#-only).
v0.4.0-beta.2 — 2026-10-24
- Variable-font outlines fill with the non-zero rule, as Skia fills glyphs; overlaps were punched out (C#-only).
- Hosts answer
Clipboard.hasStringsfrom the clipboard's formats; reading it showed iOS's paste alert (C#-only). - Hosts take
viewInsets.bottomfrom the view area the input pane covers; hidden iOS keyboards left it (C#-only). - iOS Backspace runs the plugin's
deleteBackward; hosts no longer type a key's control characters (C#-only).
v0.4.0-beta.1 — 2026-10-24 (collapses v0.2.0-alpha.2 … v0.3.0-alpha.4, 2026-08-20 … 2026-10-24)
- Cupertino (M6): every
cupertino_ui/lib/src/file is a strict port — theme/colours/text theme, localizations (116 locale bundles), routes and sheets,CupertinoApp, page/tab scaffolds, navigation bars, pickers, context menu, menu anchor, text field and selection, segmented controls, refresh control, list sections/tiles, icons. - Hosts are pure engine embedders: retained dart:ui
Scenes throughSceneBuilder/EngineLayerandFlutterView.Render,PlatformDispatchermetrics/locales/accessibility/key data, physicalPointerDataPackets,flutter/textinput/keyevent/platform/mousecursorchannels, the windowing API,FrameTimingreports. - dart:ui surface:
Canvas/Picture/Paint(mask filters, blend modes, isolatedsaveLayer), frameworkColor, nativePathgeometry and metrics,Paragraphover Avalonia with SkParagraph metrics plus a headless FlutterTest engine,drawShadow, gradients, animated image codecs, Skia-exact anti-aliasing for RRect/DRRect/path draws. - Strict framework ports:
framework.dart(elements, build scopes, keys, notifications), the rendering object/box/sliver/proxy/shifted/flex/viewport protocols, layers and thePipelineOwnertree, every binding, the focus tree and traversal, the scrolling stack (2D viewports, nested scroll), gestures (tap, drag, long-press, scale, force press, multi-drag, trackpad pan/zoom), mouse tracking, the semantics fragment model, text input/editing/selection, curves/tweens/implicit animations,Hero,Navigator/Router, state restoration. - Material: strict re-ports of buttons and
ButtonStyle,Switch, sliders, ink features,Material,Scaffold,AppBar, date/time pickers,TextField/InputDecorator,ThemeData,BottomNavigationBar,Stepper,PaginatedDataTable, list tiles; the 8,825-iconIconscatalog;GlobalMaterialLocalizations(119 locales). - Platform bridges: accessibility (UI Automation, macOS, AT-SPI, Android, VoiceOver, browser ARIA), platform views
(framework side),
PlatformMenuBar, system context menu,SystemChrome, clipboard, Scribe/Live Text, ProcessText. - Hosts: the
Plumix.Androidpackage (PlumixMainActivityoverAndroidActivityDelegate), Android system back, Windows/Linux key messages; CI also runs the suite on the newest Avalonia of the major. - Tooling:
FrameworkDartTesterwith flutter_test's finders, matchers andTestTextInput; Flutter's test files ported per subsystem; timeline events, service extensions and the widget inspector; aProfileconfiguration; tests green in Debug/Profile/Release; opt-in screen capture of every sample route in both samples. - Breaking (hosts): Avalonia 12.1.4 minimum;
PlumixHostnever lays out or paints, it rasterizesFlutterView.RenderRequestedscenes (PipelineOwner.CompositeFrame(DrawingContext)gone); render-only hosts register views; one process-wide channel set across windows; AndroidRunsetsMainViewFactory; the Android sample isPlumix.Sample.Android; back reachesWidgetsApp.DidPopRouteviaTopLevel.BackRequested(TryHandleBackButtongone,Key.Backis no back button); hosts sendflutter/keyevent(HostRawKeyEventDatagone) and speakflutter/textinputthrough an instanceHostTextInputPlugin; host clicks get distinct gesture IDs; hot reload runsreassembleApplication(host hooks gone); the framework thread, microtasks and async continuations live onEventLoop, vsync and clock onFrameClock. - Breaking (painting): framework
Color/ColorSpacereplace Avalonia'sColorin every API, with dart:ui'slerp/alphaBlend/withOpacityandtoString;ColorSwatch/MaterialColor/CupertinoDynamicColor/WidgetStateColorderive fromColor;Matrix4replaces the affine pipeline;Canvasis unsealed,saveLayer(Rect?, Paint)isolates,drawImage*take aPaint, clips push no edge mode;TextStyle,TextPainter,StrutStyle-awareParagraph,LineMetrics/TextBox,WordBoundary(toPlumix.Painting),TextOverflow.Visible/verticalFade,TextHeightBehavior.LeadingDistributionfollow Dart (TextLayoutFallback,Canvas.DrawTextLayout*gone); headless text uses FlutterTest metrics and glyph boxes;BoxDecoration.BorderRadiusisBorderRadiusGeometry?(EffectiveBorderRadiusgone), decorations paint through Dart's painters withIsComplexas in Dart;ShapeBorder.PaintInteriortakes aPaintandLerptries the reversed timeline;paintImage/DecorationImage/lerp,TableBorder, gradients,BoxShadow(Avalonia shadow structs gone),Path, rounded geometry,Alignment,FittedSizes, image streams, memory-allocation events andPaintingBinding's cache are strict. - Breaking (rendering):
RenderViewis a bareRenderObjectwith a DPRTransformLayerroot;RenderSliveris aRenderObject;SliverGeometry, sliver parent data (SliverLogicalContainerParentData, nullableSliverMultiBoxAdaptorParentData.Index/LayoutOffset,IKeepAliveParentData),IRenderSliverBoxChildManager(ChildCount/EstimatedChildCount), fixed/varied extent lists (variable-extent types gone,SetItemExtent),RenderSliverGrid(RTL,SliverGridGeometryclass), persistent headers (abstract extents, noChildBuilder,SliverFloatingHeader/SliverResizingHeader/PinnedHeaderSliver),RenderSliverOpacityfollow Dart; proxy_box is split and unsealed (RenderProxyBoxconcrete;RenderOpacity,RenderLimitedBox,RenderAspectRatio,RenderConstrainedBox,RenderDecoratedBox.Decoration,RenderBackdropFilter,RenderTransform,RenderPhysicalModel, clip hit tests andClip.AntiAliasdefaults,RenderPointerListener,RenderIgnorePointer/RenderAbsorbPointer,RenderSemanticsGestureHandler,RenderAnnotatedRegion);RenderAlign/RenderFractionallySizedBoxbecomeRenderPositionedBox/RenderFractionallySizedOverflowBoxoverAlignmentGeometry+TextDirection,RenderPadding.PaddingisEdgeInsetsGeometry,RenderBaseline,RenderAnimatedSize,RenderIndexedStack,RenderFlex(Directionality, unbounded errors, enum order),RenderEditable,RenderParagraph,RenderErrorBoxare strict;RenderBoxhit tests are half-open;PaintingContext(aClipContext,Push*return layers),ClipRRectLayer/ClipPathLayer, 8-bitOpacityLayer,Layer.AddToScene/ContainerLayer.BuildScene, nullableShaderMaskLayerfields; clips/transforms are no repaint boundaries;PipelineOwnerdirty queues, child owners and nullableSemanticsOwner;MarkNeedsPaint,SizedByParent/PerformResize,DropChild/Attach/Detach,GetTransformTo, layer release on unmount;MouseCursoris a class,MouseCursorManagerper tracker,SystemMouseCursorscomplete,MouseRegiona render-object widget; hit tests carry transforms (HitTestEntry.TransformEventgone). - Breaking (framework):
BuildContextis an interfaceElementimplements;ComponentElement, abstractProxyElement,InheritedWidgetas aProxyWidget,...WidgetOfExactTypelookups,PerformRebuild,Mounted,UnmountRoot,_InactiveElements,RootWidget/RootElement(IRootRenderObjectHostgone),View/RawView/ViewCollection,BuildScopeand Dart's build errors, public lifecycle and render-object hooks;State(base.Dispose(),SetStaterules,Context,Mounted;InvokeSetStategone); keys (ObjectKey,GlobalObjectKey,UniqueKeyby identity,ValueKeyNaN),IndexedSlotequality; a throwingbuild()becomesErrorWidget;BuildOwnerowns itsFocusManager(ScheduleBuild/IsBuilding/RegisterElementgone);RunApp/RunWidgetkeep one root. - Breaking (widgets):
Directionalityis required (Stack/IndexedStackdefault toTopStart);Text(no flat style parameters,Locale?),RichText.locale,DefaultTextStyle.Of,Icon,Container,DecoratedBox,Padding.Insets,SafeArea.minimum,ColoredBox,Positioned,IndexedStack,AnimatedCrossFade.ClipBehavior;MediaQueryaspects,PlatformBrightnessOf,WithClampedTextScaling,RemoveDisplayFeatures,fromViewaccessibility;SharedAppData,PageStorage,ChangeNotifier,Title; localizations (WidgetsLocalizationsabstract, async batches,LocalizationsResolver);Semanticstakes oneSemanticsProperties(flags/mergeDescendantsgone); focus (FocusNodetree,Unfocus(disposition), voidRequestFocus, microtask changes,FocusTraversalPolicy,ExcludeFocus;OnTextInput*,HandleText*,FocusScopeMarkergone; no focus on pointer down);WidgetsAppshortcuts/actions, overlays, inspector, back handling;Actions.Invoke;ContextMenuController.Show;Overlay/OverlayPortal/RenderOverlayTheater.SkipCount;Navigator(async pops,Task<bool>route handlers, post-frameNavigationNotification); strictHero(HeroControllerScope,HeroFlightShuttleBuilder,CreateRectTween,TransitionRoute.Suspendgone);AutomaticKeepAlive,KeepAlive; strictscroll_delegate.dart(NullableIndexedWidgetBuilder, nullableitemCount, abstractShouldRebuild);EditableText(nomaxLength/semanticsLabel, Actions keys, ownScrollable, async clipboard, cursor timer, toolbar, selection boxes, non-nullComposing),TextEditingValue,UndoHistory,TextSelectionOverlay, selection gesture builder,SelectableRegion,WidgetStateTextStyle,WidgetStateBorderSide/WidgetStateMouseCursorandBottomNavigationBarItemmoved to core, shortcut diagnostics. - Breaking (scrolling): strict
Scrollable(requires aView,viewportBuilder/axisDirection, scopedOf,SetCanDrag),ScrollView/BoxScrollView(cacheExtent/scrollCacheExtent),ScrollPositionsplit intoScrollPositionWithSingleContext(PointerScroll, activities onAnimationController,PageStoragekeys),ScrollContext,IScrollMetrics(ScrollMetricsSnapshotgone),NestedScrollView, viewports, list wheel,PageController, show-on-screen,EdgeDraggingAutoScroller,SingleChildScrollView,RawScrollbar(C#-onlyWidgets.Scrollbargone), glow on Android/Fuchsia. - Breaking (gestures, keyboard): strict pointer events (trackpad kinds rejected),
GestureBindingqueueing and resampling,SamplingClock(DartStopwatch), arena, tap (BaseTap,TapDownDetails/TapUpDetails), drag (accumulated slop, nullablePrimaryDelta), long press,GestureDetector/RawGestureDetector(gestures:only, nullableBehavior),InvokeCallbackreporting;KeyEventManager,HardwareKeyboard.SyncKeyboardState, the keyboard identity stack. - Breaking (semantics, services): all 33
SemanticsRoles;SemanticsFlagsislong(IsInvalid,IsDialoggone);SemanticsData,SemanticsOwnerdirty set, custom actions,Absorb, empty-string text defaults;AccessibilityFeaturesclass onSemanticsBinding;SemanticsService.SendAnnouncement;FormState.validateannounces; strictSystemChrome/SystemUiOverlayStyle(SystemUiIconBrightnessgone); platform channels, restoration, autofill, text input layer;FlutterErrorreplacesTextInput.OnError/ServicesDebug.OnError; diagnostics layer (Widget/RenderObject/ElementareDiagnosticableTrees). - Breaking (scheduler, animation):
SchedulerBinding.Instance,Priorityclass,lockEvents, warm-up frame,AddPostFrameCallback, read-onlyFramesEnabled,CurrentFrameTimeStamp,MidFrameMicrotasks, reported frame errors;Ticker/AnimationController;Curveclass hierarchy (Curves.*factories gone,EaseOutCubic);Tween(Transform,Lerp(t), nullableColorTween/RectTween/SizeTween,CurveTween,TweenSequence);CurvedAnimation;Animation.ToString;AnimationStyle;ImplicitlyAnimatedWidget-basedAnimated*. - Breaking (Material):
WidgetStatereplaces[Flags] MaterialState;Material(physical model,MaterialInkControllerinterface,MaterialEdges.KMaterialEdges); ink as Dart'sInkFeatures (InkResponsestateless, intent activation, statefulInk, nativeInkSparkle);ThemeData(per-platform density,VisualDensity, derivedBrightness, colour mirrors and*ButtonStyleslots gone, eager component themes);Theme(noDefaultTextStyle,MaterialBasedCupertinoThemeData);ButtonStyleButtonand the four buttons (shortcuts gone,ButtonStylefield order/Padding/Lerp/styleFrom,splashColorgone),IconButton,RawMaterialButton, FAB,ToggleButtons,ToggleablePainter;Switch(semanticLabelandSwitchConfiggone); slider family (SliderThemeData,RangeValues/RangeLabels, semantics, keys); time and date pickers (DatePickerThemeData,DateTimeRange<T>,SelectableDayPredicate, C#-only calendar types gone);TextField,InputDecoration/InputDecorationThemeData,DesktopTextSelectionToolbarButton;AppBar(titleText/paddinggone),AppBarThemeData;Scaffold/ScaffoldMessenger/PersistentBottomSheetController; list tiles, chips, navigation bar/drawer/rail,BottomNavigationBar,Stepper,showDialogviashowRawDialog,DialogTheme, menus andRawMenuAnchor, dropdowns,CarouselView,SnackBar,TextSelectionTheme, M2 scheme derivation,Icons(code points,MaterialIconsfamily),MaterialLocalizations,About/LicensePage,MaterialApp.Router. - Breaking (Cupertino):
CupertinoButton,CupertinoCheckbox,CupertinoRadio,CupertinoSwitch,CupertinoSlider,CupertinoActivityIndicator,CupertinoScrollbar,CupertinoMagnifier,CupertinoTextField,CupertinoTabScaffold,CupertinoTabBar,CupertinoMenuAnchor/CupertinoMenuItem,CupertinoActionSheet, text-selection toolbar and controls re-ported strictly (noisDark); theme, colours, icon themes and localizations closed with dynamic colours resolved at each consumer.
v0.2.0-alpha.1 — 2026-08-13
- Moved the Flutter parity pin to 3.47.0; Material/Cupertino source of truth is now
material_ui/cupertino_ui1.0.0. - Strict ports:
Overlay-basedNavigator, rich-text span model,paintingborders,Table/RenderTable,DraggableScrollableSheet,Plumix.Physics(simulations,BouncingScrollPhysics),RawMenuAnchor,_MenuLayout. - Material closeouts:
Dialogfamily (+ Cupertinodialog.dart),SearchAnchor/SearchBar,TimePicker,InputDecorator/InputBorder,TabBar,MenuAnchor/MenuAcceleratorLabel,AppBar,Drawer,PopupMenu,Slider/RangeSlider,Autocomplete,FlexibleSpaceBar,ToggleButtons,Stepper, chips,ExpansionTile,BottomSheet,Tooltip,ButtonBar,SegmentedButton,DataTable, date/range pickers,ReorderableListView,MergeableMaterial, action buttons; Cupertino text-selection toolbar. - Core: nonlinear text scaling (
TextScaler),RadioGrouptraversal, intrinsic/dry-layout caching,ScrollPhysicsgesture tuning, deferred-loading scroll,RenderTablesemantics,View.Of. - Breaking API changes:
Route,Overlay,MenuStyle.Alignment,ButtonStyle.Alignment,TabBar/TabController,SearchController,DialogThemeData,MaterialDialogs.ShowDialog.
v0.1.0-alpha.4 … v0.1.0-alpha.14 — 2026-07-05 … 2026-08-09
- Material: theme foundation (
ColorScheme,TextTheme,Typography, interpolation),WidgetsApp/MaterialApp, and the bulk of the control library ported — buttons, chips, navigation (bar/rail/drawer/BottomNavigationBar),AppBar/SliverAppBar, dialogs,SnackBar, banners, menus, dropdowns, pickers,TextField,DataTable, sliders, progress indicators,Stepper,ExpansionPanel,Badge,Scrollbar,RefreshIndicator,About, ink/ripples. - Cupertino:
CupertinoColors/dynamic colors, adaptive routing for toolbars, checkbox/radio/switch/progress adaptives. - Core widgets: implicit/explicit animation family,
Draggable/Dismissible,Overlay/OverlayPortal,Actions/Shortcuts,Form/FormField,Imagepipeline, magnifier, layout builders,Visibility,Wrap. - Rendering:
Flow,RepaintBoundary, clip/filter/shader widgets,Stackclipping, sliver family (SliverFill*, groups, resizing/floating headers,SliverPrototypeExtentList,DecoratedSliver). - Text/input:
RenderEditable,TextSelectionControls, selection toolbars,SelectableText/SelectionArea,InputDecoratorstate borders,KeyboardListener. - Scroll:
ScrollConfiguration/PrimaryScrollController, overscroll indicators,ScrollNotificationObserver,PageStorage,ReorderableList,AnimatedList/AnimatedGrid, scroll input policy. - Navigation/animation:
TransitionRoute/PageRouteBuilder, page transitions (Android/Apple),PopScope,TickerMode,TweenAnimationBuilder,Future/Stream/ValueListenablebuilders. - Semantics/hosts/tooling:
IndexedSemantics,AnnotatedRegion,AppLifecycleListener(cross-host lifecycle), hot reload (HotReloadManager),PORT_PLAYBOOK, machine-checked code style. - F#:
Plumix.FSharpDSL andPlumix.Elmish(MVU) packages added and wired into CI.
v0.1.0-alpha.1..3 — 2026-04-26 and earlier (2026-03 .. 2026-04)
- Core framework:
Widget/Element/State,BuildOwner, inherited widgets,Scheduler/PipelineOwner, layers. - Rendering:
RenderBox/RenderFlex/RenderStack, proxy boxes, decorations,Containercomposition, box helpers (FittedBox,AspectRatio,OverflowBox,LimitedBox,Offstage,Align,Opacity,Transform,ClipRect). - Text/input:
Text/RenderParagraph,TextStyle/DefaultTextStyle,EditableText, IME/clipboard, focus system. - Gestures/scroll: gesture arena and recognizers,
Scrollable/Viewport/slivers,ListView/GridView,Scrollbar. - Navigation/semantics:
Navigator/routes/observers,Herotransitions, semantics tree and host bridge. - Material (M4 start): theming baseline, project split,
Scaffold/AppBar/Drawer, button set,IconButton,FAB,Checkbox/Switch/Radio(+ Cupertino adaptives),Icon,BottomNavigationBar,Card,ListTile,Tooltip. - Hosts/tooling:
SafeArea/MediaQuery, system bars, desktop/browser/Android/iOS hosts,dart_sample, docs, CI, MIT.
