Code Monkey home page Code Monkey logo

seed's Introduction

crates.io version crates.io downloads docs.rs Built with cargo-make


Seed is a front-end Rust framework for creating fast and reliable web apps with an elm-like architecture.

  • All the benefits of Rust and macro based syntax.
  • Minimal overhead, configuration, and boilerplate.
  • Clear documentation made to be accessible regardless of your familiarity with Rust.
  • Written without any unsafe code and works with stable Rust, no nightly required!

Examples

The examples provided in this repository are a good place to get started. They also act as an integration testing suite we run before every commit to ensure there are no unintended breaking changes to the user space. Because of Rust's compile-time checking, testing is that much more robust and changes can be pushed confidently.

Run examples with cargo make start example_name from the Seed repository root. Here's our counter example:

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

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

// `Model` describes our app state.
type Model = i32;

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

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

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

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

Quickstart

If you are proficient in a front-end framework, creating a standalone web app is painless. You'll notice minimal configuration:

├── Cargo.toml
├── Makefile.toml
├── index.html
└── src
    └── lib.rs

We currently have two template repositories:

Why Use Seed

Rust

You may prefer writing in Rust and appreciate its benefits, including:

  • Rust safety.
  • Rust compile-time error, type, and immutability checking.
  • Rust built-in testing.
  • Rust speed.
  • Cleaner code and less runtime errors.
  • Cargo packages.
  • Potential pipeline/stack language consistency.

Developer Experience

Our main focus is on developer experience, the benefits of which are currently:

  • Seed has a batteries-included approach, meaning less boilerplate and dependencies.
  • Macro syntax removes the need for transpiling and integrates naturally and flexibly with the language. This also means all the pains of embedded HTML are avoided; linting, commenting, etc. all work out of the box.
  • Built in elm-like architecture, no need for another state manager.
  • Perhaps you find JS frameworks and tools difficult to set up.
  • Very active development.

See more on our about page.

Why Not Use Seed

  • Seed is under rapid development, so there may be breaking changes at times. However, Seed is more than stable enough for personal projects, and production apps are in development.
  • Finding Rust/WASM/Seed help outside of Discord or Discourse may be difficult, as tutorials and guides outside the official ones aren't yet prevalent.
  • Seed doesn't have as many existing reusable components that more mature frameworks have (date-pickers, etc.), so you may need to implement them yourself, or adapt them from existing solutions.

Documentation

Resources

Seed

Rust

Future

Contributing

See CONTRIBUTING.md.

seed's People

Contributors

david-oconnor avatar martinkavik avatar sapir avatar tatrix avatar flosse avatar alterionx avatar arn-the-long-beard avatar muhannadalrusayni avatar naufraghi avatar ben-ph avatar hgzimmerman avatar jgrund avatar klemens avatar eopb avatar akhilman avatar tiberiusferreira avatar tkubicz avatar spersson avatar sagiegurari avatar callumjhays avatar pauan avatar jesskfullwood avatar zimond avatar ctjhoa avatar platy avatar rsaccon avatar gihrig avatar familyfriendlymikey avatar tokcum avatar johnsonw avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.