Every bindable property of every control gets a chainable method with the same name,
and every event gets an On<EventName>. Your code reads like the visual
tree — with IntelliSense, refactoring and compile-time safety, and no XAML.
dotnet add package FmgLib.MauiMarkup
public partial class MainPage : ContentPage, IFmgLibHotReload
{
int count = 0;
public MainPage() => this.InitializeHotReload();
public void Build() => this.Content(
new VerticalStackLayout()
.Spacing(25).Padding(30).Center()
.Children(
new Label()
.Text("Hello, World!")
.FontSize(32)
.CenterHorizontal(),
new Button()
.Text("Click me")
.OnClicked(b => b.Text = $"Clicked {++count} times")
)
);
}
A real converter, not a toy: it understands attached properties, layout shorthands, bindings, styles and more — and tells you plainly when it can't translate something, instead of guessing.
Ask any agent for a MAUI page in C# markup and you get plausible code that doesn't compile —
invented method names, XAML habits transcribed literally, view models built inside
Build(). Ten installable skills state the real rules, so it derives
.Text() and .CenterHorizontal() instead of guessing.
Fetch https://fmglibmauimarkup.vodisoft.com/llms.txt and install the FmgLib.MauiMarkup AI skills.
Paste that into Claude Code, the Claude apps, the Agent SDK — anything that reads a
SKILL.md. MIT licensed, versioned with the library, or install by hand from the repo.
new Label()
.SetText("Hello")
.SetFontSize(30)
.HorizontalAlign("Center")
None of these methods exist.
new Label()
.Text("Hello")
.FontSize(30)
.CenterHorizontal()
Derived from the property names.
mauimarkup corexaml-migrationmvvmshellcollectionsstylinglocalizationthirdpartyhotreloadreviewOne language, one file, one mental model — the fluent API is generated from the MAUI surface itself, so it never lags behind.
Fluent methods are generated for the whole MAUI surface and stay in sync with the MAUI version you reference.
Implement IFmgLibHotReload, call InitializeHotReload(), and Build() re-runs on every edit — leak-free and crash-isolated.
Annotate with [MauiMarkup(typeof(...))] and the source generator produces the same API for Syncfusion, UraniumUI, SkiaSharp, ZXing and friends.
String paths or compiled Getter expressions, inline converters, typed multi-bindings, fallback and target-null values.
OnLight/OnDark, OnPlatform, OnIdiom and DynamicResource on any property, plus strongly-typed Style<T>.
JSON or RESX based, with instant runtime language switching.
38 pages, published straight from master. Merge a change upstream and it appears here on the next sync.