fabulous-dev/Fabulous
55.7
Adequate · 28 September 2026
55.9k
lines of production code
F#
primary language
2
measurements over time
What this system is
Fabulous is an F\# declarative UI framework that enables cross-platform application development for .NET MAUI and Avalonia. It implements a Model-View-Update architecture with a modern component-based system for local state management and efficient UI reconciliation. The system provides comprehensive bindings for native controls, navigation patterns, and media handling, supported by a unified monorepo structure targeting .NET 10.
Features
Add Avalonia navigation samples using Fabulous MVU
New sample applications have been added to demonstrate navigation patterns in Fabulous for Avalonia. The \ComponentNavigation\ sample shows how to manage navigation state using isolated MVU components with a shared \NavigationController\, while the \NavigationPath\ sample illustrates a centralized navigation stack approach. Both samples include three navigable pages (PageA, PageB, PageC) with argument passing and back-navigation support.
ComponentNavigation, NavigationPath · high confidence
Add Avalonia samples and templates using Fabulous
This change introduces a collection of new F\# sample applications and a project template for building Avalonia desktop and mobile apps with Fabulous. The samples demonstrate various UI patterns and capabilities, including a counter app, a drawing canvas with color and size pickers, a Game of Life simulation, a GitHub user client, multi-window management, and basic page navigation. It also includes complete implementations of Tetris (both a core logic module and a full Mvu app) and a testable app structure, alongside a blank template to serve as a starting point for new Avalonia projects.
(repo-wide) · high confidence
Add Calculator and HelloComponent MAUI samples
New F\#-based MAUI sample applications are now available in the samples directory. The Calculator sample demonstrates a stateful MVVM-style app using Fabulous.Maui, featuring a grid-based UI with arithmetic operations and platform-specific entry points for Android, iOS, MacCatalyst, Windows (WinUI), and Tizen. The HelloComponent sample provides a minimal example of rendering a custom Fabulous component within a MAUI application, also including the necessary platform boilerplate for all supported targets.
samples/maui · high confidence
Add F\# MAUI Windows startup support package
Introduces the FSharp.Maui.WinUICompat package to resolve Windows startup issues in F\# MAUI applications. The package provides a precompiled WinUI application base and a custom Main entry point, allowing F\# projects to correctly initialize the Windows App SDK runtime and XAML metadata provider without relying on C\#-specific build generation.
src/maui/FSharp.Maui.WinUICompat · high confidence
Add Fabulous bindings for .NET MAUI Maps and MediaElement controls
This change introduces new Fabulous widget libraries for .NET MAUI, specifically \Fabulous.MauiControls.Maps\ and \Fabulous.MauiControls.MediaElement\. For Maps, users can now render \Map\, \MapPin\, \MapCircle\, \MapPolygon\, and \MapPolyline\ widgets with support for properties like zoom, traffic, and selection, as well as events like map clicks and marker interactions. For MediaElement, users can play audio and video using a \MediaElement\ widget that exposes properties for source, autoplay, looping, and volume, along with a \Controller\ for programmatic playback control (play, pause, seek, stop) and events for media state changes.
(repo-wide) · high confidence
Automated screenshot capture for Avalonia and MAUI Android samples
New CI scripts have been added to automatically build and capture screenshots of Avalonia desktop samples and MAUI Android samples. The Avalonia script builds specified projects and uses xdotool/import to capture stable windows for each page, while the MAUI Android script builds signed APKs, installs them via ADB, and captures screenshots of gallery pages using screencap. This ensures visual regression testing for these sample applications in the CI pipeline.
eng/ci · high confidence
Introduce new Component-based architecture and thread-safe dispatch throttling
This change introduces a new component system within Fabulous.Core, adding core infrastructure files such as ComponentContext, State, Binding, EnvironmentObject, and ComponentBuilder to enable local state management and re-evaluation within UI components. It also adds a new DispatchThrottle module providing thread-safe, lifecycle-owning dispatchers with Leading, Latest, and Batch modes to limit how often values are forwarded. Additionally, the Sub module's subscription diffing logic has been optimized to use a mutable HashSet instead of an immutable Set to reduce allocations.
src/neutral/Fabulous.Core · high confidence
Introduction of onReceive component modifier for event subscriptions
The Fabulous.Core library now includes an \onReceive\ component modifier, allowing developers to attach event handlers directly to widgets within a component's builder. This new feature introduces an \OnReceive\ attribute definition and corresponding extension methods on \WidgetBuilder\ that subscribe to \IObservable\, \IEvent\, or \Event\ sources. The implementation ensures that subscriptions are properly managed—disposing of old handlers and setting up new ones—based on a stable identity key, which helps prevent memory leaks and unnecessary re-subscriptions during component renders.
Fabulous.Core · high confidence
New ColorPicker and DataGrid widget bindings for Fabulous.Avalonia
Developers can now use the ColorPicker and DataGrid controls in Fabulous.Avalonia applications. This change introduces the Fabulous.Avalonia.ColorPicker package, providing widgets for ColorView, ColorPicker, ColorSpectrum, ColorSlider, and ColorPreviewer, along with modifiers for properties like HSV color, alpha visibility, and spectrum shape. It also adds the Fabulous.Avalonia.DataGrid package, exposing the DataGrid widget with comprehensive event bindings for cell editing, selection changes, sorting, and scrolling in both Component and Mvu programming models.
src/avalonia · high confidence
New Fabulous.Avalonia sample applications added
Added new sample applications for Fabulous.Avalonia, including CounterApp, DrawingApp, MultiWindow, and BasicNavigation. These samples demonstrate core Fabulous patterns such as state management, UI composition, multi-window support, and basic navigation on desktop and mobile platforms (Android, iOS, and desktop).
samples/avalonia · high confidence
New Fabulous.MauiControls project template for .NET MAUI
Developers can now scaffold a new cross-platform .NET MAUI application using the Fabulous declarative UI framework via the \dotnet new fabulous-mauicontrols\ command. This new template, packaged as \Fabulous.MauiControls.Templates\, provides a complete F\# project structure including platform-specific entry points for Android, iOS, MacCatalyst, Windows (WinUI), and Tizen, along with a default blank view demonstrating Fabulous' state management and semantic accessibility features.
templates/maui · high confidence
New MAUI controls, navigation, and theming support
This release introduces a comprehensive set of new capabilities for Fabulous.MauiControls. It adds a route-based navigation stack (NavigationStack) for managing page history, a ThemeAware program module to handle light/dark mode changes, and new widget definitions for ProgressBar, ScrollView, and ContentPage (including safe area support). The update also implements a virtualized collection system (VirtualizedCollection) to efficiently render lists and grids using MAUI's data templates, and expands the VisualElement attribute library with new properties and animation modifiers.
Fabulous.MauiControls · high confidence
New landing page for the Fabulous website
The website now features a new landing page layout that highlights Fabulous's core capabilities, including declarative UI, Model-View-Update architecture, and functional programming with F\#. The page showcases the .NET ecosystem integration and provides clear entry points for users to get started with either .NET MAUI or Avalonia backends, along with community and sponsorship information.
website/layouts · high confidence
Removals
Removal of legacy Adapter and Program entry points
The legacy \Adapter\ class and the \Program\ module (containing \run\ and \run2\ methods) have been removed from the \src/Fabulous.XamarinForms\ directory. This deletion eliminates the previous mechanism for attaching the Fabulous runner to Xamarin.Forms elements, indicating a shift in how applications are initialized and how the framework integrates with the underlying UI layer.
src/Fabulous.XamarinForms · high confidence
Architecture
Introduce monorepo migration infrastructure and tooling
The repository now includes a dedicated \eng/monorepo\ directory that establishes the foundation for consolidating multiple Fabulous source repositories into a single monorepo. This change adds a set of Python and Bash scripts to manage the migration process: \import-repository.sh\ handles importing external repositories with full history using \git subtree\, while \validate-inventory.py\ and \repositories.json\ enforce the new directory structure and migration waves. Additional tooling includes \changelog.py\ for managing release notes, \generate-api-reference.py\ for building API documentation, \validate-doc-links.py\ for checking documentation integrity, \prepare-templates.py\ for updating template versions, and \validate-packages.py\ for verifying NuGet package contents. These tools support the transition from separate repositories to a unified build, test, and documentation pipeline.
eng/monorepo · high confidence
Repository consolidated into a single monorepo targeting .NET 10
The Fabulous core, .NET MAUI and Avalonia backends, extensions, templates, samples, tests, and documentation have been unified into a single repository. The core project and assembly are now named Fabulous.Core (while the NuGet package ID and F\# namespaces remain Fabulous), and all packages use the unified 10.0.x release line. The solution targets .NET 10, with the Avalonia backend upgraded to Avalonia 12 and the MAUI backend upgraded to MAUI 10. The repository structure is organized into src/neutral, src/maui, src/avalonia, samples, templates, docs, and website, with a single root solution file (Fabulous.sln) and centralized package management via Directory.Packages.props.
(repo-wide) · high confidence
Behavioural changes
Avalonia Gallery sample app rewritten in F\# with Fabulous
The Gallery sample application has been completely rewritten in F\# using the Fabulous framework, replacing the previous implementation. This new version features a hamburger menu navigation structure and includes dedicated pages for a wide range of Avalonia controls, such as Acrylic effects, Adorner layers, AsyncImage loading, AutoCompleteBox, ButtonSpinner, Buttons, Calendar, Canvas drawing, and Carousel. The app now supports dynamic theme switching, window transparency levels, and flow direction changes, and it conditionally includes premium controls like TreeDataGrid when the PREMIUM\_CONTROLS flag is enabled.
Gallery · high confidence
Avalonia templates now target .NET 10
The Fabulous.Avalonia project templates have been updated to target .NET 10. Users generating new projects will now receive solutions configured for the .NET 10 runtime, requiring the corresponding .NET 10 SDK and workloads to be installed on their development machines.
templates/avalonia · high confidence
Handle missing primary screen in TicTacToe
The TicTacToe sample now gracefully handles scenarios where the primary screen is not available. Instead of crashing, it falls back to using the first available screen from the system's screen list to calculate the board size, ensuring the application remains stable on configurations where the primary display might be disconnected or unavailable.
TicTacToe · high confidence
Introduce new Components API and update to .NET MAUI 10
The Fabulous.MauiControls library has been updated to target .NET MAUI 10, removing obsolete accelerator APIs and suppressing deprecation warnings. This release introduces a new Components API that allows UI sections to manage their own local state and re-evaluate independently, enabling faster, localized updates and supporting various state management patterns beyond the traditional MVU model. The update also includes new extension methods for app host building, helper modules for main-thread execution, and expanded widget builders for cells, brushes, and application lifecycle events.
src/maui/Fabulous.MauiControls · high confidence
Introduce the 'fabulous-theme' Hugo theme for the website
The website now uses a new Hugo theme named 'fabulous-theme' (previously located as fabulous.dev-theme). This change brings a complete visual overhaul, including a new design system with specific color palettes (e.g., \#1F1F2D primary, \#8AB7FF secondary) and typography (Poppins and Jost fonts). The theme implements a responsive layout with a sticky header, a mobile-friendly hamburger menu, and a 'spotlight' background effect using blurred colored circles. It also includes updated partials for the head, header, footer, and a custom 404 page featuring a robot image.
website/themes · high confidence
Removal of legacy MvuComponent architecture and core runtime modules
The legacy MvuComponent-based architecture has been removed from the Fabulous core. This change deletes the \Program.fs\, \Runner.fs\, \State.fs\, and \ViewElement.fs\ files, eliminating the previous \IProgram\, \IRunner\, and \IDispatcher\ interfaces, the global state store, and the \ViewElement\ record structure. Users relying on the older component model will need to migrate to the new component-based API introduced in this update.
src/Fabulous · high confidence
Test coverage
Added API sketch tests for Fabulous UI components and event handling; Added unit tests for MAUI widget reconciliation and navigation stack logic; Added unit tests for core Fabulous components.
Dependencies
Centralized dependency management and .NET 10 sample updates
The repository now uses a centralized package versioning strategy via Directory.Packages.props, defining versions for key libraries including Avalonia (12.x), Microsoft.Maui.Controls (10.0.100), FSharp.Core (10.0.100), and Microsoft.Extensions packages (10.0.11). Corresponding Avalonia sample projects have been updated to target .NET 10.0 and .NET 10.0-android, ensuring alignment with the new framework versions.
(dependencies) · high confidence
Updated Fabulous Avalonia templates to Avalonia 12.1.1 and F\# 10.0.100
The Fabulous Avalonia project templates (Blank, Desktop, and Multi-Platform) have been updated to use Avalonia version 12.1.1 and F\# Core version 10.0.100. This change ensures that new projects generated from these templates benefit from the latest platform features and language updates, while maintaining compatibility with the existing Fabulous.Avalonia integration across Android, iOS, Desktop, and Browser targets.
templates/avalonia/content · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 47 → 56 (+8.3)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.16) — scores are not directly comparable.
Lenses
- Code Health 73 → 72 (-0.3)
- Architecture 84 → 85 (+1.5)
- Maturity 81 → 81 (+0.0)
- Readiness 55 → 56 (+1.0)
- Security 27 → 45 (+17.2)
- Performance 70 → 70 (+0.0)
Resolved (27)
- Documentation: written for insiders (avalonia/Fabulous.Avalonia.ItemsRepeater/README.md)
- Documentation: written for insiders (avalonia/Fabulous.Avalonia.Labs/README.md)
- Duplicated block (11–12 lines × 3) (samples/avalonia/Gallery/Pages/RenderTransformPage.fs)
- Duplicated block (30–31 lines × 2) (samples/avalonia/Component/Navigation/NavigationPath/PageA.fs)
- Duplicated block (37–38 lines × 2) (samples/avalonia/Component/Navigation/NavigationPath/PageC.fs)
- Duplicated block (4–29 lines × 3) (samples/avalonia/Component/Navigation/NavigationPath/PageB.fs)
- Duplicated block (6 lines × 4) (samples/avalonia/Gallery/Pages/RenderTransformPage.fs)
- Duplicated block (83 lines × 2) (samples/avalonia/Component/Navigation/NavigationPath/NavigationState.fs)
- Further sole-owners (lower concentration)
- High: security finding (details withheld)
- Hotspot: samples/avalonia/Component/Tetris/App.fs (samples/avalonia/Component/Tetris/App.fs)
- Hotspot: samples/avalonia/Component/Tetris/Core.fs (samples/avalonia/Component/Tetris/Core.fs)
- Hotspot: samples/avalonia/Gallery/Pages/DialogsPage.fs (samples/avalonia/Gallery/Pages/DialogsPage.fs)
- Hotspot: samples/avalonia/Gallery/Pages/ListBoxPage.fs (samples/avalonia/Gallery/Pages/ListBoxPage.fs)
- Hotspot: samples/avalonia/Gallery/Pages/LottiePage.fs (samples/avalonia/Gallery/Pages/LottiePage.fs)
- Hotspot: samples/avalonia/Gallery/Pages/NumericUpDownPage.fs (samples/avalonia/Gallery/Pages/NumericUpDownPage.fs)
- Hotspot: samples/avalonia/Gallery/Pages/RadioButtonPage.fs (samples/avalonia/Gallery/Pages/RadioButtonPage.fs)
- Hotspot: samples/avalonia/Gallery/Pages/ScrollViewerPage.fs (samples/avalonia/Gallery/Pages/ScrollViewerPage.fs)
- Hotspot: samples/avalonia/Gallery/Pages/ToggleButtonPage.fs (samples/avalonia/Gallery/Pages/ToggleButtonPage.fs)
- Hotspot: samples/avalonia/Mvu/Tetris/App.fs (samples/avalonia/Mvu/Tetris/App.fs)
- …and 7 more
New (87)
- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (src/maui/FSharp.Maui.WinUICompat/README.md)
- Documentation: no project overview (README.md)
- Duplicated block (10 lines × 2) (samples/maui/Maps/HelloMap/App.fs)
- Duplicated block (10 lines × 2) (samples/maui/Navigation/BasicNavigation/Platforms/Android/MainApplication.fs)
- Duplicated block (10 lines × 2) (samples/maui/Navigation/BasicNavigation/Platforms/MacCatalyst/AppDelegate.fs)
- Duplicated block (10 lines × 2) (samples/maui/Navigation/BasicNavigation/Platforms/iOS/AppDelegate.fs)
- Duplicated block (10 lines × 2) (samples/maui/WinUICompat/HelloWorld.Fabulous/Platforms/Windows/Main.fs)
- Duplicated block (10 lines × 3) (samples/maui/Navigation/BasicNavigation/Platforms/Windows/App.fs)
- Duplicated block (106 lines × 2) (samples/maui/Components/TicTacComponent/App.fs)
- Duplicated block (11 lines × 2) (samples/maui/Maps/HelloMap/App.fs)
- Duplicated block (11–12 lines × 3) (samples/avalonia/Gallery/Pages/RenderTransformPage.fs)
- Duplicated block (12–14 lines × 2) (samples/maui/Components/TicTacComponent/App.fs)
- Duplicated block (13 lines × 6) (samples/avalonia/Mvu/Navigation/BasicNavigation/PageA.fs)
- Duplicated block (14 lines × 16) (samples/maui/Calculator/Platforms/Tizen/Main.fs)
- Duplicated block (14 lines × 3) (samples/maui/Components/MultipleMvus/MauiProgram.fs)
- Duplicated block (14 lines × 6) (samples/maui/Calculator/MauiProgram.fs)
- Duplicated block (14–23 lines × 2) (samples/maui/WinUICompat/HelloWorld.Fabulous/App.fs)
- Duplicated block (15 lines × 16) (samples/maui/Calculator/Platforms/Android/MainActivity.fs)
- Duplicated block (15 lines × 2) (samples/maui/Components/HelloComponent/Platforms/Tizen/Main.fs)
- …and 67 more
Changes since last survey
- 59 commits — 55 feature/other, 4 fixes
By area
- (repo) — 34 commits
- (root) — 10 commits
- .github/workflows — 3 commits
- docs/guides — 3 commits
- docs/avalonia — 2 commits
- docs/tutorials — 2 commits
- templates/avalonia — 2 commits
- docs/maui — 1 commit
- src/maui — 1 commit
- src/neutral — 1 commit
Notable commits
- fix: Merge branch 'main' into repo-assist/fix-dispatchthrottle-leading-error-handling-e4e5cb46a0bf90b5
- fix: Merge pull request #1303 from fabulous-dev/repo-assist/fix-dispatchthrottle-leading-error-handling-e4e5cb46a0bf90b5
- fix: Merge pull request #1356 from fabulous-dev/repo-assist/revert-fsharp-core-floor-1355-9fcf62df17cc6cca
- fix: Revert FSharp.Core version floor to 10.0.100
- change: 1
- change: Bump Avalonia package version to 12.1.2
- change: Bump BenchmarkDotNet and Microsoft.NET.Test.Sdk package versions
- change: Bump FSharp.Core to 10.1.401 and Microsoft.NET.Test.Sdk to 18.10.0
- change: Bump FSharp.Core to 10.1.401 and Microsoft.NET.Test.Sdk to 18.10.0
- change: Fix formatting in get-started.md for clarity
- change: Improve get-started.md formatting and instructions
- change: Merge branch 'main' into repo-assist/basics-release-checklist-fs0044-53a67e6b0515176e
- change: Merge branch 'main' into repo-assist/eng-benchmarkdotnet-testsdk-bump-9b29728f75239c56
- change: Merge branch 'main' into repo-assist/eng-fsharp-core-testsdk-bump-2026-09-10-fe04f3b73c490344
- change: Merge branch 'main' into repo-assist/improve-remove-redundant-self-opens-c8a799ce7cf92887
- change: Merge branch 'main' into repo-assist/improve-stackarray3-combine-aae090ea3b3be6cf
- change: Merge branch 'main' into repo-assist/improve-stackarray3-combine-aae090ea3b3be6cf
- change: Merge branch 'main' into repo-assist/perf-sub-hashset-db41176bcfb8f0c9
- change: Merge branch 'main' into repo-assist/perf-sub-hashset-db41176bcfb8f0c9
- change: Merge branch 'main' into repo-assist/test-stackarray3-coverage-6a68cbd0071a9c9c
- …and 39 more
Architecture
- Containers 0 added · 1 removed · contexts 0 added · 0 removed · edges 0 added · 0 removed
Removed containers (1)
- cli:FSharp.Maui.WinUICompat
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
fabulous-dev/Fabulous was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 5951b803fead180a77576774e6cd143d053d5cde — the exact code this score is about.
- Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-2d9048c36d26.