Topcoat: A framework for building full-stack reactive web apps with Rust

carllerche1 pts1 comments

Announcing Topcoat: a framework for building full-stack reactive web apps with Rust | Tokio - An asynchronous Rust runtimeTABLE OF CONTENTS<br>2026<br>July 22 Announcing Topcoat: a framework for building full-stack reactive web apps with Rust<br>May 29 TokioConf 2026 videos are out, and save the date for 2027<br>May 14 Toasty 0.6.0 - What is new?<br>April 3 Toasty, an async ORM for Rust, is now on crates.io<br>March 18 Introducing dial9: a flight recorder for Tokio<br>March 12 Free TokioConf tickets for contributors and open source maintainers

More Blog Posts

Announcing Topcoat: a framework for building full-stack reactive web apps with Rust<br>July 22, 2026<br>Announcing Topcoat: a framework for building full-stack reactive web apps with Rust

Topcoat is a modular, batteries-included Rust framework for building full-stack, reactive web apps. It prioritizes simplicity and productivity. Topcoat is entirely server-rendered. Reactivity is added by rendering HTML snippets in the server and adding "reactive instructions" as metadata (similar in idea to HTMX).

Here is the "hello world" app with Topcoat:

#[tokio::main]<br>async fn main() {<br>topcoat::start(Router::builder().discover().build()).await.unwrap();

#[page("/")]<br>async fn home() -> Result {<br>view! {

"Hello world"<br>topcoat::dev::script()

hello(name: "World")

#[component]<br>async fn hello(name: &str) -> Result {<br>view! {<br>"Hello, " (name) "!"

Getting started guide

Motivation

Before getting into more of the technical details, it is worth discussing the motivation behind Topcoat. If you saw my TokioConf talk (the one where I predicted that Rust could become a top 3 language for all green-field development), none of this will be a surprise.

Three years ago, if I told you that Rust would be a great language to build web apps with, you probably would call me crazy, and rightfully so. After all, web apps aren't traditionally performance-sensitive applications. So, the right tool for the job would be one that lets you ship fast. Performance is a nice-to-have. Unsurprisingly, the richest web app ecosystems are in languages that put a heavy focus on productivity, like JavaScript, Ruby, and PHP.

However, AI has completely reshaped that calculus. AI erases learning barriers and productivity gaps. The difference in time it takes a modern coding AI tool to build something is primarily a factor of the available set of libraries and not the programming language. Even the operator's specific expertise becomes less important. I have watched experienced software engineers who have never written Rust before work with AI tools to build with Rust from day 1. I'm not talking about vibe coding, but using one's general-purpose engineering experience to work with an AI tool interactively to make progress while learning the language.

Now, I think Rust is a great language, and it has some really great properties (speed and reliability). However, that doesn't mean I think that you should switch to Rust if you already have a stack that works for you and you don't need Rust's performance and reliability (well, I do think you should, but I also know that is my love for Rust and not a practical suggestion). However, many organizations are adopting Rust because they have problems to solve that require a performance and reliable language. Organizations that have adopted Rust already have a lot of reason to stay with Rust for higher-level apps, not because they need the performance, but because they already have internal infrastructure (libraries, build systems, processes, ...) around that language, and minimizing the number of programming languages and tools within an organization does improve productivity.

So now, what we need to be productive with Rust for web apps is a rich library ecosystem. That is what I have been building. I started with Toasty, an ORM for Rust, because it is probably the hardest component. Toasty has been ready to use since April of 2026. The next step in the roadmap is a web framework, and that is where Topcoat comes in.

Late last year, I met Julien Scholz and was impressed by his sense of taste and passion for building a great web app framework for Rust, so I convinced him to take the time to build one: Topcoat.

Reactivity without WebAssembly

Frameworks like Leptos and Dioxus are excellent for creating highly interactive web applications using Rust by compiling your code to WebAssembly and running it in the browser. However, many applications do not require this level of interactivity. For those use cases, compiling to a separate target, worrying about bundle sizes and splitting, and serializing data across the client/server boundary become a burden. Topcoat pursues a simpler approach. All markup is rendered on the server, and so components can be async, access the database, or verify user permissions safely. To sprinkle in reactivity, it cross-compiles a subset of fully type-checked Rust expressions to JavaScript using a macro, allowing you to stay in Rust without touching...

rust topcoat apps framework building stack

Related Articles