15 releases (breaking)
Uses new Rust 2024
| new 0.11.0 | Jun 4, 2026 |
|---|---|
| 0.9.0 | May 10, 2026 |
| 0.8.0 | Mar 25, 2026 |
| 0.6.2 | Oct 30, 2025 |
| 0.0.0 | Nov 26, 2024 |
#114 in Graphics APIs
6,777 downloads per month
Used in 30 crates
(12 directly)
95KB
1.5K
SLoC
2D drawing abstraction that allows applications/frameworks to support many rendering backends through a unified API.
Painting a scene
The core abstraction in AnyRender is the PaintScene trait.
PaintScene is a "sink" which accepts drawing commands:
- Applications and libraries draw by pushing commands into a
PaintScene - Backends execute those commands to produce an output
Rendering to surface or buffer
In addition to PaintScene, there is:
- The
ImageRenderertrait which provides an abstraction for rendering to aVec<u8>RGBA8 buffer. - The
WindowRenderertrait which provides an abstraction for rendering to a surface/window
SVG
The anyrender_svg crate allows SVGs to be rendered using AnyRender
WASM support
Wgpu adapter/device/surface initialization is fundamentally async on the web. To avoid
deadlocking the JS event loop, WindowRenderer::resume takes an on_ready callback:
GPU backends spawn the init on wasm_bindgen_futures::spawn_local and invoke the callback
once the surface is live. The embedder then calls WindowRenderer::complete_resume to
transition the renderer to the active state. On native targets the same code path runs
inline (pollster::block_on on the GPU backends), so callers see no behavioural difference.
Backends
Currently existing backends are:
Dependencies
~1.5MB
~27K SLoC