Releases: leptos-rs/leptos
Release list
v0.9.0-beta
This is a beta release from the leptos_0.9 branch, to give people an opportunity to start playing around.
I have not yet written up a full changelog but you can find the PR at #4522
Notable changes:
lazyfeature: Lazy-loading/code-splitting is now gated behind alazyflag on theleptoscrate. This saves binary size for anyone who's not using lazy-loading; if you are, just enable the feature.serde_qs1.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:toggleis now typed as aToggleEventrather than plainEvent- 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. Specifically, signals no longer implement the
Fn()traits directly on nightly; instead, on both stable and nightly, they deref to adyn Fn(). This means that you can call signals as functions on either nightly or stable. If you had props that tookimpl Fn() -> Tpreviously (and could receive a signal or a closure on nightly), you can now takeimpl SignalOrFn<Output = T>. This is probably the biggest change in 0.9, so let me know if you encounter any issues. - A wide variety of semver-breaking changes that probably won't affect user code.
Many of the changes in this release are intended to smooth out various APIs and don't seem to cause significant breakage, but please let me know if they do. This is not intended to require meaningful migration; if you find that it's causing you to need to make significant changes to your code, please share some examples and we'll see if we can minimize the breakage.
What's Changed
- fix: disable lazy hydration when not using lazy-loading to avoid binary-size cost by @gbj in #4438
- Support
ToggleEventforon:toggle. by @azriel91 in #4362 - Remove
_with_handlesuffix from functions by @mondeja in #4388 - Remove redundant
render_app_async_stream_with_contextmethod by @alexisfontaine in #4309 - Make ScopedFuture internals private by @zakstucke in #4274
- change: migrate to
serde_qs1.0 (see #4014) by @gbj in #4237 - fix!: Enable setting content type for server fn middleware errors by @spencewenski in #4249
- Signal API tweaks by @gbj in #4523
- feat: Allow customizing the status code of server fn error responses by @spencewenski in #4536
- Adding feature for easy conversion from Params to ParamsMap by @cerdelen in #4553
- Show unification by @maccesch in #4466
- Update main and fix existing merge conflict in branch leptos_0.9 by @metatoaster in #4591
- Full change to #4528 by @metatoaster in #4535
- Merge
mainintoleptos_0.9by @metatoaster in #4624 - fix:
.into_reactive_valueconversion for signal-function types onnightly(closes #4608) by @gbj in #4617 - Don't force next axum state to be
(). by @metatoaster in #4653 - change: adopt deref-based fn call syntax on both stable and nightly by @gbj in #4654
- Allow
server_fn_macroto specify a default client type by @darakreqo in #4594 - Remove IntoIterator bound from KeyedSubfield by @tysen in #4605
- Tweaks to Suspense behavior by @gbj in #4691
- fix(server_fn): make FormatType::into_encoded_string lossy instead of panicking by @sabify in #4719
- fix(server_fn): avoid panic on malformed Content-Type in multipart codec by @sabify in #4718
- fix: preserve sync chunk order in out-of-order SSR template by @tysen in #4716
- fix(server_fn): use StreamingText::CONTENT_TYPE for StreamingText codec by @sabify in #4721
- leptos_0.9: rust edition 2024 and upgrade deps by @sabify in #4717
- fix(server_fn): use correct redirect header in reqwest client by @sabify in #4722
- fix(server_fn): apply back-pressure in websocket forwarding loop by @sabify in #4725
- fix(server_fn): browser and reqwest client prepend server_url for form_data and streaming requests by @sabify in #4720
- fix(server_fn): avoid panic on invalid path bytes in error_response by @sabify in #4724
- fix(server_fn_macro): quality of life fixes by @sabify in #4726
- Fix HTML-injection (XSS) sinks in tachys and leptos_macro by @sabify in #4730
- fix(CI): do not fail fast by @sabify in #4740
- Fix several bugs in
reactive_graphby @sabify in #4734 - fix(CI): use official actions for toolchain and binary installs, #4740 follow up by @sabify in #4742
- fix(CI): drop wretry wrapper from action steps by @sabify in #4743
- Remove unused unstable FromWasmAbi bound by @ealmloff in #4741
- Fix five bugs in the
routerby @sabify in #4731 - Quality of life fixes for
router_macroby @sabify in #4732 - Quality of life fixes for
leptos_macroby @sabify in #4738 - Fix some
oco_refperformance bugs by @sabify in #4744 - Fix HTML injection (XSS) and other bugs in
hydration_contextby @sabify in #4747 - Harden Leptos server integrations (axum): panics, info leaks, path traversal & resource leaks by @sabify in #4739
- Fix several
leptos_servercorrectness bugs by @sabify in #4753 - Fix correctness bugs in
any_errorby @sabify in #4756 - Fix
any_spawnercorrectness bugs by @sabify in #4757 - fix: ensure that nested cleanups happen in right order (closes #4758) by @gbj in #4762
- fix+perf: server
Url::origin()returns the real request origin by @sabify in #4760 - perf(leptos_axum): cut per-render allocations in the SSR hot path by @sabify in #4761
- Reintroduce
autolive reload protocol option by @veigaribo in #4265 - Performance optimizations for
leptosby @sabify in #4763 - Harden leptos actix server integrations by @sabify in #4755
- perf(any_spawner): outline non-generic spawn dispatch tail by @sabify in #4766
- fix(tachys): stop wrapping inert SVG children in a spurious by @sabify in #4767
- fix(ci): include running wasm_bindgen tests in
server_fnby @sabify in #4770 - fix: defer owner drop in
OwnedView(closes #4769) by @gbj in #4771 - Fix bugs in
reactive_storesandreactive_stores_macroby @sabify in #4735 - feat(router): allow permanent redirects (301) by @Baptistemontan in #4775
- Performance optimization for
server_fnby @sabify in #4765 - 0.9: fix
MaybePropfn deref by @gbj in #4779 - Fix
leptos_domcorrectness bugs by @sabify in #4754 - Performance optimization for
tachysby @sabify in #4764 - perf(router): optimize hot-path route matching by @sabify in #4778
- feat(nonce): add
Nonce::from_valuefor externally-supplied CSP nonces by @anagrius in #4786 - feat(macro): collapse reactive child closure monomorphizations on --cfg erase_components by @skyf0l in #4711
- docs(axum): remove unused LeptosOptions import from render_app_to_stream_with_context example by @SAY-5 in #4714
- perf(hydration_context): optimize streaming and async SSR resource handling by @sabify in #4776
- fix(tachys): pass FROM_SERVER=false in AnyAttribute::hydrate_from_template by @Noethix55555 in #4792
- fix(router): propagate error instead of unwrapping in anchor click handler by @Noethix55555 in #4789
- fix: notif...
v0.8.19
A patch release, mostly of bugfixes.
Note: one of these includes a behavior change, which is that the primary server function encodings now respect the Axum/Actix request body size limits, rather than ignoring them. If you are accustomed to sending very large data (for example, a POST request > 2mb) via server functions, you may need to increase the request body size limit via Actix PayloadConfig or Axum DefaultBodyLimit (see docs for each server framework.)
Multipart data (file uploads) are not affected.
What's Changed
- chore: clippy by @gbj in #4685
- Fix broken Trunk website link by @sunsetlover36 in #4687
- chore(deps): bump actix-http from 3.11.2 to 3.12.1 by @dependabot[bot] in #4690
- chore(deps): bump rustls-webpki from 0.103.8 to 0.103.13 by @dependabot[bot] in #4689
- chore(deps): bump autofix-ci/action from 1.3.3 to 1.3.4 by @dependabot[bot] in #4686
- chore(deps): bump pnpm/action-setup from 5 to 6 by @dependabot[bot] in #4681
- Fix immediate effect memo recomputation by @alecmocatta in #4683
- fix: broken link and change name in example by @NCura in #4704
- fix: issues with nested keyed store field initialization (see #4697) by @gbj in #4699
- chore: Remove regex dependency from leptos_config by @paul-hansen in #4696
- fix(CI): do not fail fast by @sabify in #4740
- fix(CI): use official actions for toolchain and binary installs, #4740 follow up by @sabify in #4742
- fix(CI): drop wretry wrapper from action steps by @sabify in #4743
- Remove unused unstable FromWasmAbi bound by @ealmloff in #4741
- fix: ensure that nested cleanups happen in right order (closes #4758) by @gbj in #4762
- fix: defer owner drop in
OwnedView(closes #4769) by @gbj in #4771 - feat(nonce): add
Nonce::from_valuefor externally-supplied CSP nonces by @anagrius in #4786 - feat(macro): collapse reactive child closure monomorphizations on --cfg erase_components by @skyf0l in #4711
- docs(axum): remove unused LeptosOptions import from render_app_to_stream_with_context example by @SAY-5 in #4714
- fix(tachys): pass FROM_SERVER=false in AnyAttribute::hydrate_from_template by @Noethix55555 in #4792
- fix(router): propagate error instead of unwrapping in anchor click handler by @Noethix55555 in #4789
- fix: notify when structure changes during keyed patch (closes #4806) by @gbj in #4807
- feat: Add the
#[prop(marker)]option by @Baptistemontan in #4774 - feat(leptos_macro): Adding a
lazy_preloadmacro by @edmondj in #4729 - fix(router): reject over-long static segment instead of partial-matching by @Noethix55555 in #4790
- fix(server_fn): don't panic in set_server_url if already set by @Noethix55555 in #4795
- fix(router): return early in Form submit handler instead of panic by @Noethix55555 in #4798
- chore(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #4808
- chore: clean up some
leptos_macrodocs by @gbj in #4811 - fix: respect Axum/Actix built-in body size limits by @gbj in #4813
- Escaping fixes backported from 0.9 by @gbj in #4812
New Contributors
- @sunsetlover36 made their first contribution in #4687
- @alecmocatta made their first contribution in #4683
- @anagrius made their first contribution in #4786
- @skyf0l made their first contribution in #4711
- @SAY-5 made their first contribution in #4714
- @edmondj made their first contribution in #4729
Full Changelog: v0.8.18...v0.8.19
v0.9.0-alpha
This is an alpha release from the leptos_0.9 branch, to give people an opportunity to start playing around.
I have not yet written up a full changelog but you can find the PR at #4522
Notable changes:
lazyfeature: Lazy-loading/code-splitting is now gated behind alazyflag on theleptoscrate. This saves binary size for anyone who's not using lazy-loading; if you are, just enable the feature.serde_qs1.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:toggleis now typed as aToggleEventrather than plainEvent- 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() -> Tand you pass it aSignal<T>you may need to dereference it (foo=*signalrather thanfoo=signal). Let us know if there are any more noticeable breakages here. - A wide variety of semver-breaking changes that probably won't affect user code.
Again, this is a bit of a "canary": many of the changes in this release are intended to smooth out various APIs and don't seem to cause significant breakage, but please let me know if they do. This is not intended to require meaningful migration; if you find that it's causing you to need to make significant changes to your code, please share some examples and we'll see if we can minimize the breakage.
v0.8.18
What's Changed
- doc(
leptos_config): Improve docs readability; Add# Errorssections by @DanikVitek in #4593 - feat(
leptos_config): ImplementLeptosOptions::css_pathby @DanikVitek in #4592 - fix: prevent circular reference in
Actionby usingWeakOwner(closes #4602) by @gbj in #4603 - Better implementation of
css_pathwith that moved tocss_file_pathto better reflect/compliment underlying use cases by @metatoaster in #4615 - feat: Extend either macro by @domwst in #4613
- Update readme playground link to that of leptos.dev by @xiaogz in #4625
- chore: update nightly toolchain and adjust trybuild stderr by @gbj in #4626
- chore: actually test nightly in CI by @gbj in #4637
- Fixes deriving
PatchforStorewherestoreattribute is being used. by @mskorkowski in #4620 - Document getrandom/rand setup for wasm32 builds, closes #3979 by @ordokr in #4648
- A few
Storecleanup items by @gbj in #4645 - Fix typo: occured -> occurred in leptos_config doc comment in #4657
- fix: don't panic on invalid UTF-8 in paths (closes #4662) by @gbj in #4663
- Deriving Store no longer generates warning about missing docs by @mskorkowski in #4671
- chore(deps): bump pnpm/action-setup from 4 to 5 by @dependabot[bot] in #4658
- feat(
either_of): AddEither!convenience macro by @DanikVitek in #4627 - chore: pull in latest
wasm_split_helpersversion by @gbj in #4684
New Contributors
Full Changelog: v0.8.17...v0.8.18
v0.8.17
What's Changed
- feat: add
bitcode's serde integration codec by @rpfontana in #4585 - fix iteration over keyed store fields (closes #4582) by @gbj in #4584
- fix(tachys): replace opaque panic messages with actionable SSR feature diagnostic by @DrudgeDance in #4588
- (wip): keyed patching for store fields by @gbj in #4544
- fix: Remove the dependency on
::stdineither_ofby @DanikVitek in #4583 - fix: apply server function lint attributes to original and generated fn by @LeoniePhiline in #4598
New Contributors
- @DrudgeDance made their first contribution in #4588
Full Changelog: v0.8.16...v0.8.17
v0.8.16
What's Changed
- fix: do not show Transition fallback on 2nd change if 1st change resolved synchronously (closes #4492) by @gbj in #4495
- fix: wrong path for
IntoAnyAttributein macro expansion from #4481 by @gbj in #4500 - Fix untracked writes on keyed store fields by @gbj in #4501
- chore(deps): bump the rust-dependencies group across 1 directory with 19 updates by @dependabot[bot] in #4499
- chore(deps): bump actions/cache from 4 to 5 by @dependabot[bot] in #4489
- wip: fix issue with reading resources inside For child (closes #4503) by @gbj in #4504
- fix: track parents when tracking keyed subfield (second half of #4475) by @gbj in #4510
- fix: preserve existing attributes when rebuilding
AnyViewWithAttrs(closes #4512) by @gbj in #4513 - chore: fix nonsensical example in
reactive_storesby @gbj in #4516 - Allow argument names with suffixes in server functions by @aisuzuki in #4496
- Implement Params derive macro without nightly by @luxalpa in #4514
- chore: fix broken links in docs by @fbdb in #4505
- chore(deps): bump the rust-dependencies group across 1 directory with 23 updates by @dependabot[bot] in #4515
- fix: auto re-connect dev websocket live reload on close by @sabify in #4517
- fix: add
'staticreturn annotation for<A/>(closes #4525) by @gbj in #4531 - fix: allow expect lint attribute in server fn macro by @mondeja in #4529
- Fix issue with missing documentation parts on
docs.rsby @ahlinc in #4526 - chore: remove
parking_lot(cf. #4410) by @gbj in #4520 - fix: make server_fn
Websocketprotocol respect custom server URL by @adoyle0 in #4538 - chore(deps): bump pnpm from 9.15.9 to 10.27.0 in /examples/counters/e2e in the npm_and_yarn group across 1 directory by @dependabot[bot] in #4532
- Break up
file_and_error_handler_with_contextinto tower services by @metatoaster in #4528 - Fixed: Env inconsistent deserialization by @maeldroem in #4524
- feat: Implement InnerHtmlValue for Oco<'static, str> by @pheki in #4554
- fix: only install
cargo-nextestwith--lockedby @gbj in #4560 - Remove
linear-mapdependency by @alexisfontaine in #4563 - Add closedby attribute to HtmlDialogElement by @bngo92 in #4549
- fix: add
transparenttoShow/ShowLetto work around #4470 by @gbj in #4519 - Codegen optimizations by @alexisfontaine in #4552
- fix: Strip trailing
_to fix inert SVGuse_elements by @pheki in #4569 - feat: rely on dependencies major versions with minor bounds by @sabify in #4568
- chore(deps): bump autofix-ci/action from 1.3.2 to 1.3.3 by @dependabot[bot] in #4557
- chore(deps): bump pnpm from 10.27.0 to 10.28.2 in /examples/counters/e2e in the npm_and_yarn group across 1 directory by @dependabot[bot] in #4551
- Remove dashmap (cf #4408) by @gbj in #4521
- Warn when trying to update a signal with an active read guard by @MarkusG in #4567
- add IntoIterator implementantion for &ParamsMap by @jonnyso in #4565
- Implement
AttributeValueforMaybePropby @QaidVoid in #4575 - feat: impl
DeserializeforSignal<T>(closes #4533) by @gbj in #4576 - feat: add support for variable keyed collections in reactive_stores by @TiemenSch in #4473
New Contributors
- @aisuzuki made their first contribution in #4496
- @fbdb made their first contribution in #4505
- @ahlinc made their first contribution in #4526
- @maeldroem made their first contribution in #4524
- @bngo92 made their first contribution in #4549
- @MarkusG made their first contribution in #4567
- @jonnyso made their first contribution in #4565
- @QaidVoid made their first contribution in #4575
- @TiemenSch made their first contribution in #4473
Full Changelog: v0.8.15...v0.8.16
v0.8.15
What's Changed
ShowLetnow accepts staticOptionvalues. by @maccesch in #4467- chore(deps): bump actions/checkout from 5 to 6 by @dependabot[bot] in #4461
- chore: resolve new warnings by @gbj in #4485
- chore: add a regression test to ensure correct behavior for keyed store fields (see discussion in #4473) by @gbj in #4483
- fix: use unkeyed paths for all store patching (closes #4486) by @gbj in #4487
- Fixes missing import
IntoAnyAttributewhen using erase_components by @ToxicMushroom in #4481 - chore: upgrade dependencies by @sabify in #4497
New Contributors
- @ToxicMushroom made their first contribution in #4481
Full Changelog: v0.8.14...v0.8.15
v0.8.14
What's Changed
- Resupport
From<Fn() -> T> for Signal<T>,ArcSignal<T>,Callback<T, _>and similar by @zakstucke in #4273 - chore: bump versions after recent release by @gbj in #4462
Full Changelog: v0.8.13...v0.8.14
v0.8.13
What's Changed
- add homepage to leptos cargo metadata by @tswast in #4417
- examples: clarify behavior of upload-with-progress demo (closes #4397) by @gbj in #4420
- Force cleanup even if there are other references to the root owner by @zakstucke in #4427
- fix: check custom element tag name when rebuilding by @gbj in #4413
- Relax
Debugtrait bound on tuplesPossibleRouteMatchimplementation by @alexisfontaine in #4428 - fix: remove possibility of view-related
SendWrappererrors on server (closes #4432, #4402) by @gbj in #4433 - Add split to run command by @marcokuoni in #4440
- Clean up warning behavior for resources that depend on other resources by @gbj in #4415
- (wip) track resources in Suspense that are read conditionally behind other resource reads (see #4430) by @gbj in #4444
- fix: improve marker-node filtering when using islands router (closes #4443) by @gbj in #4446
- Removed duplicate cargo member oco by @agirorn in #4445
- fix: do not unescape query and hash in URLs when clicking links (closes #4453, closes #4232) by @gbj in #4454
- fix: Fixed to Add response headers for leptos_axum static files #4377 by @tqq1994516 in #4394
- fix: make class attribute overwrite behavior consistent between SSR and CSR by @taearls in #4439
New Contributors
- @tswast made their first contribution in #4417
- @marcokuoni made their first contribution in #4440
- @tqq1994516 made their first contribution in #4394
- @taearls made their first contribution in #4439
Full Changelog: v0.8.12...v0.8.13
v0.8.12
What's Changed
- Replace vendored wasm-split with out-of-repository version by @WorldSEnder in #4369
Full Changelog: v0.8.11...v0.8.12