<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/carl-lerche-s-topcoat-0-9-is-the-rails-for-rust-bet-dhh-s-keynote-accidentally-started-98lj9z3p7" -->

---
title: Carl Lerche's Topcoat 0.9 is the Rails-for-Rust bet...
description: Carl Lerche, a former Rails core contributor, has released version 0.9 of Topcoat, a batteries-included full-stack Rust web framework positioned as a...
canonical: https://daily.dev/posts/carl-lerche-s-topcoat-0-9-is-the-rails-for-rust-bet-dhh-s-keynote-accidentally-started-98lj9z3p7
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Carl Lerche's Topcoat 0.9 is the Rails-for-Rust bet DHH's keynote accidentally started | daily.dev
og:description: Carl Lerche, a former Rails core contributor, has released version 0.9 of Topcoat, a batteries-included full-stack Rust web framework positioned as a...
og:url: https://daily.dev/posts/carl-lerche-s-topcoat-0-9-is-the-rails-for-rust-bet-dhh-s-keynote-accidentally-started-98lj9z3p7
og:image: https://api.daily.dev/og/posts/98lJ9z3p7.png
og:image:alt: Carl Lerche's Topcoat 0.9 is the Rails-for-Rust bet DHH's keynote accidentally started
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Carl Lerche's Topcoat 0.9 is the Rails-for-Rust bet DHH's keynote accidentally started

**[Trends](https://daily.dev/sources/trends)** · 2 min read · 4 upvotes · 0 comments

## Summary

Carl Lerche, a former Rails core contributor, has released version 0.9 of Topcoat, a batteries-included full-stack Rust web framework positioned as a Rails-style alternative to WebAssembly-based frameworks like Leptos and Dioxus. Topcoat compiles client-side code to JavaScript rather than WASM, defaults to server-side rendering with opt-in reactivity via 'shard' functions, and streams live updates over WebSockets using `live!` and `emit!` macros. Its ORM, Toasty, gained an `update!` macro for atomic updates, JSONB support in PostgreSQL, and polymorphic relations via enums. Community reaction is mixed: reviewers like the approachable syntax and simpler mental model, but WASM advocates argue Leptos still wins for canvas-heavy or fully client-side Rust apps, calling Topcoat a good starting point rather than a replacement.

## Content

DHH's keynote apparently lit a fuse. Carl Lerche — former Rails core contributor — used the fallout to explain why he's building Topcoat, a batteries-included full-stack Rust web framework that just shipped v0.9. The timing is deliberate. The framing is pointed.

The 0.9 release is genuinely interesting. Topcoat takes a different bet than Leptos or Dioxus: it compiles client-side code to JavaScript instead of WebAssembly. That's a philosophical choice as much as a technical one. The framework defaults to server-side rendering with opt-in reactivity — think HTMX-style server round trips via "shard" functions — rather than pushing you toward a full SPA. Live updates stream through WebSockets using `live!` and `emit!` macros, with suspense-like loading states built in.

The ORM layer, Toasty, also got real work: an `update!` macro for atomic field updates, first-class JSONB support in PostgreSQL, and a polymorphic relations pattern using enums.

The community reaction is split in a familiar way. Reviewers praise Topcoat's approachability — the view macro syntax is clean, the mental model is simple, and it's genuinely friendlier to newcomers than the Leptos/Dioxus ecosystem. But the JS compilation target is where people pump the brakes. Leptos loyalists point out that WebAssembly still wins for canvas-heavy apps and anything needing full client-side Rust. The conclusion from most reviewers: good starting point, not yet a replacement.

What's actually interesting here is the positioning. Lerche isn't trying to out-Leptos Leptos. He's making a Rails argument in Rust — convention over configuration, server-first, real-time as a first-class feature rather than an afterthought. Whether that resonates depends entirely on whether you think the Rust web ecosystem needs another WASM framework or a different kind of framework entirely.

The DHH connection gives this a sharper edge than a typical framework release. Lerche is explicitly entering a conversation about what "full-stack" should mean, and Topcoat is his answer.

## Questions this post answers

### What is Topcoat 0.9 and how does it differ from Leptos or Dioxus?

Topcoat 0.9 is a full-stack Rust web framework built by former Rails core contributor Carl Lerche that compiles client-side code to JavaScript instead of WebAssembly, unlike Leptos or Dioxus. It defaults to server-side rendering with opt-in reactivity through 'shard' functions, HTMX-style server round trips, and live updates over WebSockets via `live!` and `emit!` macros with built-in suspense-like loading states.

_Developers weighing Rust web framework options can follow releases like this one on daily.dev._

### What new ORM features shipped with Topcoat 0.9's Toasty layer?

Toasty, Topcoat's ORM, added an `update!` macro for atomic field updates, first-class JSONB support in PostgreSQL, and a polymorphic relations pattern implemented using enums in version 0.9. These changes strengthen the ORM's database capabilities alongside the broader framework release.

_Anyone tracking Rust ORM capabilities can keep up with changes like these on daily.dev._

### Is Topcoat a replacement for Leptos in the Rust web ecosystem?

Not yet, according to most reviewers. Topcoat is considered more approachable for newcomers with a cleaner view macro syntax and simpler mental model, but WebAssembly still outperforms it for canvas-heavy applications and anything requiring full client-side Rust, since Topcoat compiles to JavaScript rather than WASM.

_Developers deciding between Rust web frameworks can compare tradeoffs like these on daily.dev._

## Similar posts on daily.dev

- [Announcing Topcoat: a framework for building full-stack reactive web apps with Rust](https://daily.dev/posts/announcing-topcoat-a-framework-for-building-full-stack-reactive-web-apps-with-rust-rfcymwhic) · Tokio · 20 upvotes · 1 comments
- [GitHub - tokio-rs/topcoat: A batteries-included framework for building web apps](https://daily.dev/posts/github---tokio-rs-topcoat-a-batteries-included-framework-for-building-web-apps-vvuisd732) · Hacker News · 4 upvotes · 0 comments

---

Tags: [#rust](https://daily.dev/tags/rust), [#webassembly](https://daily.dev/tags/webassembly)

[View this post on daily.dev](https://daily.dev/posts/carl-lerche-s-topcoat-0-9-is-the-rails-for-rust-bet-dhh-s-keynote-accidentally-started-98lj9z3p7)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Carl Lerche's Topcoat 0.9 is the Rails-for-Rust bet DHH's keynote accidentally started","url":"https://daily.dev/posts/carl-lerche-s-topcoat-0-9-is-the-rails-for-rust-bet-dhh-s-keynote-accidentally-started-98lj9z3p7","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/carl-lerche-s-topcoat-0-9-is-the-rails-for-rust-bet-dhh-s-keynote-accidentally-started-98lj9z3p7"},"datePublished":"2026-09-24T20:07:34.655Z","dateModified":"2026-09-24T20:08:18.409Z","description":"Carl Lerche, a former Rails core contributor, has released version 0.9 of Topcoat, a batteries-included full-stack Rust web framework positioned as a...","isAccessibleForFree":true,"articleSection":"Trends","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Trends","logo":"https://media.daily.dev/image/upload/s--ZfSp3asX--/f_auto,q_auto/v1780996004/logos/trends?_a=BAMAMiWQ0","url":"https://daily.dev/sources/trends"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/carl-lerche-s-topcoat-0-9-is-the-rails-for-rust-bet-dhh-s-keynote-accidentally-started-98lj9z3p7","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":4},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"rust,webassembly","timeRequired":"PT2M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Trends","item":"https://daily.dev/sources/trends"},{"@type":"ListItem","position":3,"name":"Carl Lerche's Topcoat 0.9 is the Rails-for-Rust bet DHH's keynote accidentally started"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/carl-lerche-s-topcoat-0-9-is-the-rails-for-rust-bet-dhh-s-keynote-accidentally-started-98lj9z3p7#faq","mainEntity":[{"@type":"Question","name":"What is Topcoat 0.9 and how does it differ from Leptos or Dioxus?","acceptedAnswer":{"@type":"Answer","text":"Topcoat 0.9 is a full-stack Rust web framework built by former Rails core contributor Carl Lerche that compiles client-side code to JavaScript instead of WebAssembly, unlike Leptos or Dioxus. It defaults to server-side rendering with opt-in reactivity through 'shard' functions, HTMX-style server round trips, and live updates over WebSockets via `live!` and `emit!` macros with built-in suspense-like loading states. Developers weighing Rust web framework options can follow releases like this one on daily.dev."}},{"@type":"Question","name":"What new ORM features shipped with Topcoat 0.9's Toasty layer?","acceptedAnswer":{"@type":"Answer","text":"Toasty, Topcoat's ORM, added an `update!` macro for atomic field updates, first-class JSONB support in PostgreSQL, and a polymorphic relations pattern implemented using enums in version 0.9. These changes strengthen the ORM's database capabilities alongside the broader framework release. Anyone tracking Rust ORM capabilities can keep up with changes like these on daily.dev."}},{"@type":"Question","name":"Is Topcoat a replacement for Leptos in the Rust web ecosystem?","acceptedAnswer":{"@type":"Answer","text":"Not yet, according to most reviewers. Topcoat is considered more approachable for newcomers with a cleaner view macro syntax and simpler mental model, but WebAssembly still outperforms it for canvas-heavy applications and anything requiring full client-side Rust, since Topcoat compiles to JavaScript rather than WASM. Developers deciding between Rust web frameworks can compare tradeoffs like these on daily.dev."}}]}
```

