v0.9.0-rc0
leptos-rs/leptosv0.9.0-rc0Oct 15, 2026by gbj
Upgrading?
AI Summary
This is the first release candidate for 0.9.0, mostly compatible with 0.8. It introduces lazy loading, serde_qs 1.0 migration, and changes to signal syntax and trait implementations.
Key Highlights
- Lazy-loading/code-splitting gated behind a `lazy` feature to save binary size.
- Migration to `serde_qs` 1.0 for default server-function input encoding.
- Function-call syntax supported for signal reads (e.g., `foo()`).
- Trait implementations around signals have changed, requiring dereferencing in some cases.
Breaking Changes
- Trait implementations around signals have changed (e.g., dereferencing needed).
- Semver-breaking changes that may affect user code.
New Features
- Lazy-loading feature for code-splitting.
- serde_qs 1.0 support.
- Signal function-call syntax support on stable.
- Updated trait implementations for signals.
Full Release Notes
This is the first release candidate for 0.9.0. 0.9 should be mostly compatible with most user application code. i.e., the migration path should be to upgrade from 0.8 to 0.9 and, in most cases, not need to make any changes. However, note the following: Notable changes: - `lazy` feature: Lazy-loading/code-splitting is now gated behind a `lazy` flag on the `leptos` crate. This saves binary size for anyone who's *not* using lazy-loading; if you are, just enable the feature. - `serde_qs` 1.0: we've migrated to the 1.0 series of releases for our default server-function input encoding (form URL data). This should reduce the requirement for `#[server(default)]` and similar workarounds for empty collections. - `on:toggle` is now typed as a `ToggleEvent` rather than plain `Event` - Function-call syntax for signal reads is now supported on stable (i.e., `let (foo, set_foo) = signal(42); set_foo(13); foo()` should work on both stable and nightly) - Some of the trait implementations around signals have changed: in the worst case, if you have a component or function that takes `impl Fn() -> T` and you pass it a `Signal<T>` you may need to dereference it (`foo=*signal` rather than `foo=signal`). Let us know if there are any more noticeable breakages here. There are some awkward tradeoffs with inference and `#[prop(into)]` and in some cases we've had to make the choice we think will be best for the most use cases. Let me know if there are things that seem obviously wrong or unhelpful. - A wide variety of semver-breaking changes that probably won't affect user code. ## What's Changed Since `0.9.0-beta` * fix(router): keep `""` and `"/"` static segments as pass-through parents by @sabify in https://github.com/leptos-rs/leptos/pull/4839 * chore: make sure failing tests in CI actually cause failures by @gbj in https://github.com/leptos-rs/leptos/pull/4840 * test(integrations): gate static route tests on the `default` feature by @sabify in https://github.com/leptos-rs/leptos/pull/4842 * Surface failed lazy-route chunk loads to ErrorBoundary instead of panicking by @JohnHarrison in https://github.com/leptos-rs/leptos/pull/4785 * fix: include submit input value in FormData when submitting Form by @dav-wolff in https://github.com/leptos-rs/leptos/pull/4836 * Fix/islands router branch marker off by one by @seanaye in https://github.com/leptos-rs/leptos/pull/4832 * Fix two concurrency issues with Suspense by @gbj in https://github.com/leptos-rs/leptos/pull/4853 * fix: don't panic in the wasm-split prefetch machinery when its lock is unavailable by @JohnHarrison in https://github.com/leptos-rs/leptos/pull/4830 * Assorted islands-router fixes by @gbj in https://github.com/leptos-rs/leptos/pull/4855 * fix: check for resource reads inside Signal/Memo used as attribute values (see #4856) by @gbj in https://github.com/leptos-rs/leptos/pull/4859 * fix(reactive_graph): ignore dropped local-resource listener by @adrianncovaci in https://github.com/leptos-rs/leptos/pull/4856 * fix(router): three route-matching panics / silent match failures by @sabify in https://github.com/leptos-rs/leptos/pull/4860 * fix(router): static optional params, `<Form>` submission fidelity, initial route build race by @sabify in https://github.com/leptos-rs/leptos/pull/4861 * feat(reactive_stores): convert a subfield into MaybeProp by @svieujot in https://github.com/leptos-rs/leptos/pull/4867 * fix(leptos): nonce incorrectly generated for wasm preload by @Ofenhed in https://github.com/leptos-rs/leptos/pull/4844 * Adopt a better Suspense-polling approach by @gbj in https://github.com/leptos-rs/leptos/pull/4864 * fix: UnsyncCallback/Callback comments by @geovie in https://github.com/leptos-rs/leptos/pull/4868 * fix(server_fn): eight panics, leaks and protocol bugs by @sabify in https://github.com/leptos-rs/leptos/pull/4863 * fix: dynamically delegate add_any_attr in AnyView by @asemqaffaf in https://github.com/leptos-rs/leptos/pull/4703 * fix(examples): prevent Trunk auto-reload during browser tests by @larstobi in https://github.com/leptos-rs/leptos/pull/4872 * fix(examples): await the add-1000-counters click by @larstobi in https://github.com/leptos-rs/leptos/pull/4871 * fix(ci): use locked dependencies when installing Trunk by @larstobi in https://github.com/leptos-rs/leptos/pull/4877 * fix: register trailing-slash routes that work with Leptos router with Actix/Axum routers (closes #4034) by @gbj in https://github.com/leptos-rs/leptos/pull/4878 * refactor(macros): replace direct proc-macro-error2 usage with syn diagnostics by @larstobi in https://github.com/leptos-rs/leptos/pull/4862 * perf(leptos): erase nested views and event callbacks by @skyf0l in https://github.com/leptos-rs/leptos/pull/4879 * chore(deps): bump actions/setup-node from 6 to 7 by @dependabot[bot] in https://github.com/leptos-rs/leptos/pull/4841 * chore(deps): bump actions-rust-lang/setup-rust-toolchain from 1 to 2 by @dependabot[bot] in https://github.com/leptos-rs/leptos/pull/4876 * fix: hydrate `<For>` children in the same order we SSR them (closes #4881) by @gbj in https://github.com/leptos-rs/leptos/pull/4882 * chore(ci): build the erased mode of the CI matrix with erase_components by @sabify in https://github.com/leptos-rs/leptos/pull/4893 * test: wait for suspense inspect result by @larstobi in https://github.com/leptos-rs/leptos/pull/4891 * fix: after hydration is over, don't try to hydrate the wrong data (see #4895) by @gbj in https://github.com/leptos-rs/leptos/pull/4896 * chore(deps): update rstml to 0.13.1 (RUSTSEC-2026-0173) by @larstobi in https://github.com/leptos-rs/leptos/pull/4892 * chore(deps): bump the npm_and_yarn group across 2 directories with 2 updates by @dependabot[bot] in https://github.com/leptos-rs/leptos/pull/4820 * fix(static): pair cache-hit body and headers by file identity by @sabify in https://github.com/leptos-rs/leptos/pull/4824 * Fix two correctness bugs in `const_str_slice_concat` by @sabify in https://github.com/leptos-rs/leptos/pull/4745 * 🚨 CRITICAL USABILITY IMPROVEMENT by @gbj in https://github.com/leptos-rs/leptos/pull/4901 * fix: use nested serialization IDs to prevent mismatches that depend on the timing of Suspense on the server (closes #4897) by @gbj in https://github.com/leptos-rs/leptos/pull/4900 * Further extend the axum API to support embedded files through `RustEmbed`. by @metatoaster in https://github.com/leptos-rs/leptos/pull/4715 * reactive_stores: dedupe ArcField From impls, stop double-boxing guards by @maruschin in https://github.com/leptos-rs/leptos/pull/4886 * feat(leptos): add `defer` option to `HydrationScripts` (closes #4869) by @GauravPawar101 in https://github.com/leptos-rs/leptos/pull/4889 * feat(config): decouple public pkg URL from on-disk pkg dir by @sabify in https://github.com/leptos-rs/leptos/pull/4817 * wip: Leptos 0.9 by @gbj in https://github.com/leptos-rs/leptos/pull/4522 * fix: generate WASM split preloads under the correct owner by @ondradoksy in https://github.com/leptos-rs/leptos/pull/4918 * chore: update CI to handle `erase-components` tests, and various flakiness issues by @gbj in https://github.com/leptos-rs/leptos/pull/4924 * chore: fix broken intra-doc links by @sabify in https://github.com/leptos-rs/leptos/pull/4926 * fix: correctly skip island subtrees in island router by @gbj in https://github.com/leptos-rs/leptos/pull/4934 * fix: run the async render effect's first value under its own owner by @adrianncovaci in https://github.com/leptos-rs/leptos/pull/4932 * chore: upgrade deps by @sabify in https://github.com/leptos-rs/leptos/pull/4929 * fix: keep view markers when a View is resolved by @adrianncovaci in https://github.com/leptos-rs/leptos/pull/4938 * fix: don't drop nodes owned by an arena while holding the arena lock (see #4930) by @gbj in https://github.com/leptos-rs/leptos/pull/4936 * fix: fix diffing after `<For/>` when using islands router (closes #4937) by @gbj in https://github.com/leptos-rs/leptos/pull/4939 ## New Contributors * @JohnHarrison made their first contribution in https://github.com/leptos-rs/leptos/pull/4785 * @dav-wolff made their first contribution in https://github.com/leptos-rs/leptos/pull/4836 * @adrianncovaci made their first contribution in https://github.com/leptos-rs/leptos/pull/4856 * @svieujot made their first contribution in https://github.com/leptos-rs/leptos/pull/4867 * @asemqaffaf made their first contribution in https://github.com/leptos-rs/leptos/pull/4703 * @larstobi made their first contribution in https://github.com/leptos-rs/leptos/pull/4872 * @maruschin made their first contribution in https://github.com/leptos-rs/leptos/pull/4886 * @GauravPawar101 made their first contribution in https://github.com/leptos-rs/leptos/pull/4889 * @ondradoksy made their first contribution in https://github.com/leptos-rs/leptos/pull/4918 **Full Changelog**: https://github.com/leptos-rs/leptos/compare/v0.9.0-beta...v0.9.0-rc0
Related Repositories
A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io
An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.
Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one