A GPU accelerated 2D renderer for web content

4 releases (breaking)

0.61.0 Jan 15, 2020
0.60.0 Feb 18, 2019
0.58.0 Jan 3, 2019
0.0.0 Aug 14, 2018
Download history 23/week @ 2023-10-26 25/week @ 2023-11-02 19/week @ 2023-11-09 29/week @ 2023-11-16 29/week @ 2023-11-23 27/week @ 2023-11-30 25/week @ 2023-12-07 27/week @ 2023-12-14 33/week @ 2023-12-21 18/week @ 2023-12-28 24/week @ 2024-01-04 29/week @ 2024-01-11 22/week @ 2024-01-18 22/week @ 2024-01-25 22/week @ 2024-02-01 73/week @ 2024-02-08

143 downloads per month
Used in skryn

MPL-2.0 license

62K SLoC

A GPU based renderer for the web.

It serves as an experimental render backend for Servo, but it can also be used as such in a standalone application.

External dependencies

WebRender currently depends on FreeType

Api Structure

The main entry point to WebRender is the crate::Renderer.

By calling Renderer::new(...) you get a Renderer, as well as a RenderApiSender. Your Renderer is responsible to render the previously processed frames onto the screen.

By calling yourRenderApiSender.create_api(), you'll get a RenderApi instance, which is responsible for managing resources and documents. A worker thread is used internally to untie the workload from the application thread and therefore be able to make better use of multicore systems.


What is referred to as a frame, is the current geometry on the screen. A new Frame is created by calling set_display_list() on the RenderApi. When the geometry is processed, the application will be informed via a RenderNotifier, a callback which you pass to Renderer::new. More information about stacking contexts.

set_display_list() also needs to be supplied with BuiltDisplayLists. These are obtained by finalizing a DisplayListBuilder. These are used to draw your geometry. But it doesn't only contain trivial geometry, it can also store another StackingContext, as they're nestable.


~182K SLoC