// the find
chinedufn/percy
Build frontend browser apps with Rust + WebAssembly. Supports server side rendering.
Percy is a Rust/WebAssembly virtual DOM library with an html! macro for writing JSX-like templates in Rust. It supports both client-side and server-side rendering, making it usable for isomorphic apps. The target audience is Rust developers who want to write frontend code without touching JavaScript.
The html! macro is well-designed — it validates HTML tags at compile time and gives useful error messages for things like missing closing tags or invalid self-closing elements. The diff/patch implementation uses a longest-increasing-subsequence algorithm for keyed list reconciliation, which is the correct approach and not obvious to get right. SSR works by sharing the same view code between server and WASM client, with the isomorphic example showing a real Actix server hydrating a percy-dom tree. The component preview tooling (percy-preview) with live reload is a nice developer experience addition that most WASM frameworks skip.
The project has 85 forks and 2300 stars but almost no community — the last meaningful activity before the December 2025 push was sparse, and the PR/issue tracker tells a story of one person maintaining it alone. There is no state management story beyond roll-your-own; the isomorphic example uses a hand-rolled store with a message type, which will not scale past a few hundred lines. The build setup requires manual wasm-bindgen-cli installation and a shell script — there is no trunk or wasm-pack integration, so the onboarding friction is higher than Leptos or Dioxus. Async support appears to be a recent addition and is not well-documented; the async_task_spawner abstraction in the preview examples has no explanation of its threading model or how it interacts with the WASM single-thread constraint.