A wgpu-native 2D renderer workspace. netrender ingests display lists and
produces pixels on top of wgpu and
vello.
The repository began as a fork of Mozilla/Servo's WebRender; vello is now the
sole rasterizer. The pre-pivot WebRender-wgpu work survives only as
archive/* annotated tags (indexed in
netrender-notes/archive/2026-08-10_branch_archive.md).
The Classic backend uses netrender-vello 0.10.1 on wgpu 30. Its dynamic
GPU buffers grow from asynchronously read-back allocation counts. An
overflowing frame can be blank until a later render uses those counts;
recovery remains bounded by the device's storage-buffer limits.
Classic's original roadmap scope passed its 2026-08-10 audit. Experimental
CPU/Hybrid adapters have since landed, with resource and host-integration gaps
tracked in the sparse backend plan.
The opt-in vello-cpu and vello-hybrid features now expose CpuSession
and HybridSession for CPU-owned RGBA images, with persistent sources,
bounded crop/tint caches and typed admission errors. CPU renders to pixels
without requesting a device; Hybrid uses the host's existing device and
encoder. Owned sessions also support repeated patterns: CPU admits nearest
and bilinear sampling; Hybrid admits nearest and explicitly refuses bilinear
because the pinned GPU sampler clamps taps at repeat seams. Both sessions
also render caller-shaped, unhinted solid outline text with font variations
and bounded glyph-cache epochs. Shaping and fallback selection stay with the
caller; color/bitmap/SVG fonts are explicitly refused. The intact paused Isocosm
panel now passes CPU/Hybrid replay, with exact Classic replay as its control.
Native interaction, external producer image import and host selection remain
open. See the
image,
pattern
and text receipts
for the tested adapter scope, and the real-panel replay receipt
for consumer evidence. Classic remains the default.
netrender, netrender_device, paint_list_api, and
paint_list_render are published at 0.1.2. netrender_text remains at 0.1.1.
Unreleased main has removed Netrender's public legacy render-graph helper
API; the first release containing that change must publish netrender as
0.2.0 and align its in-repo dependents.
- The vello pivot is runtime-verified through the tile cache. Landed: layers and clips, gradients, box-shadows, nine-patch borders, variable fonts, backdrop and element CSS filters, scene capture/replay, hit testing, and the external-texture compositor seam.
- Tenancy boot seam landed 2026-08-10: one wgpu device shared between
netrender and a tenant renderer (
TenantNeeds,boot_shared/boot_on); first consumer is the sibling paredros repo. - A paint-list regression corpus landed 2026-08-10: five fixtures, two of them real captures from genet's pipeline, replayed CPU-only against golden scene-op streams.
- Full workspace suite passed on macOS/Metal 2026-07-20, including system fonts, color emoji, and compositor plumbing.
- The original audit's two externally gated items were the genet-side native-compositor adapter, and linear-light blending (blocked upstream on vello's GPU compute path; an opt-in canary test fires when it clears).
Crates: netrender (Scene vocabulary, rasterizer, tile cache, hit testing,
Renderer), netrender_device (device boot, typed image execution, and pipelines), netrender_text
(parley-to-Scene glyph runs), paint_list_api (the engine-facing PaintCmd
vocabulary), paint_list_render (the translator into Scene). Notes and
plans live in netrender-notes/, indexed by
PROGRESS.md.
The rendering leaf for the genet web-engine family and sibling projects:
engines emit a PaintList via paint_list_api, paint_list_render
translates it into a Scene, and Renderer::render_vello rasterizes it.
Consumed from crates.io or as a git dependency. The experimental sparse
backends on Git main use pinned Git dependencies.
cargo build
cargo test # many tests use the GPU; WGPU_BACKEND selects the backend
# Demo: renders a card grid to netrender/examples/output/demo_card_grid.png
cargo run -p netrender --example demo_card_gridOptional features on netrender: serde (scene capture/replay),
linear-light-canary (the upstream-gate test), vello-cpu, vello-hybrid,
and vello-all (both experimental sparse adapters). Classic is always
compiled. The sparse features do not yet provide a general host renderer
switch or full scene parity; unsupported operations return admission errors.
Mozilla Public License 2.0, retained from the WebRender origin. All member
crates declare license = "MPL-2.0". Provenance is recorded in
LICENSES.md: the two WebRender-derived files that carry an
attribution line above the house header.
This README was generated by AI and will be edited by the author upon release.