Releases: leptos-rs/leptos
v0.4.5
I've gotten back into a regular rhythm of patch releases pulling in some of the smaller bugfixes, but haven't had time to write release notes for each one. I should just auto-generate them, I supposeβsorry about that!
Anyway here's a quick summary of the new features included in the past few releases. The full changelog below includes various bugfixes, chores, and updates to the docs as well.
- Some useful fixes to support for
cargo leptos watch --hot-reload
leptos_axum::extract_with_state
to support extractors that use aState
, if it's been provided via context in a custom handler- The
watch
function, which functions as a more configurablecreate_effect
, including the ability to explicitly list dependencies, stop listening to them, whether to run immediately or lazily, etc. - Better 404 page support in Actix examples and templates
- Added support for adding Content-Security-Policy nonces to inline script and style tags with
use_nonce
and thenonce
feature - Rewritten
<For/>
diffing algorithm that both fixes a number of correctness issues/edge cases in<For/>
and drops ~10kb from the WASM binary
Basically, a bunch of small but really useful changes, and about a hundred bugfixes.
I also just want to give a shout-out to @agilarity, who's become one of the top contributors to the library through a very helpful focus on CI and testing. If you're ever looking for a great model of how to test a Leptos frontend app, the counters_stable
example now features two complete test suites, one in JS using Playwright and one written in Rust using wasm_bindgen_test
. This has been a huge amount of very impressive work.
Complete Changelog
v0.4.0
by @gbj in #1250- chore: remove unused variable warnings with ssr props by @tqwewe in #1244
- test(counters_stable): add missing e2e tests by @agilarity in #1251
- docs: update server fn docs by @gbj in #1252
- test(router_example): add playwright tests by @nomorechokedboy in #1247
- Add fallback support for workspace in get_config_from_str by @afiqzx in #1249
- fix: regression in ability to use signals directly in the view in stable by @gbj in #1254
- fix: hot-reloading view marker line number by @gbj in #1255
- docs: update 02_getting_started.md by @gbj in #1256
- example/readme: Link to 'VS Browser' ext; format. by @srid in #1261
- chore: new
cargo fmt
by @gbj in #1266 - feat: implement PartialEq on ServerFnError by @M1cha in #1260
- Minor: Ran cargo clippy --fix and reviewed changes. by @martinfrances107 in #1259
- fix:
HtmlElement::dyn_classes()
when adding classes by @gbj in #1265 - fix: clearing
<For/>
that has a previous sibling in release mode (fixes #1258) by @gbj in #1267 - Added watch by @maccesch in #1262
- fix: error messages in
dyn_classes
by @gbj in #1270 - docs: add docs on responses/redirects and clarification re: Axum
State(_)
extractors by @gbj in #1272 - fix: improved diagnostics about non-reactive signal access by @gbj in #1277
- fix: duplicate text nodes during
<For/>
hydration (closes #1279) by @gbj in #1281 - fix: untracked read in
<Redirect/>
by @gbj in #1280 - fix: issue with class hydration not removing classes correctly by @gbj in #1287
- fix: use
once_cell::OnceCell
rather thanstd::OnceCell
by @gbj in #1288 - leptos axum extract with state by @sjud in #1275
- examples: add 404 support in Actix examples (closes #1031) by @gbj in #1291
- fixed example for error handling by @webmstk in #1292
- Adding instructions to add a tailwind plugin to examples. by @dessalines in #1293
- chore: add
mdbook
in flake by @gbj in #1299 - test(counters_stable): add wasm testing by @agilarity in #1278
- fixed typo in parent-child doc by @webmstk in #1300
- Rework diff functionality for Each component by @g-re-g in #1296
- docs: must use
View
by @gbj in #1302 - docs: fix braces in
<Show/>
example by @gbj in #1303 - fix:
<ActionForm/>
should check origin correctly before doing a full-page refresh by @gbj in #1304 - feat: use lazy thread local for regex by @tqwewe in #1309
- test(counters_stable/wasm): enter count by @agilarity in #1307
- docs: clarify WASM target by @gbj in #1318
- update warnings to remove mention of csr as a default feature by @Heliozoa in #1313
- docs: typo by @maheshbansod in #1315
- docs: typo & punctuation by @maheshbansod in #1316
- refactor(ci): improve the organization of
cargo make
tasks by @agilarity in #1320 - feat(leptos-config): kebab-case via serde's rename_all by @filipdutescu in #1308
- fix:
<ActionForm/>
should set value even if redirected by @gbj in #1321 - feat(config): implement common traits for Env by @filipdutescu in #1324
- fix: Actix server fn
redirect()
duplicateLocation
headers by @gbj in #1326 - Bump indexmap to version 2 by @g-re-g in #1325
- fix: warning generated by new
#[must_use]
on views by @gbj in #1329 - docs: clarify
nightly
in "Getting Started" by @gbj in #1330 - fix: event delegation issue with
<input name="host">
by @gbj in #1332 - feat: allow
active_class
prop on<A/>
by @gbj in #1323 - fix: routing logic to scroll to top was broken by @gbj in #1335
- fix: check
LEPTOS_OUTPUT_NAME
correctly at compile time (closes #1337) by @gbj in #1338 - fix: un-register
<Suspense/>
from resource reads when<Suspense/>
is unmounted by @gbj in #1342 - build: run tasks from workpace or member directory by @agilarity in #1339
- docs: how not to mutate the DOM during rendering by @gbj in #1344
- fix:
server_fn
rustls
feature shouldn't pull indefault-tls
by @gbj in #1343 - Book, don't run rust code snippets and update getting started by @g-re-g in #1346
- use cfg_attr for conditional derives by @circuitsacul in #1349
- docs: improve
ServerFnError
when a server function is not found by @gbj in #1350 - docs: don't warn when a resource resolves after its scope has been disposed by @gbj in #1351
- fix: duplicated meta content during async rendering by @gbj in #1352
- ci: speed up verification by @agilarity in #1347
- fix: hydration-key conflicts between
<ErrorBoundary/>
children and fallback by @gbj in #1354 - feat: add support for adding CSP nonces by @gbj in #1348
- docs/warning: fix
<ActionForm/>
docs and add runtime warning for invalid encodings by @gbj in #1360 - ci(ci): only run on source change by @agilarity in #1357
- ci(check-examples): only run on source change by @agilarity in #1356
- fix: correctly show fallback for Transition on first load even if not hydrating by @gbj in #1362
- fix: update link to example code in book testing page by @BakerNet in #1365
- doc: previews to backup CodeSandbox by @jdevries3133 in #1169
- Hot reload bug-fix by @sebastian in #1368
- perf: exclude hydration code in CSR mode by @gbj in #1372
- fix: release lock on stored values...
`v0.4.0`
v0.4.0
Enough bugfixes and features have accumulated in the main branch that it's time for a new release. However, a very early change meant this needs to be a semver bump. Rather than continuing the confusion of the feature/bug gap between 0.3.1 and main, this releases the current state of the main branch.
I was actually surprised, putting together these release notes, how much good stuff there is in here that I'd forgotten was new to this release!
This does not include the reactive ownership rewrite (#918), which I'd guess will be 0.5. But it does include the following...
Breaking Changes
leptos_axum
now uses the (more common, more type-safe, more extensible)State
and sub-state patterns rather thanExtension
to passLeptosOptions
. This will require a few small but key changes to apps uses Axum migrating from 0.3.x to 0.4.0. Click here to see a diff with the necessary changes.- Switch from defaulting to
nightly
and opting intostable
, to requiring an opt-in fornightly
features. Click here to see a diff with the necessary changes.- If you're using
stable
, remove thestable
feature (it's now the default.) - If you're using
nightly
, add thenightly
feature toleptos
,leptos_router
, andleptos_meta
- If you're using
leptos
no longer defaults tocsr
, but is opt-in.- If you're using CSR, add the
csr
feature toleptos
(same asleptos_router
andleptos_meta
- If you're using SSR/hydration, you can remove most
default-features = false
on Leptos dependencies, as that mainly served to disable the defaultcsr
feature, which is no longer enabled by default.
- If you're using CSR, add the
ServerFnError
no longer implementsstd::error::Error
(see below).ServerFnErrorErr
does, if that's needed.- The children of a
<Suspense/>
or<Transition/>
are now rendered once, then subsequently cloned. If you are reading resources reactively (move || data.read(cx)
) they should continue to update reactively. If you are reading resources non-reactively (<div>{resource.read(cx)}</div>
) this would have worked previously, and now will not be reactive.
Features
Automatic Server Function Registration
Server functions no longer need to be registered (except on exotic platforms like server-side WASM). Instead, they are registered automatically, making it even easier to define and use them.
Axum Extractor Support
You can now use Axum extractors directly in server functions.
#[server(QueryExtract, "/api")]
pub async fn query_extract(cx: Scope) -> Result<String, ServerFnError> {
use axum::{extract::Query, http::Method};
use leptos_axum::extract;
extract(cx, |method: Method, res: Query<MyQuery>| async move {
format!("{method:?} and {}", res.q)
},
)
.await
.map_err(|_| ServerFnError::ServerError("Error with server extractor".into()))
}
Improved Error Handling
Leptos now provides a leptos::error::Result
type that behaves much like anyhow::Result
(i.e., other errors can be converted into it using ?
) but can be rendered directly in the view and caught by <ErrorBoundary/>
. ServerFnError
can also handle conversion from any error, making errors in server functions easier to handle.
use leptos::error::Result;
async fn fetch_cats(count: CatCount) -> Result<Vec<String>> {
if count > 0 {
// make the request
let res = reqwasm::http::Request::get(&format!(
"https://api.thecatapi.com/v1/images/search?limit={count}",
))
.send()
.await?
// convert it to JSON
.json::<Vec<Cat>>()
.await?
// extract the URL field for each cat
.into_iter()
.take(count)
.map(|cat| cat.url)
.collect::<Vec<_>>();
Ok(res)
} else {
Err(CatError::NonZeroCats.into())
}
}
#[server(AddTodo, "/api")]
pub async fn add_todo(title: String) -> Result<(), ServerFnError> {
let mut conn = db().await?;
Ok(
sqlx::query("INSERT INTO todos (title, completed) VALUES ($1, false)")
.bind(title)
.execute(&mut conn)
.await
.map(|_| ())?,
)
}
Async Routing
While routing, optionally wait for the next route to load before navigating, approximating the behavior of a multi-page app more closely, by using the set_is_pending
prop on <Router/>
and the <RoutingProgress/>
component. (See #1055.)
#[component]
pub fn App(cx: Scope) -> impl IntoView {
let (is_routing, set_is_routing) = create_signal(cx, false);
view! { cx,
<Router set_is_routing> // will wait for async data on next page to load before navigating
Screen.Recording.2023-05-20.at.9.34.42.PM.mov
<Await/>
The new <Await/>
component improves the ergonomics of loading async
blocks.
async fn fetch_monkeys(monkey: i32) -> i32 {
// do some expensive work
3
}
view! { cx,
<Await
future=|cx| fetch_monkeys(3)
bind:data // see below for bind:
>
<p>{*data} " little monkeys, jumping on the bed."</p>
</Await>
}
bind:
syntax on components and slots
The children
prop currently only supports one argument, the Scope
. It's sometimes useful to be able to pass additional arguments to be used in children
, but they need to be named. bind:
allows you to define a children
prop that takes additional arguments and name them. For example, the <Await/>
component (see above) is defined like this
pub fn Await<T, Fut, FF, VF, V>(
/* ... other props */
children: VF,
) -> impl IntoView
where
/* ... other generics */
VF: Fn(Scope, &T) -> V + 'static,
The identifier for this second &T
argument is then given with bind:{ident}
(again, see above.)
Other Features
- Rewritten and less-buggy
<For/>
implementation. - Specify exact server function paths with a fourth argument, rather than the hashed path used by default to avoid name collisions
#[server(MyServerFnType, "/api-prefix", "Url", "hello")] // will be at `/api-prefix/hello`
- Significant reductions in overhead of hydration keys, and therefore in SSR performance.
- Improvements to recoverability, error handling, and syntax highlighting in the
view
macro.
Full Changelog
- fix: typo in actix extract documentation by @markcatley in #1043
- fix:
<Suspense/>
hydration when no resources are read under it by @gbj in #1046 - docs: fix small docs issues (closes #1045) by @gbj in #1049
- docs: fix typo in view fn by @kasbuunk in #1050
- Update lib.rs by @sjud in #1053
- fix: multipart forms on server fns by @yuuma03 in #1048
- tests: fix broken SSR doctests by @gbj in #1056
- fix:
todomvc
example style errors by @agilarity in #1058 - Added Debug, PartialEq and Eq derives to trigger. by @dgsantana in #1060
- examples: fix
todo_app_sqlite_axum
by @gbj in #1064 - test: verify tailwind example with playwright tests by @agilarity in #1062
- fix: docs note on
style
refers toclass
by @gbj in #1066 - docs: update notes on WASM binary size to work with SSR too (closes #1059) by @gbj in #1068
- docs: clarify SSR/WASM binary size comments by @gbj in #1070
- Specify Server Fn Paths by @benwis in #1069
- test: setup e2e automatically for tailwind example by @agilarity in #1067
- Rsx parser with recovery after errors, and unquoted text by @vldm in #1054
- feat: add "async routing" feature by @gbj in #1055
- fix/change: remove
?
prefix fromsearch
in browser (matching server behavior) - closes #1071 by @gbj in #1077 - fix: debug-mode bugs in
<For/>
(closes #955, #1075, #1076) by @gbj in #1078 - docs: clarify difference between
set()
andupdate()
by @gbj in #1082 - feat: manually implement Debug, PartialEq, Eq and Hash for reactive types by @Skyliegirl33 in #1080
- fix: correctly handle new navigations while in the middle of an async navigation by @gbj in #1084
- Docs edit: added a hint for a common error when using use_navigate by @sjud in #1063
- Remove LeptosProvider trait and use Axum SubStates by @benwis in #1085
- fix: missing
?
in navigation now that it is removed on browser side to match server by @gbj in #1092 - feat: add
<Await/>
component to improve ergonomics of loadingasync
blocks by @gbj in #1091 - updated axum_database_sessions to axum_session. by @genusistimelord in #1090
- Improve fetch example by @anacrolix in #1096
- fix: duplicate headers (like Set-Cookie) on the a...
`v0.3.1`
Earlier this week, the ouroboros
crate, a dependency of leptos_reactive
, identified a fundamental soundness issue. This was fixed immediately in Leptos on the main
branch by switching to self_cell
instead. However, there have been a number of breaking changes on main since 0.3.0 in preparation for 0.4.0, so main
could not be released as 0.3.1. There are a number of other changes that need to be made before 0.4.0, so it did not make sense to immediately release a new major version.
This patch release just rewinds to 0.3.0 and replaces ouroboros
, without including any additional features or changes since then. If you have already been using main
, you should continue using main
. If you have been using 0.3.0, you should update to 0.3.1.
See additional discussion here.
`v0.3.0`
v0.3.0
is another incremental-ish release with a bunch of new features, many on the server end but including a bunch of general-purpose improvements. It includes several things that are breaking changes in the semantic-versioning sense, but you may find that not much breaks in your actual app. (For example, no code in any of the the three starter templates needed to change.)
New Features and Small Fixes
General
- No longer necessary to import
__Props
types for components; you can justuse app::MyComponent;
instead ofapp::{MyComponent, MyComponentProps};
#[slot]
syntax to define typed component children.- Typed events in
window_event_listener
- Optional event listeners with
HtmlElement::optional_event
- Adds
style:
syntax in theview
macro to set individual styles, much likeclass:
sets individual classes - Simplify work with resources by adding a
Resource::update
method to reactively update current value. expect_context::<T>(cx)
shorthand foruse_context::<T>(cx).unwrap()
Server
- Support for server functions that use
GET
requests (with either URL or CBOR encoding), for easier caching. extract
helper to directly use Actix extractors in a server function.- Allow more complex data like structs and
Vec<_>
as server function arguments (anything that can be de/serialized byserde_qs
) - Support for rendering a
<Route/>
in response to additional HTTP methods/verbs, e.g., the classic PHP/multi-page-app style in which aPOST
request can be sent to a page and it will render a response. (Seemethods
prop.) - Support for
SsrMode::PartiallyBlocked
which works like out-of-order streaming but replaces the HTML for any βblockedβ fragments on the server. Improves UX when JS is disabled.
Developer Experience and Ergonomics
- Top-to-bottom integration with the
tracing
crate - Adding some "real-time docs" via several runtime warnings and compile-time errors to prevent common bugs (for example, using
leptos_meta
with no features enabled or accidentally ending theview
a component returns with a semicolon, meaning it renders nothing)
Performance
- Improve performance of Axum integration by spawning requests into a local threadpool.
- Improve performance of router on the server side by caching branch generation.
- Performance improvements in the reactive system and renderer, and closing a memory leak in
<Suspense/>
/<Transition/>
.
And as always...
- Lots of bug fixes! Full changelog below.
Breaking Changes
&'a str
can no longer be directly rendered as a view: add.to_string()
to effected variables. (Previously, all&str
were converted toString
by the renderer; usingCow<'static, str>
now allows&'static str
to be rendered without the additional allocation, at the cost of requiring the conversion of&str
toString
to be more explicit.)window_event_listener
now takes a typed event (likeev::keypress
). Usewindow_event_listener_untyped
for the old behavior.- When deriving
Params
to use typed router search/params, theFromStr
error for any type needs to beSend + Sync
so they areErrorBoundary
compatible - Generics in
create_slice
have changed to allow different input types for getter/setter; only relevant if (for some reason?) you were specifying them manually. - Exact interfaces for a few public-but-rarely-needed functions in the server integrations have changed.
What's Changed
- Fix server functions default macro on stable by @Demonthos in #784
- docs: add runtime "strict mode" checks that warn if youβre non-reactively accessing a value by @gbj in #786
- fix: warnings about untracked signal access in
<Router/>
by @gbj in #790 - Remove unused fs dependency from leptos_config by @valeth in #787
- fix:
untrack
should disable warnings about untracked reads by @gbj in #791 - fix: nested
<Suspense/>
by @gbj in #781 - docs:
<Form/>
component by @gbj in #792 - Fix server functions with non-copy server contexts by @Demonthos in #785
- fix: unused warning on cx in server functions by @markcatley in #794
- docs: warn if you are using
leptos_meta
without features by @gbj in #797 - fix: warning in Cargo.toml by @markcatley in #800
- feat: Add ability to include options to event listeners by @Ofenhed in #799
- fix: fixes #802 as a temporary measure without resorting to #803 yet by @gbj in #804
- fix: prevent router panic on root-level
<Redirect/>
during route list generation by @gbj in #801 - Reduce size of RuntimeId when slotmap is not used by @novacrazy in #805
- fix: unused warning in reactive signal diagnostics by @markcatley in #807
- Add the ability for server fns to be submitted via GET requests by @benwis in #789
- chore: fix unused variable warning in property now that it's not memoized by @gbj in #810
- Optimize Runtime::mark_dirty by @novacrazy in #808
- Optimize memory usage of update methods by @novacrazy in #809
- fix: correctly escape HTML special characters in text nodes during SSR by @gbj in #812
- Publish book ci by @bram209 in #817
- remove
Leptos guide
link by @bram209 in #818 - docs: add sandbox links and max height by @gbj in #824
- fix: correctly pass server fn errors to client by @gbj in #822
- fix: server functions with
url
as argument name (closes issue #823) by @gbj in #825 - chore: deny warnings on github actions by @markcatley in #814
- Use local pools for axum handlers by @akarras in #815
- tests: update benchmarks by @gbj in #827
- feat: make
__Props
imports unnecessary (closes #746) by @gbj in #828 - Various optimizations, size reductions and stability improvements by @novacrazy in #831
- Fix leaked memo nodes by @novacrazy in #841
- [Fix] Correct broken
MaybeSignal
link by @hoangph271 in #840 - feat:
rustls
feature forreqwest
and any other relevant dependencies by @gbj in #842 - fix: don't entity-encode HTML special characters inside
<script>
or<style>
(closes #837) by @gbj in #846 - feat: allow multiple HTTP request methods/verbs by @gbj in #695
- [WIP] Trigger prototype by @novacrazy in #838
- fix static text nodes with curly braces in SSR by @gbj in #849
- docs: emit error when trying to combine global class and dynamic class in a bugged way by @gbj in #850
- fix: custom events in SSR mode by @gbj in #852
- fix: Strip
&
from the end of params queries by @mondeja in #854 - fix: match statement in leptos book by @chroth7 in #860
- Fix the counter without macros test by @agilarity in #863
- feat: add ability to set
node_ref
and pass additional attributes to<Form/>
and friends by @gbj in #853 - Fixed typo in life cycle docs by @Stackingttv in #869
- examples: fix error handling in fetch example by @gbj in #870
- feat: add the ability to specify animations on route transitions by @gbj in #736
- [fix] updated nix flakes lock files on session auth axum examples by @mustafasegf in #872
- docs: Add per-project toolchain override readme by @kamilogorek in #876
- feat: add non-animation base classes to
<AnimatedOutlet/>
and<AnimatedRoutes/>
by @gbj in #877 - Use override key, if available, for server function calling by @snapbug in #878
- feat: add
expect_context
function by @markcatley in #864
-...
`v0.2.5`
v0.2.5
This update includes many bug fixes and documentation improvements, along with a few new features:
- A
<ProtectedRoute/>
component that allows you to create route guards to either render or redirect away from a route depending on some condition. - The ability to add arbitrary attributes to the
<Html/>
and<Body/>
components inleptos_meta
. - Additional head data injected using
leptos_meta
is now injected at the beginning of the<head>
rather than the end, which allows you to inject an import map if necessary for JavaScript module imports.
I'm beginning to merge a few server-rendering changes that should be invisible to most users but will technically be breaking API changes, and will be building toward v0.3.0
which will probably include reconfiguring the Cargo setup for nightly/stable support (see #591), so this is may be the last 0.2.x
release.
What's Changed
- chore: fix clippy warnings by @gbj in #721
- chore: make
wasm-bindgen
dependency optional inleptos_reactive
by @gbj in #723 - chore: Upgrade
console_log
dependency to stable by @mondeja in #724 - fix: relative routing should update when navigating between
<Outlet/>
s (closes issue #725) by @gbj in #729 - fix: include query params in navigation when
<ActionForm>
response redirects. by @andrew-chang-dewitt in #728 - docs: fix typo in router docs by @gbj in #730
- avoid panic in counter_isomorphic Multi-User counter by @mwcz in #732
- leptos-reactive: Bumped serde-lite from 0.3 to 0.4. by @martinfrances107 in #737
- fix: always run individual classes after the
class
attribute (closes #735) by @gbj in #738 - Fix typo in docs. by @grandafrato in #739
- docs: fix typo in server_fn docs by @isti115 in #740
- Document cargo workspace feature resolver footgun by @jmintb in #745
- docs: warn when reading resource outside
<Suspense/>
(closes issue #742) by @gbj in #743 - fix: correct typecast on
Memo::get_untracked
(closes issue #754) by @gbj in #755 - examples: improve
counter_without_macros
by @gbj in #751 - Add
is_mounted
anddyn_classes
by @jquesada2016 in #714 - Fix a few typos by @bnzone in #756
- Add property field to Meta tag by @benwis in #759
- Allow component decl without
use leptos::*
in scope by @lpotthast in #748 - fix: escape
</script>
and other HTML tags in serialized resources by @gbj in #763 - added the id attribute to the Leptos router A tag by @Houski in #770
- fix:
<Redirect/>
between nested routes at same level by @gbj in #767 - fix: prevent forms from entering infinite loops (closes issue #760) by @gbj in #762
- fix: stop memoizing properties in a way that breaks
prop:value
(closes #768) by @gbj in #772 - example: proxy settings to work on all OS by @Kaszanas in #771
- feat: Added ProtectedRoute component to route file by @Kaszanas in #741
- change: insert
<head>
metadata tags at the beginning of the<head>
by @gbj in #731 - docs: fixed parentheses and formatting issues by @luoxiaozero in #775
- Add arbitrary attributes to Html meta tag by @step4 in #726
- chore: clippy and docs warnings by @gbj in #779
- docs: warn if you put something invalid inside
<Routes/>
by @gbj in #780
New Contributors
- @mondeja made their first contribution in #724
- @andrew-chang-dewitt made their first contribution in #728
- @mwcz made their first contribution in #732
- @grandafrato made their first contribution in #739
- @isti115 made their first contribution in #740
- @jmintb made their first contribution in #745
- @bnzone made their first contribution in #756
- @lpotthast made their first contribution in #748
- @Houski made their first contribution in #770
- @Kaszanas made their first contribution in #771
- @luoxiaozero made their first contribution in #775
- @step4 made their first contribution in #726
Full Changelog: v0.2.4...v0.2.5
`v0.2.4`
v0.2.3
fixed support for stable Rust, which I temporarily broke in v0.2.2
.
The main change in v0.2.4
is a rewritten reactive system. This didn't involve any breaking API changes, except to the extent that fixing bugs and glitchy behavior breaks apps that depend on the glitches. It pretty significantly improves the performance of the reactive system on deep graphs (i.e., when you have a chain of dependencies like memos leading from a signal to an effect), as well as fixing reactive "glitching" behaviors in ways that make effects run more efficiently. You can read more about the details here.
Other changes:
- improved error handling in
<ActionForm/>
- Support for using signals directly in the view in stable Rust
- cancelable versions of
set_timeout
,request_idle_callback
, andrequest_animation_frame
(all ending withwith_handle
) - a
debounce
helper that makes it easy to debounce event listeners - allow manual disposal of signals before the current reactive cope is disposed with the
SignalDispose
trait (and.dispose()
) function, to avoid leaking memory if you create a list of signals at the root scope - allow batching multiple updates with
Scope::batch()
before running effects - many small bugfixes
What's Changed
- fix broken stable support by @gbj in #670
- feat:
<ActionForm/>
improvements by @gbj in #676 - chore: apply
cargo machete
systematically by @gbj in #671 - feat: new reactive system implementation by @gbj in #637
- Fixed building in release (
cfg(not(debug_assertions))
) by @Buzzec in #679 - feat: maintain order of sources and dependencies by @gbj in #678
- CI: add
--release
checks by @gbj in #681 - fix: leaking stored values by @gbj in #683
- fix: suppress spurious hydration warnings for tags in
leptos_meta
by @gbj in #684 - Added
IntoView
forReadSignal
andRwSignal
in thestable
feature. by @Buzzec in #677 - docs: typos by @ryndin32 in #685
- fix: allow multiple
<Suspense/>
on same page during in-order or async rendering by @gbj in #687 - Added example using Tailwind, CSR (only) and Trunk by @vascokk in #666
- fix: hydration errors with
<Suspense/>
inside components in SSR mode by @gbj in #688 - feat: support diffing inside component children in hot-reload by @gbj in #690
- examples: remove duplicate
console_error_panic_hook::set_once()
calls by @elliotwaite in #692 - docs: beginning work on router docs by @gbj in #682
- fix issues in release mode (closes #700) by @gbj in #701
- fix: ignore view markers in DynChild hydration (closes issue #697) by @gbj in #703
- feat: add cancellable versions of
request_animation_frame
andrequest_idle_callback
by @elliotwaite in #698 - feat: add a
debounce
helper for event listeners by @gbj in #691 view!
macro not compiling with a non-default scope name by @alexisfontaine in #704- Clippy: less .clone() calls, simpler pointer passing. by @martinfrances107 in #707
- feat: add
set_interval_with_handle
and deprecateset_interval
by @gbj in #709 - feat: allow manual signal disposal before the scope is disposed by @gbj in #710
- feat: add
Scope::batch()
by @gbj in #711 - chores: clearing up some warnings and adding missing exports by @gbj in #712
- Used modulo rather than bitwise & for is_odd check. by @carltongibson in #713
- docs: small fixes by @gbj in #715
- fix:
<Transition/>
behavior by @gbj in #717 - Minor: Simplifiy Box::Pin() call. by @martinfrances107 in #718
New Contributors
- @Buzzec made their first contribution in #679
- @ryndin32 made their first contribution in #685
- @vascokk made their first contribution in #666
- @alexisfontaine made their first contribution in #704
- @carltongibson made their first contribution in #713
Full Changelog: v0.2.2...v0.2.4
`v0.2.2`
I forgot to make a tag or publish release notes for 0.2.1
. These are both patch releases that include some performance improvements, a number of bugfixes, and spinning out a framework-independent server function crate, but don't include any particularly big new features.
Small new features
rkyv
encoding as an option for resources- allowing multiple class names in
class =
syntax inview!
macro - provide a new
LeptosRequest<_>
type that allows Leptos Axum apps access to the request viause_context
, which allows you to use Axum extractors without a special handler - preliminary hot-reloading support, to be built into
cargo-leptos
, for updating static parts of the view before recompiling the Rust parts of your app
What's Changed
- Some cleanups in router/matching/resolve_paths by @g-re-g in #569
- perf: improvements to element creation in
<For/>
by @gbj in #579 - feat: Support
rkyv
encoding by @617a7a in #577 - make counter test compile by @eiswind in #588
- fix:
mouseenter
andmouseleave
do not bubble by @gbj in #593 - Update example readme by @brendonotto in #595
- examples: include missing examples in CI by @gbj in #598
- fix: SSR + hydration improvements by @gbj in #599
- cx typo in 02_getting_started.md by @iagafonov in #602
- Fix typo in 03_components.md by @makoven in #603
- In
Action::dispatch()
set new value before resetting input signal by @Qwox0 in #604 - fix: memory leak in
render_to_stream
by @gbj in #601 - Make server functions framework agnostic by @Demonthos in #596
- use create_node_ref instead of NodeRef::new by @iagafonov in #607
- publish framework-independent
server_fn
crate by @gbj in #605 - fix compilation error, Issue #608 by @kulak in #609
- updated error handling code in book by @iagafonov in #610
- feat: support expr for #[prop(default=...)] by @ModProg in #611
- Minor: Clippy - Simplified conditional logic in transition.rs. by @martinfrances107 in #615
- docs: improve "Getting Started" page by @gbj in #618
- feat: allow multiple class names in
view!
macroclass =
(closes #612) by @gbj in #614 - tests: use
check
instead ofbuild
in CI for disk space by @gbj in #616 - docs: add patterns for global state (closes #245) by @gbj in #619
- feat: allow easier client-side form validation (closes #413) by @gbj in #620
- fix: suppress warnings caused by resource loading in
generate_route_list
(closes #582) by @gbj in #621 - CI: exclude
rkyv
combos with other serialization traits by @gbj in #622 - docs: add a chapter on
async
actions andcreate_action
by @gbj in #623 - [WIP] feat: hot reloading support for
cargo-leptos
by @gbj in #592 - fix: added missing attributes of events that don't bubble by @WafflePersonThing in #625
- fix: boolean attributes in SSR by @gbj in #629
- docs: fix instruction typos by @Banyc in #631
- docs: Update 04_iteration.md by @jfloresremar in #630
- bump typed-builder to version 0.13. by @martinfrances107 in #633
- de-duplicate todomvc example by @erwanvivien in #634
- CI: split into three actions by @gbj in #636
- New example: session_auth_axum by @j0lol in #589
- fix: custom events (closes issue #641) by @gbj in #642
- Bump tower-http upto 0.4. by @martinfrances107 in #638
- Minor: form component Removed unused variables. by @martinfrances107 in #640
- Bump serde-wasm-bindgen to 0.5. by @martinfrances107 in #639
- Cargo machete: Strip down leptos_server. by @martinfrances107 in #644
- Unit tests for
leptos-config
and new functions for loading configuration by @vaniusrb in #628 - chore: typo (closes issue #645) by @gbj in #646
- bump bytecheck to 0.7, remove deprecated simdutf8_std. by @martinfrances107 in #647
- Bumped typed-builder up to 0.14. by @martinfrances107 in #648
- fix spelling error for document by @zackshen in #651
- docs: add
create_effect
chapter by @gbj in #653 - Make server functions work outside of WASM by @Demonthos in #643
- π§ Fix(leptos_dom/logging): Fix showing warning instead of error by @pikhosh in #654
- feat: impl
IntoView
for&Fragment
by @gbj in #655 - cargo machete: leptos_macro - Removed unused crates. by @martinfrances107 in #656
- Put the Request on the Context for Axum by @benwis in #632
- feat: add fragment support for hot reloading and fix some stuff by @gbj in #659
- Copy & Clone for MaybeSignal by @CharlesTaylor7 in #660
- fix: text node issue in
template
macro by @gbj in #661 - fix: apply patches to all instances of a view, not just the first one by @gbj in #663
- Typo fixes and other small changes to the docs by @elliotwaite in #662
- Clippy: signal_wrappers_read, was using .clone() when copy is available. by @martinfrances107 in #665
v0.2.2
by @gbj in #667
New Contributors
- @617a7a made their first contribution in #577
- @eiswind made their first contribution in #588
- @brendonotto made their first contribution in #595
- @iagafonov made their first contribution in #602
- @makoven made their first contribution in #603
- @Qwox0 made their first contribution in #604
- @Demonthos made their first contribution in #596
- @kulak made their first contribution in #609
- @WafflePersonThing made their first contribution in #625
- @Banyc made their first contribution in #631
- @jfloresremar made their first contribution in #630
- @erwanvivien made their first contribution in #634
- @j0lol made their first contribution in #589
- @vaniusrb made their first contribution in #628
- @zackshen made their first contribution in #651
- @pikhosh made their first contribution in #654
- @CharlesTaylor7 made their first contribution in #660
- @elliotwaite made their first contribution in #662
Full Changelog: v0.2.0...v0.2.2
`v0.2.0`
v0.2.0
v0.2.0
is an incremental change over 0.1.x
. There are a few small things that have been breaking changes over the last two months, one big new feature, and a lot of small improvements and changes.
Async Rendering and In-Order Streaming
The biggest new feature of 0.2.0
that requires explanation is support for async
rendering and in-order streaming, which you can activate via the new ssr
prop on a <Route/>
. (See the ssr_modes
and ssr_modes_axum
examples.)
With this new feature, Leptos now supports four different ways to render HTML that contains async
data loaded under <Suspense/>
. You can opt in to one or the other on a per-route basis.
- Synchronous: Serve an HTML shell that includes
fallback
for anySuspense
. Load data on the client, replacingfallback
once they're loaded.- Pros: App shell appears very quickly: great TTFB (time to first byte).
- Cons: Resources load relatively slowly; you need to wait for JS + WASM to load before even making a request.
- Out-of-order streaming: Serve an HTML shell that includes
fallback
for anySuspense
. Load data on the server, streaming it down to the client as it resolves, and streaming down HTML forSuspense
nodes.- Pros: Combines the best of synchronous and
async
, with a very fast shell and resources that begin loading on the server. - Cons: Requires JS for suspended fragments to appear in correct order. Weaker meta tag support when it depends on data that's under suspense (has already streamed down
<head>
)
- Pros: Combines the best of synchronous and
- In-order streaming: Walk through the tree, returning HTML synchronously as in synchronous rendering and out-of-order streaming until you hit a
Suspense
. At that point, wait for all its data to load, then render it, then the rest of the tree.- Pros: Does not require JS for HTML to appear in correct order.
- Cons: Loads the shell more slowly than out-of-order streaming or synchronous rendering because it needs to pause at every
Suspense
. Cannot begin hydration until the entire page has loaded, so earlier pieces
of the page will not be interactive until the suspended chunks have loaded.
async
: Load all resources on the server. Wait until all data are loaded, and render HTML in one sweep.- Pros: Better handling for meta tags (because you know async data even before you render the
<head>
). Faster complete load than synchronous because async resources begin loading on server. - Cons: Slower load time/TTFB: you need to wait for all async resources to load before displaying anything on the client.
- Pros: Better handling for meta tags (because you know async data even before you render the
The mode defaults to out-of-order streaming. For a path that includes multiple nested routes, the most
restrictive mode will be used: i.e., if even a single nested route asks for async
rendering, the whole initial
request will be rendered async
. (async
is the most restrictive requirement, followed by in-order, out-of-order, and synchronous.)
Because you have the ability to opt into these different modes on a per-route basis, you can choose the rendering strategy that is best for youβnot only for your app in general, but for any given page.
Other Features and Improvements
- New
<Html/>
and<Body/>
components inleptos_meta
that let you change things like<html>
lang
anddir
, and add aclass
to the<body>
- Restoring
on:
event listeners on<Component/>
nodes, e.g.,<MyFancyButton on:click=.../>
without needing to create anon_click
prop - Adding a
<Redirect/>
component in the router that works during client-side navigation or server-side rendering Children
,AttributeValue
, and other type aliases to make it easier to accept a variety of types in your components- Experimentation with new docs using CodeSandboxes and an expanding set of tutorials
- So, so, so, so many bugfixes, typos, docs improvements, and small changes by many, many, many members of the community. Thanks to you all!
Breaking Changes Since 0.1.3
Resource::read()
andResource::with()
now take aScope
as their first argument, i.e.,resource.read()
is nowresource.read(cx)
. This is necessary for correct<Suspense/>
behavior.- The
Errors
type has been modified to hide its internals and exposeIntoIter
directly. In 99% of cases this just means replacing references likeerrors.get().0.into_iter()
witherrors.get().into_iter()
- Most of the methods on various signal types have been moved into traits instead. This should not cause any actual changes to the way you use them, and if you are accustomed to
use leptos::*
you probably won't notice the difference; if you are manually importing types you will need to import the signal traits as well. - The
<For/>
componentview
argument now takes aScope
as its first argument, i.e., a change fromview=move |counter| { ... }
toview=move |cx, counter| { ... }
- The
<ErrorBoundary/>
componentfallback
argument now takes aFn(Scope, RwSignal<Errors>) -> impl IntoView
instead ofFn(Scope, Option<RwSignal<Errors>>) -> impl IntoView
NodeRef
now takesNodeRef<T>
instead ofNodeRef<HtmlElement<T>>
. We're also deprecatingNodeRef::new(cx)
in favor ofcreate_node_ref(cx)
to follow the same pattern as everything else in the framework.- We've finally achieved full consistency between
cargo-leptos
and the server integrations whether you're usingcargo-leptos
or not. Thesite_address
field is now namedsite_addr
; the compiler should actually prompt you correctly for this one. - The current Leptos global namespace is polluted with a huge number of types and reexports, making it harder to find things in docs and adding compile-time overhead. If you're used to
use leptos::*
you may need to manually import a few additional types. We're also no longer reexportingwasm-bindgen
,web-sys
, andjs-sys
so you may need to add them as dependencies to yourCargo.toml
- APIs to modify status code and headers in HTTP responses are now synchronous, making them easier to set in components
Complete CHANGELOG
- Add
Children
type alias by @gbj in #403 - Fix boolean attributes in
view
macro fast-path SSR by @gbj in #408 - Add
<Html/>
and<Body/>
components inleptos_meta
by @gbj in #407 - Minor: Bump typed-builder from 0.11 to 0.12. by @martinfrances107 in #409
- Escape and tokens in documentation markup. by @martinfrances107 in #410
- fix: correct types for top-level
<option>
and<use>
in SSRview
macro by @gbj in #416 - Switch RwLock to parking_lot so they are no longer async by @benwis in #414
- Add leptos_routes functions for integrations by @b4-io in #415
- Fix issues with attribute names in SSR by @gbj in #418
- Implemented update_returning for StoredValue by @thestarmaker in #419
- Update ErrorBoundary to use miette::Diagnostic instead of Error, and various other tweaks by @benwis in #401
- Fix some small issues in
axum_errors
example by @gbj in #424 - fix: Make all fragment rendering lazy (closes #299 and #421) by @gbj in #425
- fixes cx not found on components marked with #[component(transparent)] by @jquesada2016 in #423
- Several Minor Updates on Examples by @Indrazar in #427
- Make
RouteDefinition
public by @gbj in #430 - docs: Document
inner_html
attribute by @gbj in #429 - chore: switch examples to
check
instead ofbuild
(for CI) & add missing examples by @gbj in #437 - Fix top-level SVG elements in SSR by @gbj in #435
- fix: correct behavior of
<Show/>
by @gbj in #436 - Dedup from_str implementations for Env by @g-re-g in #426
- leptos-server: Removed unused dependency on log, linear-map and rmp-serde. by @martinfrances107 in #439
- leptos_macro: Machete - Removed unused deps. by @martinfrances107 in #441
- router: Machete - Removed unused deps. by @martinfrances107 in #442
- use latest tokio in leptos_axum by @Gentle in #443
- fix: successfully pass context to nested routes via
<Outlet/>
by @gbj in #447 - feature: allow
on:
event listeners on<Component/>
nodes by @gbj in #448 - fix: update leptos dependencies paths to the workspace by @turbotobias in #449
- fix:
leptos_router
hydration issues by @gbj in #450 - Clippy: "{input} is not a supported environment." by @martinfrances107 in #451
- fix: stack overflow in with nested outlet (closes #452) by @gbj in #453
- fix: typo in
leptos_config
description by @odiseo0 in #455 - docs: add new
Children
types to macro docs by @gbj in https://g...
`v0.2.0-beta`
v0.2.0-beta
This release is a preview, and also serves to generate new docs on docs.rs, as the current ones are getting slightly out of sync with our main
branch here.
Changes from 0.2.0-alpha
to 0.2.0-beta
Resource::read()
andResource::with()
now take aScope
as their first argument, i.e.,resource.read()
is nowresource.read(cx)
. This is necessary for correct<Suspense/>
behavior.- The
Errors
type has been modified to hide its internals and exposeIntoIter
directly. In 99% of cases this just means replacing references likeerrors.get().0.into_iter()
witherrors.get().into_iter()
- Most of the methods on various signal types have been moved into traits instead. This should not cause any actual changes to the way you use them, and if you are accustomed to
use leptos::*
you probably won't notice the difference; if you are manually importing types you will need to import the signal traits as well.
Included below are the notes for 0.2.0-alpha
, so you can see changes since 0.1.3
as well.
Breaking Changes since 0.1.3
- The
<For/>
componentview
argument now takes aScope
as its first argument, i.e., a change fromview=move |counter| { ... }
toview=move |cx, counter| { ... }
- The
<ErrorBoundary/>
componentfallback
argument now takes aFn(Scope, RwSignal<Errors>) -> impl IntoView
instead ofFn(Scope, Option<RwSignal<Errors>>) -> impl IntoView
NodeRef
now takesNodeRef<T>
instead ofNodeRef<HtmlElement<T>>
. We're also deprecatingNodeRef::new(cx)
in favor ofcreate_node_ref(cx)
to follow the same pattern as everything else in the framework.- We've finally achieved full consistency between
cargo-leptos
and the server integrations whether you're usingcargo-leptos
or not. Thesite_address
field is now namedsite_addr
; the compiler should actually prompt you correctly for this one. - The current Leptos global namespace is polluted with a huge number of types and reexports, making it harder to find things in docs and adding compile-time overhead. If you're used to
use leptos::*
you may need to manually import a few additional types. We're also no longer reexportingwasm-bindgen
,web-sys
, andjs-sys
so you may need to add them as dependencies to yourCargo.toml
- APIs to modify status code and headers in HTTP responses are now synchronous, making them easier to set in components
Other Improvements
- New
<Html/>
and<Body/>
components inleptos_meta
that let you change things like<html>
lang
anddir
, and add aclass
to the<body>
- Restoring
on:
event listeners on<Component/>
nodes, e.g.,<MyFancyButton on:click=.../>
without needing to create anon_click
prop - Adding a
<Redirect/>
component in the router that works during client-side navigation or server-side rendering Children
,AttributeValue
, and other type aliases to make it easier to accept a variety of types in your components- Experimentation with new docs using CodeSandboxes and an expanding set of tutorials
- So, so, so, so many bugfixes, typos, docs improvements, and small changes by many, many, many members of the community. Thanks to you all!
What's Changed
- leptos_dom erros.rs remove() does not need to be generic. by @martinfrances107 in #516
- fix: correct namespace for
Unit
in empty views (closes #518) by @gbj in #520 - Reexport
web-sys
event types to make it easier to type handlers by @gbj in #521 - Identify CSS to reload from the href by @akesson in #524
- change: tweak API of
Errors
and implementIntoIter
by @gbj in #522 - fix: top-level SVG in
view
macro with new exports by @gbj in #525 - feature: reintroduce limited template-node cloning w/
template
macro by @gbj in #526 - fix: hydration IDs for elements following
<Suspense/>
(closes #527) by @gbj in #531 - feature: in-order streaming and
async
rendering by @gbj in #496 - fix compile of leptos dom by @seanaye in #535
- Signal traits by @jquesada2016 in #490
v0.2.0-alpha2
by @gbj in #539- fix: building
leptos_reactive
in release mode by @gbj in #540 - 533 by @jquesada2016 in #538
- fix(examples): hackernews_axum styles href by @ApplY3D in #536
- revert PR #538 by @gbj in #544
- fix: more work on hydration IDs with
<Suspense/>
by @gbj in #545 - change: pass
Scope
intoResource::read()
andResource::with()
by @gbj in #542 - document typo by @chrislearn in #553
- Fix typo in hydration.rs by @eltociear in #552
- Fix issue with redirects in server fns creating multiple Location headers by @benwis in #550
New Contributors
- @seanaye made their first contribution in #535
- @ApplY3D made their first contribution in #536
- @chrislearn made their first contribution in #553
- @eltociear made their first contribution in #552
Full Changelog: v0.2.0-alpha...v0.2.0-beta
`v0.2.0-alpha`
v0.2.0-alpha
This release is a preview, and also serves to generate new docs on docs.rs, as the current ones are getting slightly out of sync with our main
branch here.
I do not expect significant difficulties in migrating from 0.1.3
to 0.2.0
. There are a few API tweaks here that necessitate a version bump but it's an order of magnitude smaller than the change from 0.0.x
to 0.1.0
and will not touch most parts of your application.
Breaking Changes
- The
<For/>
componentview
argument now takes aScope
as its first argument, i.e., a change fromview=move |counter| { ... }
toview=move |cx, counter| { ... }
- The
<ErrorBoundary/>
componentfallback
argument now takes aFn(Scope, RwSignal<Errors>) -> impl IntoView
instead ofFn(Scope, Option<RwSignal<Errors>>) -> impl IntoView
NodeRef
now takesNodeRef<T>
instead ofNodeRef<HtmlElement<T>>
. We're also deprecatingNodeRef::new(cx)
in favor ofcreate_node_ref(cx)
to follow the same pattern as everything else in the framework.- We've finally achieved full consistency between
cargo-leptos
and the server integrations whether you're usingcargo-leptos
or not. Thesite_address
field is now namedsite_addr
; the compiler should actually prompt you correctly for this one. - The current Leptos global namespace is polluted with a huge number of types and reexports, making it harder to find things in docs and adding compile-time overhead. If you're used to
use leptos::*
you may need to manually import a few additional types. We're also no longer reexportingwasm-bindgen
,web-sys
, andjs-sys
so you may need to add them as dependencies to yourCargo.toml
- APIs to modify status code and headers in HTTP responses are now synchronous, making them easier to set in components
Other Improvements
- New
<Html/>
and<Body/>
components inleptos_meta
that let you change things like<html>
lang
anddir
, and add aclass
to the<body>
- Restoring
on:
event listeners on<Component/>
nodes, e.g.,<MyFancyButton on:click=.../>
without needing to create anon_click
prop - Adding a
<Redirect/>
component in the router that works during client-side navigation or server-side rendering Children
,AttributeValue
, and other type aliases to make it easier to accept a variety of types in your components- Experimentation with new docs using CodeSandboxes and an expanding set of tutorials
- So, so, so, so many bugfixes, typos, docs improvements, and small changes by many, many, many members of the community. Thanks to you all!
Complete Changelog
- Add
Children
type alias by @gbj in #403 - Fix boolean attributes in
view
macro fast-path SSR by @gbj in #408 - Add
<Html/>
and<Body/>
components inleptos_meta
by @gbj in #407 - Minor: Bump typed-builder from 0.11 to 0.12. by @martinfrances107 in #409
- Escape and tokens in documentation markup. by @martinfrances107 in #410
- fix: correct types for top-level
<option>
and<use>
in SSRview
macro by @gbj in #416 - Switch RwLock to parking_lot so they are no longer async by @benwis in #414
- Add leptos_routes functions for integrations by @b4-io in #415
- Fix issues with attribute names in SSR by @gbj in #418
- Implemented update_returning for StoredValue by @thestarmaker in #419
- Various tweaks to ErrorBoundary by @benwis in #401
- Fix some small issues in
axum_errors
example by @gbj in #424 - fix: Make all fragment rendering lazy (closes #299 and #421) by @gbj in #425
- fixes cx not found on components marked with #[component(transparent)] by @jquesada2016 in #423
- Several Minor Updates on Examples by @Indrazar in #427
- Make
RouteDefinition
public by @gbj in #430 - docs: Document
inner_html
attribute by @gbj in #429 - chore: switch examples to
check
instead ofbuild
(for CI) & add missing examples by @gbj in #437 - Fix top-level SVG elements in SSR by @gbj in #435
- fix: correct behavior of
<Show/>
by @gbj in #436 - Dedup from_str implementations for Env by @g-re-g in #426
- leptos-server: Removed unused dependency on log, linear-map and rmp-serde. by @martinfrances107 in #439
- leptos_macro: Machete - Removed unused deps. by @martinfrances107 in #441
- router: Machete - Removed unused deps. by @martinfrances107 in #442
- use latest tokio in leptos_axum by @Gentle in #443
- fix: successfully pass context to nested routes via
<Outlet/>
by @gbj in #447 - feature: allow
on:
event listeners on<Component/>
nodes by @gbj in #448 - fix: update leptos dependencies paths to the workspace by @turbotobias in #449
- fix:
leptos_router
hydration issues by @gbj in #450 - Clippy: "{input} is not a supported environment." by @martinfrances107 in #451
- fix: stack overflow in with nested outlet (closes #452) by @gbj in #453
- fix: typo in
leptos_config
description by @odiseo0 in #455 - docs: add new
Children
types to macro docs by @gbj in #454 - Derive debug for params struct in server macro by @g-re-g in #458
- perf: further reduce WASM binary size by ~5-7% by @gbj in #459
- Fix #457 by @Threated in #460
- docs: add note about optional
fallback
in<Show/>
(closes #406) by @gbj in #463 - impl Default for MaybeSignal by @ModProg in #464
- feature: add isomorphic
<Redirect/>
component (closes #412) by @gbj in #466 - Add simple icon logo by @underscorefunk in #468
- error on non meta input for prop attribute by @ModProg in #469
- fix: don't override element event listeners with component event listeners by @gbj in #470
- fix: fix
node_ref
in SSR by @gbj in #471 - Convert site_address to site_addr by @benwis in #462
- impl From<&str> for MaybeSignal by @g-re-g in #472
- fix: correct out-of-order streaming behavior (closes #473) by @gbj in #475
- fix:
cargo doc
in projects using#[server]
by @gbj in #476 - fix: adding/removing errors from
<ErrorBoundary/>
by @gbj in #478 - Experiments in new tutorial/guide format with integrated CodeSandboxes by @gbj in #375
- remove unnecessary
"openssl"
feature from Actix examples by @gbj in #480 - Better styling for router related components by @Threated in #477
- fix: errors on 404 page in
axum_errors
example by @gbj in #485 - Minor: Clippy router now uses types OnFormData and OnResponse. by @martinfrances107 in #484
- fix: correct behavior for
inner_html
in SSR by @gbj in #487 - fix: typed route params with
#[derive(Params)]
by @gbj in #488 - Fix node ref generics by @jquesada2016 in #481
- fix: fix
debug_warn
behavior in reactive crate and removelog
dependency by @gbj in #491 - change: add
Scope
to view function in<For/>
to avoid memory "leak" by @gbj in #492 - fix: error boundary hydration by @gbj in #494
- Suspense: removed unused .clone() call. by @martinfrances107 in #486
- examples: remove unused
index.html
by @gbj in #497 - Allow literal string as class in view macro by @g-re-g in #500
- fix: proper disposal of nested route scopes by @gbj in #499
- workspace
rustfmt
by @jquesada2016 in #483 - apply new formatting everywhere by @gbj in #502
- Docs improvements by @gbj in #505
- fix:
<For/>
intodomvc
example by @gbj in #504 - docs: add docs on testing (clos...