Skip to content
CAI
Software that uses CAICheck a score

fabulous-dev/Fabulous

55.7

Adequate · 28 September 2026

55.9k

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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

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.