Crate seed

source ·
Expand description

Visit the website

See the github Readme for details

Counter Example

use seed::{prelude::*, *};

// `init` describes what should happen when your app started.
fn init(_: Url, _: &mut impl Orders<Msg>) -> Model {
    Model { counter: 0 }

// `Model` describes our app state.
struct Model { counter: i32 }

// `Msg` describes the different events you can modify state with.
enum Msg {

// `update` describes how to handle each `Msg`.
fn update(msg: Msg, model: &mut Model, _: &mut impl Orders<Msg>) {
    match msg {
        Msg::Increment => model.counter += 1,

// `view` describes what to display.
fn view(model: &Model) -> Node<Msg> {
        "This is a counter: ",
            ev(Ev::Click, |_| Msg::Increment),

pub fn start() {
    // Mount the `app` to the element with the `id` "app".
    App::start("app", init, update, view);



  • Asynchronous values.
  • Introduce El and Tag into the global namespace for convenience (El will be repeated often in the output type of components), and UpdateEl, which is required for element-creation macros, input event constructors, and the History struct. Expose the wasm_bindgen prelude.
  • This file exports helper macros for element creation, populated by a higher-level macro, and macros for creating the parts of elements. (attrs, style, events)



  • A Rust Future backed by a JavaScript Promise.


  • An extension trait for Futures that provides a variety of convenient adapters.
  • Adapters specific to Result-returning futures


  • Convenience function to access the web_sys DOM document.
  • Create an element flagged in a way that it will not be rendered. Useful in ternary operations.
  • Convenience function to access the web_sys history.
  • set_intervalDeprecated
    A high-level wrapper for web_sys::window.set_interval_with_callback_and_timeout_and_arguments_0:
  • set_timeoutDeprecated
  • Runs a Rust Future on the current thread.
  • Convenience function to avoid repeating expect logic.