Expand description
Fast, type-safe HTML generation for Rust and WebAssembly.
A port of Winged-Swift 2.0.0: the same
composite tree, the same escape-by-default guarantee, the same compact and pretty
render modes — compiled to native code or to wasm32-unknown-unknown.
§Getting started
use winged_rust::prelude::*;
let card = article()
.add_class("card p-4")
.child(h1().text("Welcome to WingedRust!").add_class("text-2xl"))
.child(p().text("Ultra-fast HTML generation compiled to WebAssembly."));
println!("{}", card.render_pretty());§Escaping
Text content and attribute values are escaped when they enter the tree, not when it
is rendered, so nothing is escaped twice and nothing is missed. Node::Raw is the
documented way to inject markup you already trust.
use winged_rust::prelude::*;
assert_eq!(p().text("<script>").render(), "<p><script></p>");§Render modes
Render::render produces a single line; Render::render_pretty indents. Both take
their configuration from a RenderOptions value rather than global state, so two
threads can render the same tree differently at the same time.
§Limits
Rendering has no depth limit: the writer walks an explicit stack instead of recursing.
What deep trees do cost is output size in pretty mode, which is quadratic in depth
because every line carries one indent string per level. See Render and
SECURITY.md.
§Parity
The crate is verified against Winged-Swift’s own golden fixtures — the same bytes, from
the same page, built through both APIs. Behavioural differences that were introduced on
purpose are listed in PORTING.md.
Re-exports§
pub use crate::core::Attribute;pub use crate::core::Element;pub use crate::core::Node;pub use crate::core::Render;pub use crate::core::RenderOptions;pub use crate::document::Document;pub use crate::layout::Layout;
Modules§
- accessibility
- Accessibility helpers and a debug-time audit.
- core
- The core engine: the node tree, the renderer and escaping.
- document
- Whole-page assembly.
- elements
- Constructors for every HTML element Winged-Swift supports.
- feed
- RSS 2.0 feed generation.
- layout
- Reusable page layouts.
- macros
- The
html!declarative macro. - prelude
- One import that gets you from nothing to a rendered page.
- seo
- SEO metadata: Open Graph, Twitter Cards and the common
<meta>block. - sitemap
- XML sitemap generation.
- ssg
ssg - Static site generation.
- wasm
wasm - WebAssembly bindings.
Macros§
- html
- Builds a node tree from nested markup-like syntax.