Welcome to the homepage for the Linebender organization.
We are a friendly group of people who share an interest in 2D graphics and user interface design, with everything that entails. Most of our projects are developed in the Rust programming language. We hang out on the Linebender Zulip and always welcome new people.
Linebender projects
Below is a list of the main Linebender projects, and a short description of each project's purpose, as of 2024-12-07.
Crates (actively developed)
-
xilem
- Experimental Rust architecture for reactive UI.Xilem is a UI toolkit with a medium-grained reactive architecture strongly inspired by SwiftUI. It is currently in a pre-alpha state, with several significant issues, but is improving rapidly.
-
masonry
- Foundational framework for Rust GUI libraries.Masonry is an evolution of Druid, designed to be driven by higher-level UI toolkits. It is currently used to power Xilem, but is designed to be usable by other toolkits as well.
-
vello
- GPU compute-centric 2D renderer.Vello is a 2D graphics rendering engine written in Rust, with a focus on GPU compute. It can draw large 2D scenes with interactive or near-interactive performance, using
wgpu
for GPU access. -
kurbo
- Create, manipulate, and interrogate 2D curve shapes.At its core, Kurbo is a library for constructing paths and splines out of straight lines and Bézier curves up to order 3 (known as cubic Béziers). It turns out that a series of cubic Bézier curves can be used to approximate any smooth curve with a very high degree of accuracy, compared to the number of curves required. They are also relatively easy to work with, and form the basis of the approach to curve rendering used in Vello. The key abstraction is
kurbo::Shape
, which provides thepath_elements
method. This method returns an iterator over Bézier curves that approximate the type implementing theShape
trait, which Vello can then draw. -
color
- Manipulate and represent colors.Color provides functionality for representing, converting, parsing, serializing, and manipulating colors in a variety of color spaces. It closely follows the CSS Color Level 4 draft spec.
-
peniko
- Non-geometric drawing primitives.Provides a set of shared types for concepts that are important for drawing/stroking paths, but excluding the path geometry itself (which can be found in
kurbo
). It includes types for brush styles (including gradient) and color. -
fontique
- Font enumeration and fallback. -
velato
- Convert Lottie animations to Vello scenes for rendering. -
vello_svg
- Convert SVG documents to Vello scenes for rendering. -
interpoli
- Functionality for animating values. -
kompari
- A tool for detecting and reporting differences in images. -
norad
- Read, write, and manipulate Unified Font Object files, a common font-design format.
Crates (passively maintained)
-
druid
- GUI framework for Rust.Druid was the original Linebender UI framework, and was the main focus of development until early 2023. New development effort has moved on to Xilem, which is quite different, but still heavily inherits from Druid via Masonry.
Druid's main goal was to offer a polished user experience. There were many factors to this goal, including performance, a rich palette of interactions, and playing well with the native platform.
Druid is reasonably usable for some subset of applications and has a significant testing history, which ensures some stability and correctness. However, there will not be any new features or bug fixes coming to Druid. As such we don't recommend using Druid for brand new applications. If you insist, then at least make sure your application doesn't require a feature that Druid doesn't have, e.g. accessibility or 3D support.
-
piet
- Abstraction layer over platform 2D rendering facilities.It provides an abstraction over the libraries used for 2D rendering on any particular platform (Direct2D on Windows, Core Graphics on Mac, and Cairo/Pango on Linux).
Our goal is for Piet to be superseded by Vello, which will provide state-of-the-art GPU accelerated 2D rendering on any platform supported by WebGPU.
-
druid-shell
- The windowing library for Druid.It was created due to limitations with
winit
and has features like file dialogs, system menus, and modal windows. When we started work on Xilem, we also forkeddruid-shell
to bootstrap Glazier. -
druid-widget-nursery
- Experimental widgets for Druid.Contains lots of Druid widgets that may be useful to UI developers. For example a widget to draw Material Icons, a tree view, and a dropdown. It followed the very liberal optimistic merging strategy for handling PRs to minimize contributor friction, but the widgets contributed are all robust and high quality.
-
runebender
- Experimental font editor.This was the motivating application for Druid development. It is not currently seeing active development, but this may be revisited in the future.
-
skribo
- Text layout.This library aims to perform the conversion from text and font attributes to glyph runs, similar to harfbuzz. It's not recommended to use this library as better alternatives exist, for example
parley
orcosmic-text
.
Non-code repos
-
2d.graphics
- A work-in-progress book explaining the current state of the art of different aspects of 2D graphics.Currently the book mostly contains annotated reference lists, although some sections have written content. Pull requests welcome! The goal is to cover topics like color, shapes/curves, 2D GPU rendering, text, etc.
-
linebender.github.io
- This website.If you see anything that looks incorrect, please submit a PR to its repo.
Archived repos
-
glazier
- Windowing library.Glazier was a fork of
druid-shell
. We pursued this due to limitations withwinit
, however eventually decided to work together with thewinit
team to improvewinit
instead. We recommend usingwinit
over Glazier.