NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Primitive types for styling vector graphics
Last release 5 months ago
15 May 2026
Ships fairly regularly
a new release about every 3 months
Nearly every release is documented
notes for 11 of 11 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
11 releases · first in 2024
This release has an MSRV of 1.85.
This release has an MSRV of 1.85.
BlendMode::is_destructive now reports whether a blend mode can make destructive changes to the backdrop.Gradient::with_stops now accepts ColorStops and &ColorStops directly. (#161 by @no-materials)kurbo to 0.13.1, color to 0.3.3, and bytemuck to 1.25.0. (#168 by @waywardmonkeys)One column per month.
Breaking change: Update to Kurbo v0.13.0 . ( #155 by @waywardmonkeys )
This release has an MSRV of 1.85.
Eq and Hash on InterpolationAlphaSpace. (#148 by @sagudev)From conversion from &ImageData to ImageBrushRef. (#147 by @DJMcNab)Mix::Clip has been removed; it was previously deprecated in v0.5.0. (#124 by @DJMcNab)Full Changelog: v0.5.0...v0.6.0
Breaking change: Add InterpolationAlphaSpace to Gradient to chose how color channels should be handled when interpolating between transparent colors.…
This release has an MSRV of 1.82.
Style now implements PartialEq. (#114 by @liferooter)Bgra8 variant to ImageFormat. (#120 by @sagudev)ImageAlphaType with ImageData. (#121 by @sagudev)InterpolationAlphaSpace to Gradient to chose how color channels should be handled when interpolating between transparent colors. (#115 by @sagudev)GradientKind now contains a corresponding internal struct, from struct variants.GradientKind::Linear { ... } is now written as LinearGradientPosition { ... }.into() (or, more explicitly, as GradientKind::Linear(LinearGradientPosition { ... })).GradientKind::Sweep { ... } and GradientKind::Radial { ... }. (#119 by @nicoburns)Image has been renamed to ImageBrush, which now consists of an ImageData and an ImageSampler. (#117, #123 by @nicoburns, @DJMcNab)ImageBrush easily, you can use ImageData {...}.into().Font has been renamed to FontData to match ImageData. (#126 by @nicoburns)SweepGradientPosition are now described to be clockwise in a Y-down coordinate system, as is common in computer graphics.Mix::Clip is now deprecated. To access the same functionality of optimised clips in Vello, you should now use push_clip_layer. (#144 by @DJMcNab)Full Changelog: v0.4.0...v0.5.0
This release has an MSRV of 1.82.
This release has an MSRV of 1.82.
Font, Blob, and WeakBlob. (#129 by @DJMcNab, @nicoburns)Peniko's Font (and therefore also Blob) are used as vocabulary types for font resources between crates.
However, this means that when Peniko made semver-incompatible releases, those crates could no longer (easily) interoperate.
To resolve this, Font, Blob, and WeakBlob are now re-exports from a new crate called Linebender Resource Handle.
These types have identical API as in previous releases, but will now be the same type across Peniko versions.
Full Changelog: v0.4.0...v0.4.1
This release has an MSRV of 1.82.
This release has an MSRV of 1.82.
ImageQuality and ImageFormat now optionally impl bytemuck traits (#104 by @waywardmonkeys)color 0.3.0. (#103 by @waywardmonkeys)Full Changelog: v0.3.1...v0.4.0
This release has an MSRV of 1.82.
This release has an MSRV of 1.82.
This change is a semver trick release, following the pattern documented at https://github.com/dtolnay/semver-trick.
Blob, WeakBlob and Font are now the types from Peniko's 0.4.0, which have the same public API as in the 0.3.0 series.
This enables compatibility between Vello 0.5.0 and Parley 0.3.0.
Full Changelog: v0.3.1...v0.3.2
This release has an MSRV of 1.82.
This release has an MSRV of 1.82.
color 0.2.3. (#95 by @waywardmonkeys)Full Changelog: v0.3.0...v0.3.1
This leads to a number of breaking changes:
This release has an MSRV of 1.82.
Gradient, Image, Brush now have with_alpha and Gradient also gets a multiply_alpha (#67 by @waywardmonkeys)Gradient now tracks a hue direction and interpolation color space (#71 by @waywardmonkeys)Compose, Extend, Fill, and Mix now optionally impl bytemuck traits (#72 by @waywardmonkeys)Format to ImageFormat (#77 by @dfrg)Image now stores the alpha as an f32 (#65 by @waywardmonkeys)color crate. See below for details (#63 by @waywardmonkeys)ColorStopsSource::collect_stops now consumes self (#87 by @waywardmonkeys)Gradient::with_alpha_factor in favor of Gradient::multiply_alpha (#82 by @waywardmonkeys)The old code behind peniko::Color has been removed and color functionality is now provided by the [color] crate.
This leads to a number of breaking changes:
peniko::Color is now a type alias for AlphaColor<Srgb> from the color crate.AlphaColor does not, at this time, impl Default, PartialOrd, or Hash.ColorStop no longer impls Default or PartialOrd.Brush, BrushRef, and ColorStop can be constructed from a variety of color types, although, for now, Brush and BrushRef convert this internally into an unclipped AlphaColor<Srgb>.ColorStops is now a newtype wrapper, rather than a type alias for SmallVec.CacheKey from Color.color crate is re-exported as peniko::color, so access to functionality from there is easy.peniko::Color::YELLOW are no longer available.color: peniko::color::palette::css::YELLOW.color crate.This is the first step towards providing better support for richer color functionality throughout the Linebender stack.
Full Changelog: v0.2.0...v0.3.0
This release has an MSRV of 1.70.
This release has an MSRV of 1.70.
alpha multiplier to Image (#40 by @DJMcNab)mint feature to enable mint support in kurbo (#46 by @waywardmonkeys)Format as #[non_exhaustive] (#47 by @DJMcNab)with_alpha_factor to multiply_alpha (#52 by @DJMcNab)Full Changelog: v0.1.1...v0.2.0
@xStrom made their first contribution in #25
This release has an [MSRV] of 1.70.
serde feature to enable serde support ([#26] by [@ratmice][])This release has an [MSRV] of 1.70.
This release has an MSRV of 1.70.
<!-- Note that this still comparing against 0.4.0, because 0.4.1 is a cherry-picked patch --> [0.5.0]: https://github.com/linebender/peniko/compare/v0.4.0...v0.5.0 [0.4.1]: https://github.com/linebender/peniko/compare/v0.4.0...v0.4.1 <!-- Note that this still comparing against 0.3.1, because 0.3.2 is a cherry-picked patch --> [0.4.0]: https://github.com/linebender/peniko/compare/v0.3.1...v0.4.0 [0.3.2]: https://github.com/linebender/peniko/compare/v0.3.1...v0.3.2 [0.3.1]: https://github.com/linebender/peniko/compare/v0.3.0...v0.3.1 [0.3.0]: https://github.com/linebender/peniko/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/linebender/peniko/compare/v0.1.1...v0.2.0 [0.1.1]: https://github.com/linebender/peniko/compare/v0.1.0...v0.1.1 [0.1.0]: https://github.com/linebender/peniko/releases/tag/v0.1.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →