mrkeyoor.com_
Sun 04 Oct 07:41 UTC
Webevaluationupdated 03 Oct 2026

leptos review

Leptos is a Rust framework for building browser interfaces and full web applications from one codebase. It can render in the browser, render HTML on a server, or combine server rendering with browser interactivity, which saves Rust teams from maintaining a separate frontend language and API layer.

trackingstars / 7d
Verdict

Our Leptos run built in 117 seconds, but 12 of 58 tests failed, so Rust-first teams should treat adoption as a framework commitment rather than a quick frontend swap. Use it when server rendering, browser hydration, and shared Rust code are worth learning its reactive model and build tool. Choose Dioxus for a native-app priority or Yew for a more familiar virtual DOM.

We ran it

Lab card: what happened when we ran leptosScreenshot of leptos (leptos.dev)
Install✓ · 45s387 packages
Build✓ · 117s
Tests✗ · 117s46 passed · 12 failed of 58 (cargo test)
Repo1524 files~132,265 lines of source · 7.9 MB · 8 CI workflows

Answers from our run

Does leptos build from source?

Dependencies installed in 45 seconds (387 packages), and the build succeeded in 117 seconds. We cloned commit ac0408a into a clean Debian container with 3 CPUs and no project-specific setup.

Do leptos's tests pass?

Not all of them: 46 of 58 passed and 12 failed when we ran the project's own test command (cargo test). Some failures need services or credentials a bare container does not have.

Who should not use leptos?

Teams that require a green full-suite check before evaluation: our cargo test run ended with 46 passed and 12 failed.

What are the alternatives to leptos?

Yew, Dioxus, Sycamore. Our Leptos run built in 117 seconds, but 12 of 58 tests failed, so Rust-first teams should treat adoption as a framework commitment rather than a quick frontend swap.

Setup3/5Build passed, but 12 of 58 tests failed in our sandbox
Docs4/5README, book, examples, starters, and common-bugs guide
Community5/521,353 stars and active issue and pull-request work
Maturity4/5v0.8.21 is active, though our complete test run failed

Discussed on

  1. hnLeptos: Build fast web applications with Rust11 points
  2. hnLeptos creator stepping down as active maintainer4 points
  3. hnLeptos v0.5.04 points
  4. hnLeptos: Full-stack, isomorphic Rust web framework3 points

Who it’s for

Rust teams building web applications that need server rendering, hydration, or browser-only rendering.
Developers who prefer signals and targeted DOM updates over rerunning components through a virtual DOM.
Teams willing to use cargo-leptos, Axum or Actix starter projects, and WebAssembly tooling.
Contributors who can diagnose framework behavior when an application reaches an unfinished edge.

Who it’s NOT for

Teams that require a green full-suite check before evaluation: our cargo test run ended with 46 passed and 12 failed.
JavaScript-first frontend groups that do not want Rust, WebAssembly targets, or a separate cargo-leptos tool in their daily loop.
Developers choosing one framework for web, desktop, and mobile: the Leptos README says Dioxus has the stronger desktop experience.
Product teams expecting every production gap to be handled upstream: the README says users may find missing features and end up building them.
Browser apps that use rand or getrandom but cannot adjust dependency features: the README requires a JavaScript-backed randomness source for wasm32-unknown-unknown.

Setup reality

Our sandbox installed commit ac0408a in 45 seconds with 387 packages, then built it successfully in 117 seconds. Cargo test failed after 117 seconds: 46 tests passed and 12 failed out of 58. The last failing result showed 6 passed and 6 failed in the leptos SSR test target.

A real full-stack starter adds cargo-leptos plus an Axum or Actix template. A browser-only app can use Trunk or wasm-bindgen. Leptos itself does not require an account or hosted-service secret, though your database and other application services may.

The repository had 1,524 files, about 132,265 source lines, 8 CI workflows, no Dockerfile, and no tests directory in our scan. WebAssembly code using rand or getrandom needs its JavaScript backend enabled. Server rendering, hydration, and client-only builds also follow different tool paths.

One Rust codebase can render on the server and in the browser

Our 1,524-file checkout at commit ac0408a supported three web paths: client-side rendering, server-side rendering, or server rendering followed by hydration in the browser. Server functions let client code call logic that runs only on the server without maintaining a separate REST layer for every operation. The router uses ordinary links and forms, while streaming support can send data and HTML as they become ready.

That combination is the reason to consider Leptos. A team already comfortable with Rust can share types and keep server-only work near the components that consume it. The cost is a larger mental model than a browser UI library. You still need to understand which code runs in a native server binary, which code becomes WebAssembly, and what crosses between them. The 1,524-file repository reflects that scope.

The quick start adds cargo-leptos to the Rust toolchain

Our 45-second install covered the repository dependencies. The README's recommended full-stack route then installed cargo-leptos, created an Axum or Actix starter, and ran cargo leptos watch. Browser-only projects may use Trunk or a wasm-bindgen setup. None of those paths requires a Leptos account or framework API token. Your application can still need database credentials and service configuration, but those belong to the app rather than this framework.

There is a specific WebAssembly trap. Code that directly uses rand or getrandom must enable a JavaScript-backed source of randomness for wasm32-unknown-unknown. Leptos configures its own dependency, not yours. The README warns that missing this setting can break a build or leave randomness unavailable in the browser. That is the sort of target-specific detail a Rust team should put in its starter template once, then test in CI.

What happened when we ran it

Our fresh Debian sandbox was the measurement setup: 3 CPUs, 12 GB of RAM, no secrets, and no elevated privileges. It installed commit ac0408a in 45 seconds and brought in 387 packages. The checkout held 1,524 files, roughly 132,265 lines of source, and occupied 7.9 MB before installation. The build completed successfully in 117 seconds.

We ran the full cargo test command, and it failed after another 117 seconds. Across the supplied run, 46 tests passed and 12 failed out of 58. The log tail shows several smaller targets finishing cleanly, followed by an SSR result with 6 passed and 6 failed. Cargo ended with exit 101 and named -p leptos --test ssr as the command to rerun.

The tail does not include the failed assertion names or error messages, so it cannot support a claim about the cause. We cannot call this a missing Debian package, a framework regression, or a flaky test from that evidence. The useful finding is narrower: installation and compilation worked on commit ac0408a, while the repository's full test command did not pass in the same clean container.

Our scan also found 8 CI workflow files, no Dockerfile, and no tests directory. The absence of a tests directory does not mean there are no tests, as the 58-test cargo result plainly shows. It means tests are organized within the Rust workspace rather than in that conventional top-level folder. Teams expecting an official container recipe will have to define their own image and decide which workspace checks become release gates.

Signals update DOM nodes without rerunning components

The 132,265-line checkout uses Leptos components that run once to create DOM nodes and connect reactive signals. When a signal changes, the framework can update the affected text node, class, or element instead of rerunning the component and comparing virtual trees. This is a different programming model from Yew and React. It can make update paths direct, but it also means familiar component-lifecycle instincts do not transfer unchanged.

The framework covers more than that reactive core. Its router works on both server and client, server functions keep sensitive logic off the browser, and Suspense can stream HTML. The README says the APIs are basically settled, yet its production answer asks users to distinguish between consuming a finished product and contributing missing pieces. That candor matters more than a broad production-ready label.

Production users may need to fix framework-level gaps

Leptos says several community members run it for work, often while becoming contributors themselves. It also acknowledges that a needed feature may be absent and that a framework fix may not arrive immediately. A team with Rust expertise and room to read internals can accept that bargain. A product group buying a frontend abstraction precisely to avoid framework work should take the warning literally.

The September 26, 2026 release, v0.8.21, included fixes for Suspense concurrency, hydration order, forms, islands routing, and WebAssembly prefetch behavior. GitHub showed 70 open issues and 41 open pull requests on October 3, while the last push landed October 2. The current issue queue and same-week push show that maintainers are still working through edge cases.

Dioxus is the stronger pick when the web is not the main target

Leptos is most convincing when the browser and an HTTP server are the destination. Its own comparison says Dioxus provides a better desktop experience, while Yew keeps a component rerender and virtual DOM model. Sycamore shares the SolidJS influence and fine-grained approach but has a narrower scope. These are design choices, so star counts should not decide between them.

We measured a 117-second successful build, proving that the large Rust workspace can compile in a plain container. The 12 failing tests are the sharper purchasing fact. Pick Leptos if one Rust language across server and browser is worth owning its build path and helping at the edges. If your team wants the framework to disappear behind a familiar frontend routine, this is likely more commitment than you want.

Alternatives

ProjectWhat it isPick it when
YewA Rust and WebAssembly UI framework built around a virtual DOM.pick this instead when you want component rerenders and a virtual DOM model that feels closer to React.
Dioxus gh↗A Rust application framework covering web, desktop, and mobile targets.pick this instead when native desktop or mobile applications matter as much as the web.
SycamoreA Rust and WebAssembly library with fine-grained reactivity and a smaller web focus.pick this instead when you want SolidJS-like reactive ideas without adopting Leptos's full-stack feature set.

What people are saying

  1. [velocity-scout] leptos-rs/leptos

Sources

  1. Leptos README at commit ac0408a
  2. Leptos repository
  3. Leptos v0.8.21 release
  4. Leptos issue tracker
  5. The Leptos Book

More web reviews

one-ip · page-mascot · table · yeti · react-starter-kit · Vela · the whole board →