Skip to content

Releases: leptos-rs/leptos

0.6.4

30 Jan 16:08
@gbj gbj
Compare
Choose a tag to compare

This fixes a few bugs that have popped up since 0.6.3. For general 0.6 migration notes, see here.

What's Changed

  • chore: define edtion = "2021" in rustfmt.toml by @chrisp60 in #2235
  • fix: correctly track source in create_local_resource (closes #2237) by @gbj in #2238
  • example: file upload with streaming progress bar by @gbj in #2242
  • fix: serialization error during SSR on ServerFnError by @gbj in #2240

Full Changelog: v0.6.3...v0.6.4

0.6.3

27 Jan 02:14
@gbj gbj
Compare
Choose a tag to compare

This is release for our new server functions rewrite and Axum 0.7 support.
This should be a relatively feature-rich release, with limited breaking changes.

Migration

Actix

  • You can remove any explicit .handle_server_fns() call in your main.rs, as server functions are now handled in .leptos_routes()
  • The current extract function has been removed, and replaced with a new extract that has the same API as the current extractor. I think this API is strictly better, but please share feedback if you disagree.

Axum

  • This release supports Axum 0.7, so you'll need to migrate from Axum 0.6. The easiest way to do this is probably to consult the diff on one of the examples. (Note that along with Axum 0.7, you'll need to update to http 1.0 and tower_http 0.5.)
  • You can remove any explicit .handle_server_fns() call in your main.rs, as server functions are now handled in .leptos_routes()
  • The current extract function has been removed, and replaced with a new extract that has the same API as the current extractor. I think this API is strictly better, but please share feedback if you disagree.
  • RequestParts has been removed, as http::request::Parts now implements Clone: any use_context::<RequestParts>() should be updated to use Parts directly instead.

ServerFnError::new()

The addition of custom error types means that constructing ServerFnError inside server functions can cause type inference errors:

let oops = Err(ServerFnError::ServerError("No server state".to_string()));
return oops;  // this is fine
oops? // this is not: cannot infer type of the type parameter `E` declared on the enum `ServerFnError`

As a result, we've added a helper ServerFnError::new which simply constructs a ServerFnError::<NoCustomError>::ServerError:

let oops = Err(ServerFnError::new("No server state"));
return oops;  // this is fine
oops? // this is also fine now

This has the benefit of being more concise than the earlier pattern in any case.

Features

A rewritten server function system that is backwards-compatible, but reduces binary size and increases flexibility, specifically by allowing

  • automatic setup of server fn handlers with .leptos_routes() from the integrations
  • a variety of additional built-in encodings (rkyv, multipart forms/file uploads) in addition to the current set (GET URL, POST URL, CBOR, Rkyv) (#1868, #1989)
  • support for streaming responses from server functions (#1284)
  • ability to create custom user encodings for input and output by deriving IntoReq, FromReq, IntoRes, and/or FromRes traits
  • ability to mix and match encodings easily: This server function should be a JSON POST request and a ByteStream response, this one should be GET URL request and an rkyv response, etc.; any combination of the encodings above is supported
  • custom error types (#1657)
  • a #[middleware] macro to add per-server-function middleware from the Tower or Actix ecosystems (#1461)

Note: The additional included encodings (serde_lite, rkyv, multipart form data) are all enabled by additive features on the server_fn crate. If you want to use them you can just add that crate as a dependency and enable the required features.

Example: You can find a comprehensive example of these new features in the new server_fns_axum example.

Full Changelog: v0.5.7...0.6.3

0.6.2

26 Jan 23:52
@gbj gbj
Compare
Choose a tag to compare

This is release for our new server functions rewrite and Axum 0.7 support.
This should be a relatively feature-rich release, with limited breaking changes.

Migration

Actix

  • You can remove any explicit .handle_server_fns() call in your main.rs, as server functions are now handled in .leptos_routes()
  • The current extract function has been removed, and replaced with a new extract that has the same API as the current extractor. I think this API is strictly better, but please share feedback if you disagree.

Axum

  • This release supports Axum 0.7, so you'll need to migrate from Axum 0.6. The easiest way to do this is probably to consult the diff on one of the examples. (Note that along with Axum 0.7, you'll need to update to http 1.0 and tower_http 0.5.)
  • You can remove any explicit .handle_server_fns() call in your main.rs, as server functions are now handled in .leptos_routes()
  • The current extract function has been removed, and replaced with a new extract that has the same API as the current extractor. I think this API is strictly better, but please share feedback if you disagree.
  • RequestParts has been removed, as http::request::Parts now implements Clone: any use_context::<RequestParts>() should be updated to use Parts directly instead.

ServerFnError::new()

The addition of custom error types means that constructing ServerFnError inside server functions can cause type inference errors:

let oops = Err(ServerFnError::ServerError("No server state".to_string()));
return oops;  // this is fine
oops? // this is not: cannot infer type of the type parameter `E` declared on the enum `ServerFnError`

As a result, we've added a helper ServerFnError::new which simply constructs a ServerFnError::<NoCustomError>::ServerError:

let oops = Err(ServerFnError::new("No server state"));
return oops;  // this is fine
oops? // this is also fine now

This has the benefit of being more concise than the earlier pattern in any case.

Features

A rewritten server function system that is backwards-compatible, but reduces binary size and increases flexibility, specifically by allowing

  • automatic setup of server fn handlers with .leptos_routes() from the integrations
  • a variety of additional built-in encodings (rkyv, multipart forms/file uploads) in addition to the current set (GET URL, POST URL, CBOR, Rkyv) (#1868, #1989)
  • support for streaming responses from server functions (#1284)
  • ability to create custom user encodings for input and output by deriving IntoReq, FromReq, IntoRes, and/or FromRes traits
  • ability to mix and match encodings easily: This server function should be a JSON POST request and a ByteStream response, this one should be GET URL request and an rkyv response, etc.; any combination of the encodings above is supported
  • custom error types (#1657)
  • a #[middleware] macro to add per-server-function middleware from the Tower or Actix ecosystems (#1461)

Note: The additional included encodings (serde_lite, rkyv, multipart form data) are all enabled by additive features on the server_fn crate. If you want to use them you can just add that crate as a dependency and enable the required features.

Example: You can find a comprehensive example of these new features in the new server_fns_axum example.

Full Changelog: v0.5.7...0.6.2

0.6.1

26 Jan 21:03
Compare
Choose a tag to compare

This is release for our new server functions rewrite and Axum 0.7 support.
This should be a relatively feature-rich release, with limited breaking changes.

Migration

Actix

  • You can remove any explicit .handle_server_fns() call in your main.rs, as server functions are now handled in .leptos_routes()
  • The current extract function has been removed, and replaced with a new extract that has the same API as the current extractor. I think this API is strictly better, but please share feedback if you disagree.

Axum

  • This release supports Axum 0.7, so you'll need to migrate from Axum 0.6. The easiest way to do this is probably to consult the diff on one of the examples.
  • You can remove any explicit .handle_server_fns() call in your main.rs, as server functions are now handled in .leptos_routes()
  • The current extract function has been removed, and replaced with a new extract that has the same API as the current extractor. I think this API is strictly better, but please share feedback if you disagree.
  • RequestParts has been removed, as http::request::Parts now implements Clone: any use_context::<RequestParts>() should be updated to use Parts directly instead.

ServerFnError::new()

The addition of custom error types means that constructing ServerFnError inside server functions can cause type inference errors:

let oops = Err(ServerFnError::ServerError("No server state".to_string()));
return oops;  // this is fine
oops? // this is not: cannot infer type of the type parameter `E` declared on the enum `ServerFnError`

As a result, we've added a helper ServerFnError::new which simply constructs a ServerFnError::<NoCustomError>::ServerError:

let oops = Err(ServerFnError::new("No server state"));
return oops;  // this is fine
oops? // this is also fine now

This has the benefit of being more concise than the earlier pattern in any case.

Features

A rewritten server function system that is backwards-compatible, but reduces binary size and increases flexibility, specifically by allowing

  • automatic setup of server fn handlers with .leptos_routes() from the integrations
  • a variety of additional built-in encodings (rkyv, multipart forms/file uploads) in addition to the current set (GET URL, POST URL, CBOR, Rkyv) (#1868, #1989)
  • support for streaming responses from server functions (#1284)
  • ability to create custom user encodings for input and output by deriving IntoReq, FromReq, IntoRes, and/or FromRes traits
  • ability to mix and match encodings easily: This server function should be a JSON POST request and a ByteStream response, this one should be GET URL request and an rkyv response, etc.; any combination of the encodings above is supported
  • custom error types (#1657)
  • a #[middleware] macro to add per-server-function middleware from the Tower or Actix ecosystems (#1461)

Note: The additional included encodings (serde_lite, rkyv, multipart form data) are all enabled by additive features on the server_fn crate. If you want to use them you can just add that crate as a dependency and enable the required features.

Example: You can find a comprehensive example of these new features in the new server_fns_axum example.

Full Changelog: v0.5.6...v0.6.1

0.6.0-rc1

25 Jan 02:56
@gbj gbj
Compare
Choose a tag to compare
0.6.0-rc1 Pre-release
Pre-release

This is prerelease for our new server functions rewrite and Axum 0.7 support.

This should be a relatively feature-rich release, with limited breaking changes.

I'm interested in gathering feedback in the discussion associated with this release.

Migration

Actix

  • You can remove any explicit .handle_server_fns() call in your main.rs, as server functions are now handled in .leptos_routes()
  • The current extract function has been removed, and replaced with a new extract that has the same API as the current extractor. I think this API is strictly better, but please share feedback if you disagree.

Axum

  • This release supports Axum 0.7, so you'll need to migrate from Axum 0.6. The easiest way to do this is probably to consult the diff on one of the examples.
  • You can remove any explicit .handle_server_fns() call in your main.rs, as server functions are now handled in .leptos_routes()
  • The current extract function has been removed, and replaced with a new extract that has the same API as the current extractor. I think this API is strictly better, but please share feedback if you disagree.
  • RequestParts has been removed, as http::request::Parts now implements Clone: any use_context::<RequestParts>() should be updated to use Parts directly instead.

ServerFnError::new()

The addition of custom error types means that constructing ServerFnError inside server functions can cause type inference errors:

let oops = Err(ServerFnError::ServerError("No server state".to_string()));
return oops;  // this is fine
oops? // this is not: cannot infer type of the type parameter `E` declared on the enum `ServerFnError`

As a result, we've added a helper ServerFnError::new which simply constructs a ServerFnError::<NoCustomError>::ServerError:

let oops = Err(ServerFnError::new("No server state"));
return oops;  // this is fine
oops? // this is also fine now

This has the benefit of being more concise than the earlier pattern in any case.

Features

A rewritten server function system that is backwards-compatible, but reduces binary size and increases flexibility, specifically by allowing

  • automatic setup of server fn handlers with .leptos_routes() from the integrations
  • a variety of additional built-in encodings (rkyv, multipart forms/file uploads) in addition to the current set (GET URL, POST URL, CBOR, Rkyv) (#1868, #1989)
  • support for streaming responses from server functions (#1284)
  • ability to create custom user encodings for input and output by deriving IntoReq, FromReq, IntoRes, and/or FromRes traits
  • ability to mix and match encodings easily: This server function should be a JSON POST request and a ByteStream response, this one should be GET URL request and an rkyv response, etc.; any combination of the encodings above is supported
  • custom error types (#1657)
  • a #[middleware] macro to add per-server-function middleware from the Tower or Actix ecosystems (#1461)

Note: The additional included encodings (serde_lite, rkyv, multipart form data) are all enabled by additive features on the server_fn crate. If you want to use them you can just add that crate as a dependency and enable the required features.

Example: You can find a comprehensive example of these new features in the new server_fns_axum example.

What's Changed since 0.6.0-beta

  • fix: ci stopped detecting leptos or example changes by @agilarity in #2194
  • fix: routing regressions caused by trailing_slash support by @gbj in #2203
  • examples: update axum-session because old version was yanked by @gbj in #2205
  • docs: View::render_to_string panic by @chrisp60 in #2200
  • fix: leptos_meta should not enable tracing feature on leptos by default (closes #2158) by @gbj in #2211
  • feat: Default for LeptosOptions, ConfFile by @chrisp60 in #2208
  • Make static rendered routes servable and provide context to static_params by @NiklasEi in #2207
  • chore: minimize features activated with leptos_axum's default feature (#1846) by @gbj in #2213
  • feat: add support for custom encoding to #[server] macro by @gbj in #2216
  • fix: .refetch() should not include any tracked reads by @gbj in #2222

Full Changelog: v0.6.0-beta...0.6.0-rc1

v0.5.7

19 Jan 18:09
@gbj gbj
Compare
Choose a tag to compare

This has been a rocky week for releases. While finalizing the work on 0.6.0, I intended to publish a final 0.5.5 that would contain all the remaining changes to the 0.5 series. Unfortunately, this release contained two serious issues:

  1. breaking doc comments on server functions (fixed and rereleased in 0.5.6)
  2. The trailing_slash changes to the router in 0.5.5 broke the current routing behavior in several situations (see #2203 for details)

Because some (many?) existing 0.5 apps would break with this new feature under 0.5 β€” and worse, because they would compile and then either panic or display the wrong page β€” I decide to revert the feature immediately. This meant a semver-breaking change between 0.5.6 and 0.5.7, so I have yanked 0.5.5 and 0.5.6 of all the crates.

We've added some appropriate regression tests for those issues. Apologies to anyone whose work was affected by this!

v0.6.0-beta

17 Jan 13:10
@gbj gbj
Compare
Choose a tag to compare
v0.6.0-beta Pre-release
Pre-release

This is a beta release for our new server functions rewrite and Axum 0.7 support.

This should be a relatively feature-rich release, with limited breaking changes.

I'm interested in gathering feedback in the discussion associated with this release.

Migration

Actix

  • You can remove any explicit .handle_server_fns() call in your main.rs, as server functions are now handled in .leptos_routes()
  • The current extract function has been removed, and replaced with a new extract that has the same API as the current extractor. I think this API is strictly better, but please share feedback if you disagree.

Axum

  • This release supports Axum 0.7, so you'll need to migrate from Axum 0.6. The easiest way to do this is probably to consult the diff on one of the examples.
  • You can remove any explicit .handle_server_fns() call in your main.rs, as server functions are now handled in .leptos_routes()
  • The current extract function has been removed, and replaced with a new extract that has the same API as the current extractor. I think this API is strictly better, but please share feedback if you disagree.
  • RequestParts has been removed, as http::request::Parts now implements Clone: any use_context::<RequestParts>() should be updated to use Parts directly instead.

Features

A rewritten server function system that is backwards-compatible, but reduces binary size and increases flexibility, specifically by allowing

  • automatic setup of server fn handlers with .leptos_routes() from the integrations
  • a variety of additional built-in encodings (rkyv, multipart forms/file uploads) in addition to the current set (GET URL, POST URL, CBOR, Rkyv) (#1868, #1989)
  • support for streaming responses from server functions (#1284)
  • ability to create custom user encodings for input and output by deriving IntoReq, FromReq, IntoRes, and/or FromRes traits
  • ability to mix and match encodings easily: This server function should be a JSON POST request and a ByteStream response, this one should be GET URL request and an rkyv response, etc.; any combination of the encodings above is supported
  • custom error types (#1657)
  • a #[middleware] macro to add per-server-function middleware from the Tower or Actix ecosystems (#1461)

Note: The additional included encodings (serde_lite, rkyv, multipart form data) are all enabled by additive features on the server_fn crate. If you want to use them you can just add that crate as a dependency and enable the required features.

Example: You can find a comprehensive example of these new features in the new server_fns_axum example.

v0.5.6

17 Jan 01:06
Compare
Choose a tag to compare

Fix issue were doc comments on server functions caused an error. Sorry bout that!

What's Changed

  • fix: doc comments breaking server functions (closes #2190) by @gbj in #2191

Full Changelog: v0.5.5...v0.5.6

v0.5.5

15 Jan 23:35
041b86e
Compare
Choose a tag to compare

This is a (mostly) bug fix and documentation improvements release. If you're interested in the full list, check out the full What's Changed list below.

What's New

Trailing Slash Changes

@NfNitLoop discovered that by default the leptos_router strips trailing slashes from routes, which might not be what users expect. By default, leptos_router drops the trailing slash on /foo/. He's added a new optional setting on Router that could allow you to keep the slashes and have routes for both /foo and /foo/ or redirect from /foo/ to /foo. Check out the docs for details: https://docs.rs/leptos_router/0.5.5/leptos_router/enum.TrailingSlash.html
Thanks @NfNitLoop!

Thanks to all our new and existing contributors, the 0.6 alpha will be coming out soon with fancy new server functions, so don't go away!

What's Changed

New Contributors

Full Changelog: v0.5.4...v0.5.5

v0.5.4

28 Nov 23:55
@gbj gbj
Compare
Choose a tag to compare

v0.5.4

v0.5.3 inadvertently introduced a regression in the <A/> tag that broke [aria-current=page]. Here's 0.5.4 with a fix!

0.5.3 release notes below:


Along with the usual set of bugfixes and small improvements, there are two noteworthy additions in this release.

Improved rust-analyzer support in #[component] macro body

Good LSP support for proc macros is hard, because proc macros depend on parsing a stream of input into a valid Rust syntax tree, but while typing you are constantly creating a stream of new, invalid trees. This release tweaks how the #[component] macro emits code in order to enable better rust-analyzer support within the body of components.

If you've disabled rust-analyzer inside #[component] for better DX, try toggling that off and see if this is a better experience than it was before!

Apologies for any regressions this causes. Please report any issues that arise.

There is still additional work to be done to support rust-analyzer in the view! macro. The hoped-for improvements here are solely inside the #[component] body.

Optional Context <Provider/> Component

Since 0.5.0, there've been a couple instances of bugs or confusing behavior related to the fact that context now follows the reactive graph, not the component tree (see #1986, #2038).

This release includes a <Provider/> component that provides a certain value via context only to its children:

#[component]
pub fn App() -> impl IntoView {
    // each Provider will only provide the value to its children
    view! {
        <Provider value=1u8>
            // correctly gets 1 from context
            {use_context::<u8>().unwrap_or(0)}
        </Provider>
        <Provider value=2u8>
            // correctly gets 2 from context
            {use_context::<u8>().unwrap_or(0)}
        </Provider>
        // does not find any u8 in context
        {use_context::<u8>().unwrap_or(0)}
    }
}

provide_context continues working as it has since 0.5.0, and if you're using it without problems you can ignore this, or use it if you prefer to aesthetics. If you're in a situation where you need to provide multiple context values of the same type and ensure that they are scoped correctly and that siblings do not overwrite one another, use <Provider/>. If you have no idea what I mean, check the issues above for examples of the bugs this fixes.

What's Changed

Full Changelog: v0.5.3...v0.5.4