3 releases

new 0.1.3 Dec 3, 2024
0.1.1 Nov 28, 2024
0.1.0 Nov 28, 2024

#1603 in Web programming

Download history 244/week @ 2024-11-25

244 downloads per month

MIT license

46KB
869 lines

leptos_wasi

Run your Leptos Server-Side in WebAssembly using WASI standards.

Explainer

WebAssembly is already popular in the browser but organisations like the Bytecode Alliance are committed to providing the industry with new standard-driven ways of running software. Specifically, they are maintaining the Wasmtime runtime, which allows running WebAssembly out of the browser (e.g., on a serverless platform).

Leptos is already leveraging WebAssembly in the browser and gives you tools to build web applications with best-in-class performance.

This crate aims to go further and enable you to also leverage WebAssembly for your Leptos Server. Specifically, it will allow you to target the rust wasm32-wasip2 target for the server-side while integrating seamlessly with the Leptos Framework.

Running cargo leptos build will provide you with a WebAssembly Component importing the wasi:http/proxy world. This means you can serve your server on any runtime supporting this world, for example:

wasmtime serve target/server/wasm32-wasip2/debug/your_crate.wasm -Scommon

Disclaimer

This crate is EXPERIMENTAL and the author is not affiliated with the Bytecode Alliance nor funded by any organisation. Consider this crate should become a community-driven project and be battle-tested to be deemed production-ready.

Contributions are welcome!

Usage

TODO: Write a template starter for the crate.

Compatibility

This crate only works with the future Leptos v0.7.

Features

  • 🐙 Async Runtime: This crate comes with a single-threaded async executor making full use of WASIp2 pollable, so your server is not blocking on I/O and can benefit from Leptos' streaming SSR Modes.
  • Short-circuiting Mechanism: Your component is smart enough to avoid preparing or doing any rendering work if the request routes to static files or Server Functions.
  • 🚚 Custom Static Assets Serving: You can write your own logic for serving static assets. For example, once wasi:blobstore matures up, you could host your static assets on your favorite Object Storage provider and make your server fetch them seamlessly.

Dependencies

~23–35MB
~558K SLoC