
Fluent Design component library providing comprehensive UI controls, themed Mica/Acrylic layers, full RTL mirroring, reduced recompositions for performance, and decorated windows with native backdrops.
Fork of compose-fluent/compose-fluent-ui, maintained and updated on top of Nucleus (client-side decorated window, GraalVM native gallery builds).
Fluent Design UI library for Compose Multiplatform
Stable and in active use. The component set is broad, the public API is settled, and releases follow semantic versioning — breaking changes only land in a new major version.
Some APIs are still opt-in behind @ExperimentalFluentApi — the material/backdrop layer and parts
of a few components. Those may change in a minor release; the annotation tells you exactly which
ones, so nothing changes under you without a compiler warning.
Feedback and contributions are welcome.
| Target | Platform |
|---|---|
| desktop | Linux, macOS, Windows |
| iosArm64 | iPhone, iPad |
| iosSimulatorArm64 | iOS Simulator |
| androidTarget | Android Devices |
| wasmJs | Web Browsers |
| js | Web Browsers |
iosX64was dropped: Compose Multiplatform 1.11 no longer publishes artifacts for it.
This fork picks up compose-fluent/compose-fluent-ui, which is no longer maintained, and adds the following.
Every component that encodes a direction — a fill, a travel path, a caret, a gesture — is now
mirrored in LayoutDirection.Rtl instead of staying left-to-right:
ProgressBar fill and indeterminate segment travel, Switcher thumb travelSlider geometry, tick placement and drag gesturesRatingControl clip shapes, ColorPicker absolute dot offsets and reversed slider gradientsBreadcrumbBar, PipsPager, FlipView, ListItem, Scrollbar and FontIcon carets and chevronsThe approach is deliberate: rather than duplicating the geometry, the canvas is mirrored so the same LTR math produces the RTL result. The gallery has an LTR/RTL toggle in its title bar to check any component in both directions.
Colors, and the per-component style/shape holders) are annotated
@Immutable / @Stable, so composables reading them can skip.ProgressRing or ProgressBar no longer recomposes on
every frame, it only redraws.Scrollbar style allocation is hoisted out of the recomposition path.IntRange, ClosedFloatingPointRange and the kotlinx.datetime value types are declared stable
through a shared compose_stability.conf, which the Compose compiler
and the stability analyzer both read.compose-stability-analyzer is wired in
so a regression in class stability fails the build rather than silently costing frames
(./gradlew :fluent:stabilityDump to record a baseline, :fluent:stabilityCheck to verify it).
Recomposition tracing is available behind -PcomposeTrace=true, and compiler reports behind
-PcomposeReports=true.The desktop chrome was a hand-rolled AWT window driving Win32 through JNA. It is now
Nucleus-backed via the new decorated-window-fluent
module — see Window (desktop). That removes the JNA dependency and the
platform-specific title-bar code, and brings native window controls, the real Windows Mica/Acrylic
backdrop, native popup layers and window accessibility on Linux and macOS as well as Windows.
.deb, .dmg, .exe), so there is no
bundled JVM and startup is immediate.vX.Y.Z publishes every module to Maven Central and attaches the
three installers to a GitHub release. No snapshot channel.CanvasBasedWindow.implementation("dev.nucleusframework.composefluent:fluent:1.0.0")
implementation("dev.nucleusframework.composefluent:fluent-icons-extended:1.0.0") // If you want to use full fluent icons.
// Desktop only: client-side decorated window and dialog backed by Nucleus/Tao.
implementation("dev.nucleusframework.composefluent:decorated-window-fluent:1.0.0")Every release is published to Maven Central from a vX.Y.Z tag; check the
latest version.
Prebuilt native gallery installers (Linux .deb, macOS .dmg, Windows .exe) are attached to
each GitHub release, and the web
version is deployed to GitHub Pages.
import io.github.composefluent.component.*
@Composable
fun App() {
FluentTheme {
Mica(Modifier.fillMaxSize()) {
Column(Modifier.padding(24.dp)) {
Button(onClick = {}) {
Text("Hello Fluent Design")
}
}
}
}
}See gallery module for more details.
FluentTheme() is the context and entry point of the application, just like MaterialTheme
component packageMica and Layer are under background packagemica.base fillMica, Mica Alt, Acrylic) through
Nucleus WindowsBackdrop; blur-based fallback elsewherehazeSource/hazeEffect
App-level materials (Mica, Material, MaterialContainer) blur the content behind them on
every skiko target. The window-level backdrop, which lets the desktop wallpaper show through the
window itself, is Windows-only and comes from the decorated window; the gallery exposes it under
Settings → Window backdrop.
[x] Buttons
[x] Radio Button
[x] Toggle Switch
[x] Check Box
[x] Combo Box (Simple)
[x] Progress Bar
[x] Progress Ring
[x] Slider
[x] Text Field
[X] Text
[x] Color Picker
[x] Rating Control
[x] Pill Button
[x] Segmented Button
[x] Lite Filter
[x] List Item
[x] Grid View Item
[x] Flip View
[x] Pips Pager
If you need running on the Android 7.1 and below, you should enable core library desugar to avoid crash.
lightColors(accent = …) / darkColors(accent = …) derive the whole
shade set from any Color
Provided by the decorated-window-fluent module on top of
Nucleus:
FluentTheme colorsRole.Checkbox, Role.Switch,
Role.RadioButton, toggleable/selectable semantics, icon content descriptions)Slider semantics (still a TODO in the component)See CONTRIBUTION.md
This library is licensed under the Apache License 2.0.
The copyright of the icon assets (in io.github.composefluent.icons package) belongs to Microsoft.
This project is built upon the foundations laid by several remarkable open-source projects. We extend our sincere gratitude to the developers and maintainers of these projects for their invaluable contributions to the open-source community.
| Project | Description | License |
|---|---|---|
| Windows UI Kit (Figma) | Provided design mockups for controls. | CC BY 4.0 |
| JetBrains/compose-multiplatform | Provides the fundamental framework for Compose Multiplatform development. | Apache License 2.0 |
| Kotlin/kotlinx-datetime | Provides a unified clock API. | Apache License 2.0 |
| chrisbanes/haze | Offers essential implementations for acrylic and mica effects. | Apache License 2.0 |
| Project | Description | License |
|---|---|---|
| microsoft/fluentui-system-icons | Supplies the icon assets used in the project. | MIT License |
| DevSrSouza/svg-to-compose | Facilitates the conversion of SVG icons to Compose icons, aiding in the implementation of Fluent icons. | MIT License |
| Project | Description | License |
|---|---|---|
| NucleusFramework/Nucleus | Provides the decorated window and dialog, native window controls, the Windows Mica/Acrylic backdrop, window accessibility, OS dark-mode detection and the GraalVM native packaging of the gallery. | Apache License 2.0 |
| google/ksp | Along with KotlinPoet, helps with source code generation for examples and navigation logic. | Apache License 2.0 |
| square/kotlinpoet | Along with KSP, helps with source code generation for examples and navigation logic. | Apache License 2.0 |
| SnipMeDev/Highlights | Enables syntax highlighting for example code. | Apache License 2.0 |
| yshrsmz/BuildKonfig | Facilitates the generation of build configuration parameter classes. | Apache License 2.0 |
Fork of compose-fluent/compose-fluent-ui, maintained and updated on top of Nucleus (client-side decorated window, GraalVM native gallery builds).
Fluent Design UI library for Compose Multiplatform
Stable and in active use. The component set is broad, the public API is settled, and releases follow semantic versioning — breaking changes only land in a new major version.
Some APIs are still opt-in behind @ExperimentalFluentApi — the material/backdrop layer and parts
of a few components. Those may change in a minor release; the annotation tells you exactly which
ones, so nothing changes under you without a compiler warning.
Feedback and contributions are welcome.
| Target | Platform |
|---|---|
| desktop | Linux, macOS, Windows |
| iosArm64 | iPhone, iPad |
| iosSimulatorArm64 | iOS Simulator |
| androidTarget | Android Devices |
| wasmJs | Web Browsers |
| js | Web Browsers |
iosX64was dropped: Compose Multiplatform 1.11 no longer publishes artifacts for it.
This fork picks up compose-fluent/compose-fluent-ui, which is no longer maintained, and adds the following.
Every component that encodes a direction — a fill, a travel path, a caret, a gesture — is now
mirrored in LayoutDirection.Rtl instead of staying left-to-right:
ProgressBar fill and indeterminate segment travel, Switcher thumb travelSlider geometry, tick placement and drag gesturesRatingControl clip shapes, ColorPicker absolute dot offsets and reversed slider gradientsBreadcrumbBar, PipsPager, FlipView, ListItem, Scrollbar and FontIcon carets and chevronsThe approach is deliberate: rather than duplicating the geometry, the canvas is mirrored so the same LTR math produces the RTL result. The gallery has an LTR/RTL toggle in its title bar to check any component in both directions.
Colors, and the per-component style/shape holders) are annotated
@Immutable / @Stable, so composables reading them can skip.ProgressRing or ProgressBar no longer recomposes on
every frame, it only redraws.Scrollbar style allocation is hoisted out of the recomposition path.IntRange, ClosedFloatingPointRange and the kotlinx.datetime value types are declared stable
through a shared compose_stability.conf, which the Compose compiler
and the stability analyzer both read.compose-stability-analyzer is wired in
so a regression in class stability fails the build rather than silently costing frames
(./gradlew :fluent:stabilityDump to record a baseline, :fluent:stabilityCheck to verify it).
Recomposition tracing is available behind -PcomposeTrace=true, and compiler reports behind
-PcomposeReports=true.The desktop chrome was a hand-rolled AWT window driving Win32 through JNA. It is now
Nucleus-backed via the new decorated-window-fluent
module — see Window (desktop). That removes the JNA dependency and the
platform-specific title-bar code, and brings native window controls, the real Windows Mica/Acrylic
backdrop, native popup layers and window accessibility on Linux and macOS as well as Windows.
.deb, .dmg, .exe), so there is no
bundled JVM and startup is immediate.vX.Y.Z publishes every module to Maven Central and attaches the
three installers to a GitHub release. No snapshot channel.CanvasBasedWindow.implementation("dev.nucleusframework.composefluent:fluent:1.0.0")
implementation("dev.nucleusframework.composefluent:fluent-icons-extended:1.0.0") // If you want to use full fluent icons.
// Desktop only: client-side decorated window and dialog backed by Nucleus/Tao.
implementation("dev.nucleusframework.composefluent:decorated-window-fluent:1.0.0")Every release is published to Maven Central from a vX.Y.Z tag; check the
latest version.
Prebuilt native gallery installers (Linux .deb, macOS .dmg, Windows .exe) are attached to
each GitHub release, and the web
version is deployed to GitHub Pages.
import io.github.composefluent.component.*
@Composable
fun App() {
FluentTheme {
Mica(Modifier.fillMaxSize()) {
Column(Modifier.padding(24.dp)) {
Button(onClick = {}) {
Text("Hello Fluent Design")
}
}
}
}
}See gallery module for more details.
FluentTheme() is the context and entry point of the application, just like MaterialTheme
component packageMica and Layer are under background packagemica.base fillMica, Mica Alt, Acrylic) through
Nucleus WindowsBackdrop; blur-based fallback elsewherehazeSource/hazeEffect
App-level materials (Mica, Material, MaterialContainer) blur the content behind them on
every skiko target. The window-level backdrop, which lets the desktop wallpaper show through the
window itself, is Windows-only and comes from the decorated window; the gallery exposes it under
Settings → Window backdrop.
[x] Buttons
[x] Radio Button
[x] Toggle Switch
[x] Check Box
[x] Combo Box (Simple)
[x] Progress Bar
[x] Progress Ring
[x] Slider
[x] Text Field
[X] Text
[x] Color Picker
[x] Rating Control
[x] Pill Button
[x] Segmented Button
[x] Lite Filter
[x] List Item
[x] Grid View Item
[x] Flip View
[x] Pips Pager
If you need running on the Android 7.1 and below, you should enable core library desugar to avoid crash.
lightColors(accent = …) / darkColors(accent = …) derive the whole
shade set from any Color
Provided by the decorated-window-fluent module on top of
Nucleus:
FluentTheme colorsRole.Checkbox, Role.Switch,
Role.RadioButton, toggleable/selectable semantics, icon content descriptions)Slider semantics (still a TODO in the component)See CONTRIBUTION.md
This library is licensed under the Apache License 2.0.
The copyright of the icon assets (in io.github.composefluent.icons package) belongs to Microsoft.
This project is built upon the foundations laid by several remarkable open-source projects. We extend our sincere gratitude to the developers and maintainers of these projects for their invaluable contributions to the open-source community.
| Project | Description | License |
|---|---|---|
| Windows UI Kit (Figma) | Provided design mockups for controls. | CC BY 4.0 |
| JetBrains/compose-multiplatform | Provides the fundamental framework for Compose Multiplatform development. | Apache License 2.0 |
| Kotlin/kotlinx-datetime | Provides a unified clock API. | Apache License 2.0 |
| chrisbanes/haze | Offers essential implementations for acrylic and mica effects. | Apache License 2.0 |
| Project | Description | License |
|---|---|---|
| microsoft/fluentui-system-icons | Supplies the icon assets used in the project. | MIT License |
| DevSrSouza/svg-to-compose | Facilitates the conversion of SVG icons to Compose icons, aiding in the implementation of Fluent icons. | MIT License |
| Project | Description | License |
|---|---|---|
| NucleusFramework/Nucleus | Provides the decorated window and dialog, native window controls, the Windows Mica/Acrylic backdrop, window accessibility, OS dark-mode detection and the GraalVM native packaging of the gallery. | Apache License 2.0 |
| google/ksp | Along with KotlinPoet, helps with source code generation for examples and navigation logic. | Apache License 2.0 |
| square/kotlinpoet | Along with KSP, helps with source code generation for examples and navigation logic. | Apache License 2.0 |
| SnipMeDev/Highlights | Enables syntax highlighting for example code. | Apache License 2.0 |
| yshrsmz/BuildKonfig | Facilitates the generation of build configuration parameter classes. | Apache License 2.0 |