11 releases (4 breaking)
0.5.0 | Jan 31, 2021 |
---|---|
0.4.0 | Oct 24, 2020 |
0.3.3 | Oct 14, 2020 |
0.2.0 | Jun 8, 2020 |
0.1.1 | May 30, 2020 |
#32 in Email
509 downloads per month
Used in mrml-cli
285KB
8K
SLoC
MRML
Introduction
This project is a reimplementation of the nice MJML
markup language in Rust.
How to use it
use mrml;
fn main() {
match mrml::to_html("<mjml><mj-body></mj-body></mjml>", mrml::Options::default()) {
Ok(content) => println!("{}", content),
Err(_) => println!("couldn't convert mjml template"),
};
}
Why?
- A
Node
server rendering a mjml template takes around 20Mo of RAM at startup and 130Mo under stress test. InRust
, less than 1.7Mo at startup and a bit less that 3Mo under stress test. TheRust
version can also handle 2 times more requests per seconds. You can run the bench by doingbash script/run-bench.sh
. - The
JS
implementation cannot be run in the browser. InRust
(andWasm
), you can.
You want to contribute?
Feel free to read our contributing section and the code of conduct.
Performance
With the same linux amd64 machine, to render the amario template
- Node: 62.803ms
- Rust: 13.180ms
To reproduce those results:
- Node, in
example/mjml-bench
runnpm start -- ../../resources/template-amario.mjml
- Rust, run
cargo bench amario
With a web server, as of today, on a mac book pro from 2017. (Old result) | | Rust | Node | | ---------------------- | ------ | -------- | | Requests per seconds | 520.50 | 272.61 | | CPU usage at boot time | 0.20% | 1.74% | | CPU usage under bench | 49.81% | 136.83% | | RAM usage at boot time | 1.12MB | 17.27MB | | RAM usage under bench | 2.85MB | 128.32MB | | Docker image size | 77.3MB | 178MB |
Dependencies
~2MB
~50K SLoC