What is new in the release

Cross-platform user interfaces in Rust

FerroUI is a UI framework for Rust with XAML, a WinUI 3 theme and native platform backends for macOS, Windows, Linux (X11, Wayland and the framebuffer), iOS, Android and the browser: a retained-mode control library with styled properties, data binding, control themes and a composition renderer.

  • macOS
  • Windows
  • Linux X11
  • Wayland
  • Framebuffer
  • iOS
  • Android
  • Browser
The FerroUI Control Catalog with the WinUI 3 theme on Windows 11, in a window with the Mica backdrop: a navigation pane with the control categories and a home page of control cards
Cargo.toml
[dependencies]
ferroui-base = "={{version}}"
ferroui-controls = "={{version}}"
ferroui-desktop = "={{version}}"
ferroui-themes-winui = "={{version}}"
Highlights

One framework, from markup to pixels

Controls, styling, binding, layout and rendering in Rust, released together as one set of crates at one version.

XAML, at run time or compiled

Markup is loaded at run time, or compiled to Rust source by the build script of a crate, with the framework's markup extensions.

Declarative Rust API

User interfaces without XAML: builders for every control, the rsx! macro, signals, and components with hooks and a reconciler.

Five themes

WinUI 3 (the default), Fluent, Simple, macOS 26 and Android Material 3 Expressive, each for the whole control set.

WinUI controls and composition

Native WinUI controls such as NavigationView, InfoBar and NumberBox; acrylic and Mica materials, Reveal, theme shadows and connected animations.

Rich text

RichTextBlock and RichEditBox with a text object model, RTF and the rich clipboard, and an input method connection on every platform.

TreeDataGrid

Hierarchical and tabular data in one virtualizing view, with sorting, selection, editing and drag and drop.

LiveCharts2 charts

Cartesian and pie charts with LiveCharts2's measurement, paint and motion, in compiled XAML with live data; simple charts beside them.

MVVM with ReactiveUI

Rust ports of System.Reactive, DynamicData, Splat and ReactiveUI, with view models that are tested without a window.

Hot reload

Experimental: the literals of rsx!, XAML reloaded at run time with supported live components kept, and explicit Rust functions patched during development.

Developer tools

F12 opens the trees, the properties and where their values come from, styles, layout and routed events; an MCP server and a Chrome DevTools endpoint are opt-in.

Skia, with Vello experimental

Skia renders through Graphite on Metal, Ganesh on OpenGL, ANGLE, WebGL and Vulkan, or in software; HarfBuzz shapes text. A Vello backend is experimental.

Behaviors

Triggers and actions in markup: about 330 custom behaviors, input events, drag and drop, responsive classes and animations.

Samples

See it run, in the browser or on your machine

The browser builds below are the same Rust applications as on the desktop, compiled to WebAssembly and drawn into a canvas.

Applications

Live demos, each in a repository of its own except the catalog.

The Control Catalog with the WinUI 3 theme on Windows 11: a navigation pane and a grid of control cards
DesktopBrowseriOSAndroid

Control Catalog

Every control on its own page, in the WinUI 3 theme. The same catalog runs on the desktop, on iOS, on Android and in the browser.

Calculator in the Standard mode in the light and dark themes, and in the Scientific mode showing sin(30) = 0.5
DesktopBrowser

Calculator

Microsoft Calculator on FerroUI, with its original C++ calculation engine compiled unchanged, to WebAssembly in the browser. Standard, Scientific and Programmer modes.

A Klondike deal of Ferro Solitaire in the browser, on a green table
DesktopBrowser

Solitaire

Klondike, FreeCell and Spider, with XAML pages, vector playing cards, animated card movement and timed dealing.

Ember, a Hacker News reader, in the light desktop theme: the front page beside a story with its comments Ember, a Hacker News reader, in the dark desktop theme: the front page beside a story with its comments
DesktopBrowseriOSAndroid

Ember

An adaptive, offline-capable Hacker News reader in the WinUI 3 theme, with compiled XAML and composition animations.

FerroDesign editing a mobile banking design in the browser: layers on the left, phone screens on the canvas, properties on the right
DesktopBrowser

FerroDesign

A native design editor on the Vello backend: pages and layers, an infinite canvas, vector networks, auto-layout, components and prototypes.

In the repository

Run them from a clone of FerroUI with the command on each card.

Charts of the LiveCharts2 port: columns with a line, and stacked areas with a legend

LiveChartsDemo

Six charts in one compiled XAML view with live data: columns with a line, a doughnut, stacked areas, scatter, candlesticks and a gauge.

Pictured: the CartesianChart page of the Control Catalog, on the same chart controls.

cargo run -p livecharts-demo --features desktop --bin livecharts-demo

WinUI Gallery

The pinned WinUI Gallery catalog, 126 pages and 350 sample definitions with their original XAML, and native examples for a subset of the pages.

cargo run -p winui-gallery --features desktop
Designer Studio: an artboard with a dialog being designed, the layers on the left and the properties on the right

Designer Studio

A visual XAML designer built on FerroUI: an artboard with synchronized XAML, layers, properties, layout tools, preview stages and keyframe animation.

cargo run -p designer-studio
Six of the 7GUIs tasks: CRUD, Circle Drawer, Counter, Temperature Converter, Flight Booker and Timer

7GUIs

The seven tasks of the 7GUIs benchmark, each in three styles of the declarative API: builders, rsx! and components with hooks.

cargo run -p seven-guis-crud-macros
ViewGallery in the light theme variant: a colour spectrum beside a TreeDataGrid of programming languages ViewGallery in the dark theme variant: a colour spectrum beside a TreeDataGrid of programming languages

ViewGallery

The declarative API with styles, the theme variant and resources, transitions, a context menu, the colour picker and the TreeDataGrid.

cargo run -p view-gallery
ReactiveDemo on macOS: a search for serde in a crate browser with the WinUI 3 theme

ReactiveDemo

The getting-started sample of ReactiveUI: a crates.io browser on the WinUI 3 theme, with a view model, commands and bindings.

cargo run -p reactive-demo
Get started

From cargo new to a window

FerroUI is a set of crates released together at one version. Name the same version for every FerroUI crate, or generate a project from one of the templates.

  1. Install the requirements

    • Rust 1.89 or later (the browser needs 1.93 or later).
    • The first build downloads a prebuilt Skia for the target, or builds it from source where no prebuilt binary matches (Vulkan on Windows), and builds HarfBuzz from source with a C++ compiler; it can take a while.
    What each platform needs
    PlatformNeeds
    macOSmacOS 11 or later and the Xcode command line tools (the platform compiles an Objective-C++ library).
    Windowsx64 or ARM64, the MSVC build tools; libclang for ANGLE (the default feature angle); the feature vulkan builds Skia from source. Hosting in WinUI 3 needs the Windows App SDK 1.6 runtime and its bootstrap library beside the executable.
    LinuxThe development packages of fontconfig and FreeType. The system libraries (Xlib, GTK, GLib, EGL, Vulkan, Wayland, xkbcommon, libinput, libdrm, libgbm) are opened at run time; none is linked.
    iOSXcode with the iOS SDK and the targets aarch64-apple-ios and aarch64-apple-ios-sim; an application is bundled without an Xcode project (scripts/ios/bundle.sh).
    AndroidThe Android SDK and NDK, stable Rust with the target aarch64-linux-android, API level 26 or later; packaged without Gradle (scripts/android/apk.sh).
    BrowserThe target wasm32-unknown-emscripten, Emscripten and the pinned wasm-bindgen command-line tool (scripts/browser/setup.sh installs them).
  2. Start from a template

    One command creates a project with its theme, its first window and its tests, in XAML with MVVM or code-behind, with builders or with rsx!, or as a cross-platform repository. The templates list them with their options.

    Terminalsh
    cargo install cargo-generate
    cargo generate --git https://github.com/FerroUI/templates app --name my-app
  3. Or add the crates yourself

    A desktop application names the base library, the controls, the desktop entry point and a theme:

    Cargo.tomltoml
    [dependencies]
    ferroui-base = "={{version}}"
    ferroui-controls = "={{version}}"
    ferroui-desktop = "={{version}}"
    ferroui-themes-winui = "={{version}}"

    The WinUI 3 theme, ferroui-themes-winui (WinUITheme), is the default; the Fluent theme is ferroui-themes-fluent (FluentTheme), in place of WinUI 3 or beside it. One dependency can stand for all of them: the facade crate ferroui, with a prelude and features for the platforms, the themes and the backends. The declarative API is ferroui-view, MVVM is ferroui-reactiveui-controls and the developer tools are ferroui-diagnostics.

  4. Write a window

    Hello, World! in the WinUI 3 theme, in three of the ways FerroUI offers.

    A component with a button that counts its clicks; the count is a signal that the text of the button follows. From samples/HelloWorld.Macros.

    Cargo.tomltoml
    [dependencies]
    ferroui-base = "={{version}}"
    ferroui-view = { version = "={{version}}", features = ["desktop"] }
    ferroui-themes-winui = "={{version}}"
    Terminalsh
    cargo new hello-ferroui
    cd hello-ferroui
    cargo run
    src/main.rsrust
    use ferroui_base::layout::{HorizontalAlignment, VerticalAlignment};
    use ferroui_view::prelude::*;
    
    /// The content of the window.
    #[component]
    fn Hello() -> Element {
        let clicks = signal(0);
        rsx! {
            StackPanel { horizontal_alignment: HorizontalAlignment::Center, vertical_alignment: VerticalAlignment::Center, spacing: 12.0,
                TextBlock { text: "Hello, World!", font_size: 28.0 }
                Button { name: "Count", horizontal_alignment: HorizontalAlignment::Center, on_click: move |_| clicks.update(|c| *c += 1),
                    TextBlock { text: move || clicked_text(clicks.get()) }
                }
            }
        }
    }
    
    /// The text of the button after `clicks` clicks.
    fn clicked_text(clicks: i32) -> String {
        match clicks {
            1 => "Clicked 1 time".to_string(),
            _ => format!("Clicked {clicks} times"),
        }
    }
    
    fn main() {
        launch_themed(
            || ferroui_themes_winui::WinUITheme::new().as_style(),
            || window().title("Hello, World!").width(400.0).height(240.0).child(Hello()).into(),
            |_| {},
        );
    }
  5. Explore the repository

    Clone FerroUI to run the samples, the examples and the tests.

    Terminalsh
    git clone https://github.com/wieslawsoltes/FerroUI.git
    cd FerroUI
    
    # Hello, World! in XAML, and with builders, rsx! and hooks
    cargo run -p hello-world
    cargo run -p hello-world-builders
    cargo run -p hello-world-macros
    cargo run -p hello-world-hooks
    
    # The ControlCatalog sample application
    cargo run -p control-catalog-desktop
    
    # The gallery of the WinUI theme
    cargo run -p winui-theme-gallery --bin winui-theme-gallery
    
    # The tests of the workspace
    cargo test --workspace
App template

An application in a repository of its own

Solitaire, Ember, FerroDesign and Calculator are set up this way: FerroUI as a git submodule, its workspace dependencies and profiles copied into the application's workspace, and FerroUI's reusable workflow for CI and GitHub Pages. The guide is docs/apps.md. The cross-platform template generates this layout with desktop, browser, Android and iOS hosts.

Layouttext
MyApp/
  FerroUI/                     the submodule
  .cargo/config.toml           includes FerroUI/.cargo/config.toml
  .github/workflows/ci.yml     calls FerroUI's app.yml
  Cargo.toml                   the workspace, with the FerroUI blocks
  Cargo.lock                   committed (CI builds with --locked)
  src/... or MyApp/...         the crates of the application
  MyApp.Browser/               the browser host, with wwwroot/
  README.md, LICENSE, NOTICE.md
Terminalsh
git submodule add https://github.com/wieslawsoltes/FerroUI.git FerroUI

# Write the FerroUI blocks of Cargo.toml (CI runs it with --check)
python3 FerroUI/scripts/apps/sync-workspace.py

# Start from the lock file the framework is tested with
cp FerroUI/Cargo.lock Cargo.lock
cargo metadata --format-version 1 > /dev/null

# Publish the browser build with GitHub Pages
gh api -X POST repos/FerroUI/MyApp/pages -f build_type=workflow
.github/workflows/ci.ymlyaml
name: CI

on:
  push:
    branches: [main]
  pull_request:
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
  app:
    uses: wieslawsoltes/FerroUI/.github/workflows/app.yml@main
    with:
      test: |
        -p my-app
      check: |
        -p my-app-desktop
      browser-package: my-app-browser

The workflow checks the conventions, builds and tests under an X server, builds and smoke-tests the browser site, optionally packages Android and iOS, and deploys the site to GitHub Pages from main.

Templates

Start a project with cargo generate

Project and item templates in the spirit of the dotnet new templates of .NET UI frameworks: XAML with MVVM or code-behind, builders, rsx! with hooks, a cross-platform repository with desktop, browser, Android and iOS hosts, a control library, and the items you add to a project. Each project template asks for its theme.

Terminalsh
cargo install cargo-generate

# Pick a template from the list, or name it
cargo generate --git https://github.com/FerroUI/templates
cargo generate --git https://github.com/FerroUI/templates app --name my-app
cd my-app
cargo run

The templates live in FerroUI/templates, one folder per template, and are made with cargo-generate. Each option is a prompt, or --define name=value on the command line.

The single-crate templates name every FerroUI crate at =. The cross-platform template uses the layout of an application repository: FerroUI as a git submodule and its reusable CI workflow.

app Project

A desktop application in XAML with the MVVM pattern, as in samples/MiniMvvm and samples/ReactiveUIExample. The build script compiles the documents to Rust; the view model and the window come with tests.

  • src/App.xaml
  • src/views/MainWindow.xaml
  • src/view_models/main_window_view_model.rs
  • build.rs
Terminalsh
cargo generate --git https://github.com/FerroUI/templates app --name my-app
cd my-app
cargo run
Crates

The crates of a release

Every crate is released at the same version and depends on the others at exactly that version. Search by name or purpose, or narrow the list to a group.

The published FerroUI crates with their descriptions and links to crates.io and docs.rs
CrateDescriptionGroupLinks
ferroui-protranslate-core
New in
Framework-independent translation, culture and globalization services for FerroUICore
ferroui-protranslate-formats
New in
Loss-aware localization catalog import and export for ProTranslateCore
ferroui-system
New in
The parts of the .NET base class library that FerroUI and its reusable libraries share: thread-local variables for every target, events, property and collection change notification, cancellationCore
ferroui-base
New in
The base library of FerroUI: the property system, layout, input, styling, media, text, animation, data binding and the compositorCore
ferroui-reactive
New in
A port of Rx.NET (System.Reactive) for FerroUI: observable sequences, their operators, schedulers, disposables and subjects, independent of the user interfaceCore
ferroui-dynamic-data
New in
A port of DynamicData for FerroUI: reactive collections, change sets, observable caches and lists with their operators, independent of the user interfaceCore
ferroui-reactive-testing
New in
A port of Microsoft.Reactive.Testing for ferroui-reactive: the virtual-time test scheduler, recorded notifications, hot and cold test observables and their assertionsCore
ferroui-splat
New in
A port of Splat for FerroUI: the service locator with its dependency resolvers, logging, mode detection, feature usage tracking and the application builder, independent of the user interfaceCore
ferroui-dependency-injection
New in
Microsoft.Extensions.DependencyInjection for Rust: thread-local services, scopes, keyed resolution and constructor factories, independent of the user interfaceCore
ferroui-reactiveui
New in
A port of ReactiveUI for FerroUI, in its System.Reactive flavour with the run time of ReactiveUI.Binding: reactive objects, commands, property observation, bindings, view location, activation and routing for MVVM, independent of the user interfaceCore
ferroui-reactiveui-testing
New in
A port of ReactiveUI.Testing for ferroui-reactiveui: running code with test schedulers, the builders of test data and the helpers of tests of view modelsCore
ferroui
New in
FerroUI in one dependency: the facade crate that re-exports the common crates under short names, with a prelude and features that choose the platform, the theme and the backendsCore
ferroui-static-view-locator-macros
New in
The attributes #[static_view_locator] and #[static_view_mapping] of ferroui-static-view-locatorControls and themes
ferroui-controls
New in
The controls of FerroUI: the application model, top levels, the control set and automation peersControls and themes
ferroui-fonts-inter
New in
The Inter font family as an embedded font collection of FerroUIControls and themes
ferroui-livecharts
New in
LiveCharts2 chart calculation, geometry, interaction and animation for FerroUIControls and themes
ferroui-reactiveui-controls
New in
The integration of ReactiveUI with FerroUI: the scheduler of the dispatcher, property observation and command binding for FerroUI objects, activation, the reactive views and view hosts, the data-template hook, suspension and use_reactive_ui on the application builderControls and themes
ferroui-static-view-locator
New in
View locators generated at build time for FerroUI: view models mapped to views by naming convention, contracts and explicit mappings, without reflectionControls and themes
ferroui-treedatagrid-core
New in
The framework-neutral part of FerroUI's TreeDataGrid: flat and hierarchical sources, columns, rows, sorting, expansion, and row and cell selectionControls and themes
ferroui-view-macros
New in
The rsx! and #[component] macros of ferroui-view, the declarative Rust API of FerroUIControls and themes
ferroui-xaml-behaviors-animations
New in
Reusable animations of the FerroUI behaviors: key-frame animation factories and runners, composition animation catalogs (entrance, exit, attention and motion presets), fade, scale, rotate, slide, tilt, orbit and parallax effects, the selection indicator animation and transition helpersControls and themes
ferroui-controls-charts
New in
Native FerroUI charts: line, area and bar series, category and calendar axes, legends, markers and labelsControls and themes
ferroui-controls-livecharts
New in
Native FerroUI chart controls using the LiveCharts2 Rust chart enginesControls and themes
ferroui-controls-repeater
New in
The ItemsRepeater of FerroUI, a port of the Repeater of WinUI: virtualizing stack, uniform grid, flow and lined-flow layouts, element factories, recycling, phasing, transitions and selectionControls and themes
ferroui-dialogs
New in
The managed dialogs of FerroUI: the managed file chooser, the managed storage provider and the about dialogControls and themes
ferroui-protranslate
New in
Native FerroUI bindings, attached properties and XAML extensions for ProTranslate localizationControls and themes
ferroui-themes-fluent
New in
The FerroUI Fluent theme: control themes, colour palettes and resources for the control set, in light and dark variantsControls and themes
ferroui-controls-treedatagrid
New in
The TreeDataGrid control of FerroUI: hierarchical and tabular data in one virtualizing view, with sorting, selection, editing, drag and drop and its control themesControls and themes
ferroui-themes-macos
New in
The FerroUI macOS 26 theme: compiled control templates, semantic materials and accessible motionControls and themes
ferroui-themes-material
New in
Android Material 3 Expressive theme for FerroUI with compiled XAML, light and dark color schemes, expressive motion and touch-first control templatesControls and themes
ferroui-themes-simple
New in
The FerroUI Simple theme: control themes and resources for the control set, in light and dark variantsControls and themes
ferroui-controls-color-picker
New in
The colour picker library of FerroUI: ColorPicker, ColorView, ColorSpectrum, ColorSlider, ColorPreviewer, the colour palettes and their control themesControls and themes
ferroui-devtools
New in
Opt-in Chrome DevTools Protocol target for FerroUI applicationsControls and themes
ferroui-themes-winui
New in
The FerroUI WinUI theme: the control styles, templates and theme resources of WinUI 3, in light, dark and high contrast variantsControls and themes
ferroui-diagnostics
New in
The developer tools of FerroUI: the logical and visual trees, the properties and their value sources, routed events, the layout explorer and screenshots of a running applicationControls and themes
ferroui-controls-inking
New in
The inking controls of FerroUI, a port of WinUI's: InkCanvas, the InkPresenter services, stencils, custom drying, InkToolbar with its WinUI theme, the portable ink format and the clipboard, and the ink services of WindowsControls and themes
ferroui-view
New in
A declarative Rust API for FerroUI user interfaces without XAML: element builders generated for every control, an rsx! macro, signals that properties follow, components that run again with hooks and a reconcilerControls and themes
ferroui-xaml-interactivity
New in
The behaviors object model of FerroUI: attached behavior collections, behaviors, triggers and actions on objects and styled elements, their lifecycle, and the templates that let styles set themControls and themes
ferroui-xaml-interactions
New in
The classic triggers and actions of the FerroUI behaviors: event, data and timer triggers, property, method and command actions, clipboard actions and storage pickersControls and themes
ferroui-xaml-interactions-custom
New in
The custom behaviors, triggers and actions of FerroUI: about 330 behaviors for specific controls, input, focus, validation, commands, windows, dialogs and servicesControls and themes
ferroui-xaml-interactions-draganddrop
New in
Drag and drop behaviors of FerroUI: dragging context data, typed data, panels and files between controls and with the system, drop targets with handlers and commands, file and text drops, tree view drop handling, and an in-process managed drag with a preview windowControls and themes
ferroui-xaml-interactions-draggable
New in
Draggable behaviors of FerroUI: moving elements in a canvas, in a grid or by a translation, reordering the items of an items control with an optional placeholder, scrolling a scroll viewer while dragging, and the styles that make tab controls, list boxes, canvases and grids draggableControls and themes
ferroui-xaml-interactions-events
New in
Behaviors and triggers of the input events of FerroUI: a trigger and an abstract behavior per pointer, key, focus, gesture, text input and drag-and-drop routed eventControls and themes
ferroui-xaml-interactions-reactiveui
New in
The ReactiveUI behaviors of FerroUI: actions that navigate a ReactiveUI router (navigate, navigate back, navigate and reset, clear the stack, navigate to a view model the service locator resolves) and the trigger that runs its actions when a ReactiveUI interaction is handledControls and themes
ferroui-xaml-interactions-responsive
New in
Responsive behaviors of FerroUI: style classes switched by the width, the height and the aspect ratio of a controlControls and themes
ferroui-xaml-behaviors
New in
The behaviors, triggers and actions of FerroUI in one crate: the object model, the classic interactions, the custom behaviors, events, drag and drop, responsive classes and animations, each behind a featureControls and themes
ferroui-build-scan
New in
The build-time type model of FerroUI and the source scanner that fills it: what a build script exports of a crate, linking nothing of the frameworkMarkup and build
ferroui-static-view-locator-build
New in
The generator of ferroui-static-view-locator: the build-script part that maps the view models of a crate to its views and writes the locatorsMarkup and build
ferroui-markup
New in
The markup support of FerroUI: binding path parsing and reflection-style bindingsMarkup and build
ferroui-markup-xaml
New in
The FerroUI XAML runtime library: markup extensions, templates, includes, converters and the runtime helpers of compiled XAMLMarkup and build
ferroui-protranslate-build
New in
Deterministic typed translation catalog generation and localization diagnostics for FerroUIMarkup and build
xamlx
New in
Rust port of the backend-independent part of XamlX (XAML compiler library)Markup and build
ferroui-markup-xaml-loader
New in
The FerroUI XAML language definition and compiler extensions built on xamlxMarkup and build
ferroui-build
New in
Build-script support of FerroUI: compiles the markup documents of a crate to Rust source and embeds its assetsMarkup and build
ferroui-markup-xaml-winui
New in
WinUI XAML compatibility of FerroUI: an opt-in importer from WinUI XAML, its run-time loading entry points and the x:Bind property-path adapterMarkup and build
ferroui-pretext-contracts
New in
Backend contracts for prepared text and glyph outputRender and text
ferroui-pretext
New in
Reusable text preparation, Unicode wrapping and rich inline layoutRender and text
ferroui-pretext-layout
New in
Platform-neutral wrap metrics and obstacle-aware column flow for prepared textRender and text
ferroui-harfbuzz
New in
The HarfBuzz text shaping backend of FerroUIRender and text
ferroui-metal
New in
The Metal platform contracts of FerroUI: the device, the surface of a top-level and the import of external objectsRender and text
ferroui-opengl
New in
The OpenGL platform contracts of FerroUI: contexts, surfaces and the entry points the framework itself usesRender and text
ferroui-pretext-media
New in
FerroUI font and shaping services for prepared textRender and text
ferroui-vulkan
New in
The Vulkan platform contracts of FerroUI: the instance, the device, the graphics context, the swap chain render target of a surface and the import of external objectsRender and text
ferroui-skia
New in
The Skia render backend of FerroUI: Graphite on Metal, Ganesh on WebGL and rasterRender and text
ferroui-vello
New in
The Vello render backend: the render contracts of the base library on kurbo, peniko and the renderers of the Vello projectRender and text
ferroui-microcom
New in
The COM-style interop runtime of FerroUI, which its native platform backend is built onPlatforms
ferroui-freedesktop
New in
The FreeDesktop services of FerroUI for Linux desktops: D-Bus input methods, portals, menus, tray icons and accessibility over AT-SPIPlatforms
ferroui-android
New in
The Android platform of FerroUI: a view in an activity, rendered through EGL or to the native windowPlatforms
ferroui-native
New in
The macOS platform of FerroUI: windows, input, clipboard, drag and drop, menus and Metal and OpenGL graphics over a native libraryPlatforms
ferroui-headless
New in
The headless platform of FerroUI: windows without a screen, driven by simulated input, for testsPlatforms
ferroui-headless-vnc
New in
The VNC server of the headless platform of FerroUI: an application runs without a screen and is seen and driven through a VNC viewerPlatforms
ferroui-ios
New in
The iOS platform of FerroUI: a UIKit view, touch input and Metal and OpenGL ES graphicsPlatforms
ferroui-linuxframebuffer
New in
The Linux framebuffer platform of FerroUI: one full-screen top-level on a framebuffer device or a KMS output, with input from the kernel's input devicesPlatforms
ferroui-browser
New in
The browser platform of FerroUI: a top-level in an element of a web page, rendered with WebGL or to a 2D canvasPlatforms
ferroui-win32
New in
The Windows platform backend: windows, the message loop, input, screens and the software surface over the Win32 APIPlatforms
ferroui-winui
New in
FerroUI content inside a WinUI 3 (Windows App SDK) application: a swap chain panel with pointer, keyboard and text input, cursors, drag and drop and automationPlatforms
ferroui-x11
New in
The X11 windowing platform of FerroUI for LinuxPlatforms
ferroui-desktop
New in
The desktop entry point of FerroUI: platform detection with the default render and text shaping backendsPlatforms
ferroui-wayland
New in
The Wayland platform of FerroUI for Linux: toplevels and popups over xdg-shell, pointer, keyboard, touch and text input, clipboard and drag and drop, rendered through shared memory, EGL or a dmabuf swap chainPlatforms
ferroui-protranslate-studio
New in
Portable localization catalog editing, persistence and AI translation workflowTools
ferroui-remote-protocol
New in
The remote protocol of FerroUI: the messages of the previewer and of remote rendering, their BSON serialization and the transports that carry themTools
ferroui-hot-patch
New in
Development-only FerroUI hot-patch supportTools
microcom-codegen
New in
Code generator of the FerroUI interop runtime: a C++ header and Rust bindings from an interface definition fileTools
ferroui-hot-reload
New in
Development-only FerroUI hot-reload supportTools
ferroui-inspect
New in
Opt-in application inspection core for FerroUI, shared by its MCP server and its Chrome DevTools Protocol endpointTools
ferroui-mcp
New in
Opt-in application inspection MCP server for FerroUITools
ferroui-designer-support
New in
Designer support of FerroUI: the loader of the previewed window and the previewer that talks to an IDE over the remote protocolTools
Project status

Where FerroUI stands

FerroUI runs on macOS, Windows, Linux (X11, Wayland and the framebuffer), iOS, Android and in the browser. It was verified in continuous integration, in virtual machines, in the iOS simulator and on the Android emulator, not on a range of real devices.

API within 0.4

Within 0.4 the public API is kept; 0.5.0 may change it. The work towards 0.5 is published as previews, which may change any part of the public API.

Skia is the reference

Skia is the default and reference renderer, with HarfBuzz for text shaping.

Vello is experimental

The Vello backend has CPU, hybrid and GPU modes and is measured against Skia; its open work is in vello-backend.md.

Hot reload is experimental

A development engine with explicit adapters and release gates; parts of the build integration of XAML are open.

What works on each platform
PlatformWhat works
macOSWindows, input and input methods, clipboard, drag and drop, menus, tray icon, storage pickers, accessibility; Metal (default), OpenGL and software rendering
WindowsWindows, input methods and the input pane, clipboard and drag and drop, file dialogs, tray icon, UI Automation; software, ANGLE, WGL, DirectComposition, Windows.UI.Composition (with blur, acrylic and Mica) and a DXGI swap chain; Vulkan behind a feature
WinUI 3 hostingFerroUI content in a swap chain panel of a WinUI 3 window, with input, text input, cursors, drag and drop and automation
Linux, X11Input methods (XIM, IBus, Fcitx), clipboard, drag and drop, desktop portals, GTK file dialogs, menus and tray icon over D-Bus, accessibility over AT-SPI; software, GLX, EGL and Vulkan
Linux, WaylandOpt-in: toplevels with server-side or drawn decorations, popups, pointer, keyboard, touch and text input, clipboard, drag and drop, fractional scaling; shared memory, EGL or a dmabuf swap chain
Linux framebufferOne full-screen view on /dev/fb0 or a KMS output (OpenGL through EGL on GBM), with input through libinput or the event devices
iOSA view over Metal or OpenGL ES, touch, keyboard and text input, clipboard, storage, accessibility
AndroidA view over EGL, software or Vulkan, touch, keyboard and the input method, lifecycle, clipboard, storage, accessibility
BrowserA view in a web page rendered with WebGL 2 or a 2D canvas, input, clipboard, storage; an opt-in build renders from a worker thread
HeadlessWindows without a screen for tests, and a VNC server to see and drive an application remotely