plait
A fast, type-safe HTML templating library for Rust.
Plait provides compile-time HTML generation with a concise, Rust-native syntax. Templates are checked at compile time and generate efficient code with minimal runtime overhead.
Quick Start
use ;
let name = "World";
let template = html! ;
let html = render;
assert_eq!;
Macros
Plait provides two macros:
html!- Creates aRenderFnfrom a template, which can be rendered usingrender()attrs!- Creates anAttributescollection for use in templates
Template Syntax
Elements
Elements are written as name { children } for normal elements or name; for void elements:
use ;
let template = html! ;
assert_eq!;
Attributes
Attributes support several value types:
use ;
let class_name = "container";
let maybe_id: = Some;
let is_disabled = true;
let template = html! ;
assert_eq!;
Dynamic Content
Expressions in parentheses are escaped by default:
use ;
let user_input = "<script>alert('xss')</script>";
let template = html! ;
// Content is safely escaped
assert!;
Use : raw to include pre-escaped content:
use ;
let trusted_html = "<strong>Bold</strong>";
let template = html! ;
assert!;
Control Flow
Conditionals
use ;
let show = true;
let value: = Some;
let template = html! ;
assert_eq!;
Loops
use ;
let items = vec!;
let template = html! ;
assert_eq!;
Match Expressions
use ;
let status = Active;
let template = html! ;
assert_eq!;
Custom Components
Create reusable components as functions that return impl Render:
use ;
// Use in templates
let template = html! ;
assert_eq!;
Safety
Plait automatically escapes dynamic content to prevent XSS vulnerabilities. The Html and PreEscaped types
represent content that is already safe and will not be escaped again.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.