| Crates.io | saucer |
| lib.rs | saucer |
| version | 0.0.2 |
| created_at | 2025-11-29 19:13:39.323284+00 |
| updated_at | 2025-11-29 19:22:39.752661+00 |
| description | Saucer - A Rust framework implementing The Elm Architecture (TEA) - coming soon |
| homepage | |
| repository | https://github.com/srobertson/saucer |
| max_upload_size | |
| id | 1957288 |
| size | 9,770,202 |

Status: Coming Soon
Saucer is a Rust framework implementing The Elm Architecture (TEA) - a pattern for building robust, maintainable applications with:
The Elm Architecture provides a simple pattern: Model + Event → (Model, Commands), making your application logic predictable, testable, and easy to reason about.
Saucer uses a build script to generate type-safe runtime code. Write your app logic in pure Rust:
src/app.rs:
// Your pure business logic - no side effects
use saucer_core::Cmd;
use saucer_time::command::time_now;
pub struct Model {
current_time: Option<String>,
}
pub enum Msg {
GotTime(f64),
}
pub fn init() -> (Model, Cmd<Msg>) {
(
Model { current_time: None },
time_now(Msg::GotTime)
)
}
pub fn update(model: Model, msg: Msg) -> (Model, Cmd<Msg>) {
match msg {
Msg::GotTime(timestamp) => {
let time_str = format!("Time: {}", timestamp);
println!("{}", time_str);
(
Model { current_time: Some(time_str) },
Cmd::none()
)
}
}
}
src/main.rs:
mod runtime {
include!(concat!(env!("OUT_DIR"), "/runtime.rs"));
}
use runtime::{Runtime, app};
fn main() {
Runtime::run(app::init, app::update);
}
build.rs:
fn main() {
saucer_core::build::generate_runtime();
}
The build script discovers your effect managers and generates type-safe Cmd wrappers automatically.
Stay tuned for the release!
MIT License - see LICENSE for details.