| Crates.io | leptos_ws |
| lib.rs | leptos_ws |
| version | 0.9.0 |
| created_at | 2024-08-31 10:54:08.628069+00 |
| updated_at | 2025-09-09 12:19:41.657341+00 |
| description | Leptos WS is a Websocket for the Leptos framework to support updates coordinated from the Server |
| homepage | |
| repository | https://github.com/TimTom2016/leptos_ws |
| max_upload_size | |
| id | 1358735 |
| size | 119,868 |
Leptos Websocket provides real-time, reactive signals for Leptos, keeping them in sync with the server through WebSockets. This enables instant UI updates controlled by the server or shared between client and server.
Add the following to your Cargo.toml:
[dependencies]
leptos_ws = "0.9.0"
serde = { version = "1.0", features = ["derive"] }
[features]
hydrate = ["leptos_ws/hydrate"]
ssr = ["leptos_ws/ssr"]
use leptos::prelude::*;
use leptos_ws::ReadOnlySignal;
use serde::{Deserialize, Serialize};
#[component]
pub fn App() -> impl IntoView {
// Connect to WebSocket
leptos_ws::provide_websocket();
// Create a read-only server signal (updated by the server)
let count = ReadOnlySignal::new("count", 0 as i32).unwrap();
view! {
<button on:click=move |_| {
// Call the server function to start updating the count
leptos::spawn_local(async move {
update_count().await.unwrap();
});
}>"Start Counter"</button>
<h1>"Count: " {move || count.get().to_string()}</h1>
}
}
#[server]
async fn update_count() -> Result<(), leptos::ServerFnError> {
use std::time::Duration;
use tokio::time::sleep;
let count = ReadOnlySignal::new("count", 0 as i32).unwrap();
for i in 0..100 {
count.update(|value| *value = i);
sleep(Duration::from_secs(1)).await;
}
Ok(())
}
ssr: Enable server-side rendering support.hydrate: Enable hydration support.csr: Enable client-side rendering support.For more detailed information, check out the API documentation.
The main branch is compatible with the latest Leptos release.
Compatibility of leptos_ws versions:
leptos_ws |
leptos |
|---|---|
0.8-0.9 |
0.8 |
0.7 |
0.7 |
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.