Uma DSL de HTML segura para Rust e WebAssembly
Monte HTML em Rust puro.
O Molt oferece um builder fluente e a macro html!, escapa tudo uma vez na entrada e renderiza uma string simples. Zero dependências, cerca de 25 KB de WebAssembly e um site estático que você hospeda em qualquer lugar.
cargo add molt-frameworkLicença MIT. Versão 1.x: o que compila hoje continua compilando.
use molt::prelude::*;
fn main() {
let name = "<script>alert(1)</script>";
let card = div()
.add_class("card")
.child(h1().text("Hello, Molt"))
.child(p().text(name));
println!("{}", card.render());
// <div class="card"><h1>Hello, Molt</h1><p><script>alert(1)</script></p></div>
}
Seguro por padrão, pequeno por projeto
Engines de template fazem você lembrar de escapar. Runtimes fazem você entregar quilobytes que ninguém pediu. O Molt não faz nenhuma das duas coisas: ele é só a camada de HTML e se encaixa no resto da sua stack por uma String.
Seguro por construção
Valores de texto e de atributos são escapados uma única vez, onde entram. Uma URL javascript: vira #. Não existe como esquecer.
Zero dependências
O cargo tree nas features padrão mostra uma única crate: o Molt. wasm-bindgen e rayon são opcionais.
Builder ou macro
Use o builder fluente ou a macro html!. A macro expande para as mesmas chamadas do builder, nunca para um segundo caminho de código.
Gerador de site estático incluso
Grave páginas e assets em disco, com sitemap e feed RSS. A saída é HTML puro que você hospeda em qualquer lugar.
Auditoria de acessibilidade
Audite a árvore antes de publicar a página: imagens sem texto alternativo, botões e links sem nome, e mais.
Tranquilo sob entrada hostil
Uma árvore com 100.000 níveis renderiza sem derrubar o processo, e fixtures golden travam a saída byte a byte: mudou a marcação, falhou um teste.
Rápido o bastante para nunca ser o gargalo
Números dos benchmarks e da suíte de testes do próprio projeto, medidos na máquina de desenvolvimento.
- ≈ 400 µspara renderizar uma lista de 10.000 itens
Modo compacto, medido com Criterion.
- ≈ 25 KBde WebAssembly com gzip
Ative com a feature wasm.
- 0dependências obrigatórias
O build padrão é uma única crate.
- forbidcódigo unsafe
A crate define unsafe_code como forbid.
Hospedar é a parte fácil
O Molt renderiza uma string e o gerador de site estático grava HTML puro. Não há servidor para manter nem nada para deixar aquecido. Este site foi feito com o próprio Molt.
- Rode cargo run e receba uma pasta dist com HTML puro.
- Envie o projeto para o GitHub.
- Deixe um host estático publicar. Este site usa o AWS Amplify, que compila a cada push.
O mesmo núcleo, no navegador
Compile com wasm-pack e chame o Molt pelo JavaScript. Mesmo renderizador, mesmas regras de escape, cerca de 25 KB com gzip.
Ler o guia de WebAssemblyCompile e depois chame pelo JavaScript.
$ cargo install wasm-pack
$ wasm-pack build --target web --features wasm
# writes pkg/molt.js and pkg/molt_bg.wasm
# serve the folder over HTTP, ES modules need it
$ python3 -m http.server
import init, { element, WDocument } from "./pkg/molt.js";
await init();
const page = new WDocument("en")
.addBody(element("h1").text("Hello, Molt"))
.addBody(element("p").text("Same renderer."));
document.body.innerHTML = page.render();
Sua primeira página está a um cargo add de distância
Siga o guia Getting Started ou consulte a referência completa da API no docs.rs.