Thaw UI: a Leptos component library with a Fluent Design lineage
An easy to use leptos component library
At a glance
- What is it?
- Thaw is a Rust component library for the Leptos framework, split across four crates and a demo application, with a compatibility table that ties each release line to a specific Leptos version. It suits a Leptos developer who wants ready made components in the Microsoft Fluent style, and its version matrix is the first thing to check.
- Who is it for?
- Thaw fits a Rust developer building a Leptos application who wants components modelled on Fluent Design and would rather start from the provided template repository than assemble a component set from scratch.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 169 days ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Four crates, not one, and the split tells you the architecture
Thaw is described as an easy to use Leptos component library, a UI component set based on Fluent Design and Leptos, and the cargo workspace shows how that is packaged. The workspace members list four library crates plus two applications. thaw is the umbrella crate, thaw_components holds the components themselves, thaw_macro is the procedural macro crate, and thaw_utils is the shared utilities. The two applications are demo and demo_markdown, and the examples directory is excluded from the workspace entirely with an exclude entry. That exclusion is a small but useful signal, because the examples are not built with the rest of the workspace and so cannot break a release build of the libraries. The workspace also pins a minimum Rust version of 1.79 in the shared package section, which is the floor you inherit the moment you depend on any of the crates.
The compatibility table is the real API of this project
Thaw's most important piece of documentation is a three row table, and it is worth reading before anything else. The 0.3 line, which lives on a dedicated thaw-v0.3 branch, is compatible with Leptos 0.6. The 0.4 line on the thaw-v0.4 branch works with Leptos 0.7. The 0.5-beta line, which is the main branch, targets Leptos 0.8. So the version of Leptos in your project picks the branch of Thaw you should be on, and the table is the mechanism for that decision. The consequence for a team is that Thaw does not move with your Leptos upgrade automatically. Moving from Leptos 0.7 to 0.8 means moving from the 0.4 branch to the 0.5-beta branch, and 0.5-beta is a beta line, so the upgrade path lands you on a less settled API than where you started.
What you actually depend on, and the version skew between the crates
The workspace dependency table is short enough to read in one screen, and it is where the crate versions live. Each of the four internal crates is declared with both a version and a path, and the versions are not in step with each other.
thaw = { version = "0.5.0-beta", path = "./thaw" }
thaw_components = { version = "0.4.0-beta", path = "./thaw_components" }
thaw_macro = { version = "0.1.0", path = "./thaw_macro" }
thaw_utils = { version = "0.2.0-beta", path = "./thaw_utils" }Only thaw_macro is on a plain numeric version. The umbrella crate and the components and utilities crates are all on beta versions, and note that thaw_components sits at 0.4.0-beta while thaw itself is at 0.5.0-beta, so the umbrella crate and the crate holding the components are not released in lockstep. For the framework side, the workspace pins leptos, leptos_meta and leptos_router at 0.8.5, reactive_stores at 0.2.5, and wasm-bindgen at 0.2.100 under a web heading. The wasm-bindgen pin is the one that matters for a browser target, since it is the boundary between Rust and the browser.
A starter template exists so you do not have to guess the project layout
The documentation is thin by design, and the project points you somewhere else for the things it does not spell out. For setting up a project, the readme says to refer to the thaw-template repository to create a project, which is a separate repository from the library. That is a common arrangement for a component library, because the correct project wiring, the feature flags, the build pipeline and the file structure are project decisions rather than library decisions, and a template expresses them once. The demo application in this repository plays the same role for development, and the tree shows a demo directory with its own Cargo.toml, a README, a Trunk.toml and an index.html alongside a demo/src directory, which tells you the demo is a Trunk based Leptos application. A second application, demo_markdown, sits in the workspace alongside it, and the repository also carries a changelogs directory next to a CHANGELOG file, a version-site.txt file, and configuration for leptosfmt and prettier.
Fluent Design is the model, and the references are named
The design lineage is stated rather than implied, with a component library based on Fluent Design. That has a practical consequence beyond appearance, because Fluent Design has its own set of interaction conventions around density, disclosure and focus, and a component library built on it will behave in ways a custom design system might not. The readme lists the resources it points to, and they are the sources you would check when you want to know why a component looks the way it does. The first is Fluent UI, the React implementation of the same design language, which is the closest reference for component behaviour. The second is Pigment, a Rust styling library. The third is Naive UI, a Vue component library. Naming Fluent UI and Pigment together in a Rust project tells you the intended shape, a Rust implementation borrowing interaction patterns from the React original while handling styling through a Rust library, and Naive UI is there as a third reference for a different ecosystem.
Community, maintenance state and what a 0.4.8 tag means
The project points to a documentation site hosted on Vercel and a Discord server for community, and the contribution section thanks the people who have already contributed with a contributors graph image. On maintenance, the picture is mixed and worth stating precisely. The repository is not archived and the last push was on 2026-05-07, but the recent release tags sit well behind that. The most recent is v0.4.8 from 2025-08-03, before it v0.5.0-beta from 2025-05-03 and v0.4.7 from 2025-05-03, and the ordering of those dates is itself interesting, since a beta tagged in May 2025 was followed by a 0.4.7 and then 0.4.8 rather than a 0.5.0 final. The project is MIT licensed with a LICENSE file at the top level. For a team adopting this, the practical read is that the 0.4 line is what has shipped releases and the 0.5 line is the one that tracks Leptos 0.8, so the choice of Leptos version decides which of the two you are living with.
Editorial conclusion
Thaw fits a Rust developer building a Leptos application who wants components modelled on Fluent Design and would rather start from the provided template repository than assemble a component set from scratch. It does not fit a project pinned to Leptos 0.6 or 0.7 today, because those lines live on dedicated branches and the current main branch targets 0.8, and it does not fit a team that needs a released, stable 1.0 crate, because the workspace pins most of its own crates to beta versions. Before you depend on it, read the compatibility table and pick the branch that matches your Leptos version, check which of thaw, thaw_components, thaw_macro and thaw_utils you actually pull in, and start from the thaw-template repository so your project layout matches what the library expects.
Frequently asked questions
What is Thaw UI?
Thaw is an open source Rust component library for the Leptos framework, described as an easy to use Leptos component library. Its components are based on Fluent Design, the design language behind Microsoft's Fluent UI.
Which Leptos version is compatible with which Thaw release?
The compatibility table maps three lines. Crate version 0.3 on the thaw-v0.3 branch is compatible with Leptos 0.6, version 0.4 on the thaw-v0.4 branch with Leptos 0.7, and 0.5-beta on the main branch with Leptos 0.8.
How do I start a project with Thaw?
The readme points you to the thaw-template repository to create a project rather than describing the setup inline. The repository also ships a demo application, with its own Cargo.toml, README, Trunk.toml and index.html, plus a demo_markdown application, both built as workspace members.
What are the crates that make up Thaw?
The workspace members are thaw, thaw_components, thaw_macro and thaw_utils, alongside the demo and demo_markdown applications, with the examples directory excluded from the workspace. The workspace also pins a minimum Rust version of 1.79.
Which projects does Thaw draw its design and styling from?
The readme lists three resources: Fluent UI, the React implementation of the same design language, Pigment, a Rust styling library, and Naive UI, a Vue component library.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/thaw-ui-thaw)Was this useful?