An open API service indexing awesome lists of open source software.

https://github.com/proxin187/stunt

A declarative web framework for Rust/Wasm
https://github.com/proxin187/stunt

asmjs concurrency elm emscripten gui jsx multithreading rust rust-lang rust-library wasm web web-development web-framework webapp webworkers

Last synced: 3 months ago
JSON representation

A declarative web framework for Rust/Wasm

Awesome Lists containing this project

README

          






stunt




[![crates.io](https://img.shields.io/badge/crates.io-stunt-red?style=for-the-badge&logo=none)](https://crates.io/crates/stunt)
[![docs.rs](https://img.shields.io/badge/docs.rs-stunt-green?style=for-the-badge&logo=none)](https://docs.rs/stunt)
![GitHub License](https://img.shields.io/badge/license-MIT-red?style=for-the-badge&logo=none)


An isomorphic web framework for Rust.

> [!WARNING]
> stunt is currently undergoing a large change in api and is NOT ready for production use at the moment.

## Features

* Isomorphic: Write server logic alongside client-side components, and call server logic from the client with [services](). Services can also integrate with foreign APIs.
* Html Macro: Macro for writing html with rust expressions, similar to that of JSX.
* Type checked: Compile-time type checking of components to prevent runtime bugs.

## Usage
This crate is on [crates.io](https://crates.io/crates/stunt) and can be added either through
adding `stunt` to your dependencies in `Cargo.toml`:
```toml
[dependencies]
stunt = "0.1.3"
```
Or running the following Cargo command in your project directory:
```bash
cargo add stunt
```

## Example
More examples can be found at [examples](https://github.com/proxin187/stunt/tree/main/examples).

```rust
use stunt::prelude::*;

pub enum Message {
Add,
}

pub struct App {
count: usize,
}

impl Component for App {
type Message = Message;
type Properties = ();

fn create() -> App {
App {
count: 0,
}
}

fn callback(&mut self, message: &Message) {
match message {
Message::Add => {
self.count += 1;
},
}
}

fn view(&self, _: ()) -> Html {
html! {



{ "increment" }


{ self.count }



}
}
}

fn main() {
Renderer::new::().render();
}
```

## Contributing
We highly appreciate all contributions whether its a bug fix, feature, or documentation.
If you encounter any bugs or otherwise weird behaviour we would really appreciate if you submitted an issue for us to look into.

## License
stunt is licensed under the MIT license.