NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Glifo provides APIs for efficiently rendering text.
Last release 11 days ago
02 Oct 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 5 of 5 stable releases
Nothing withdrawn
no release was ever pulled
5 months old
5 releases · first in 2026
One column per month.
Breaking change: Glyph filling and stroking methods now return Result<(), GlyphRenderError> . ( #1944 by @LaurenzV )
Glifo v0.4.0 has been released.
This release has an MSRV of 1.89.
Result<(), GlyphRenderError>. (#1944 by @LaurenzV)GlyphAtlas::replay_pending_atlas_commands now accepts a fallible callback. (#1890 by @LaurenzV)ImageQuality::Medium) instead of switching to bicubic sampling when downscaled. (#1970 by @LaurenzV)sbix glyphs caused by the Apple Color Emoji workaround. (#1936 by @LaurenzV)sbix glyph placement caused by sign errors in bearing offsets. (#1939 by @LaurenzV)Full Changelog: glifo-v0.3.0...glifo-v0.4.0
This release has an [MSRV][] of 1.82.
As part of an initiative to improve color handling across the ecosystem (and especially within Linebender crates), Vello is now using the new [color] crate.
This is the first step towards providing richer color functionality, better handling of color interpolation, and more.
This release intentionally uses wgpu 23.0.1 rather than 24.0.0 so that it can match the version used in Bevy 0.15.
wgpu to 23.0.1 ([#735][], [#743][] by [@waywardmonkeys])peniko and color is now used for all colors ([#742][] by [@waywardmonkeys])color, the byte order of vello_encoding::DrawColor is changed ([#758][] by [@waywardmonkeys][], [#796][] by [@tomcur][]).full feature is no longer present as the full pipeline is now always built ([#754][] by [@waywardmonkeys])r8 permutation of the shaders is no longer available ([#756][] by [@waywardmonkeys])buffer_labels feature is no longer present as the labels are always configured ([#757][] by [@waywardmonkeys])i16 rather than skrifa::NormalizedCoord in the public API ([#747][] by [@nicoburns][])schemars feature ([#733][] by [@ratmice][])Breaking change: Updated vello_common to v0.2.0.
Glifo v0.3.0 has been released.
This release has an MSRV of 1.88.
vello_common to v0.2.0.Full Changelog: glifo-v0.2.0...glifo-v0.3.0
This release has an MSRV of 1.89.
As part of this release, Vello Hybrid has been renamed to Vello GPU.
Vello CPU is our 2D renderer which doesn't use a GPU.
The imaging model exposed by Vello CPU is very similar to that of Vello Research.
This implementation is now broadly usable, with a reasonably complete imaging model and competitive performance.
It does not, however, have any API stability guarantees, as we intend to redesign the API to be consistent across the Vello renderers.
Performance information can be seen at https://laurenzv.github.io/vello_chart/ (although this URL is not time-locked, so it might show results from a slightly newer or older version than this tag).
RenderContext::push_clip_rect for non-isolated rectangular clipping. (#1916 by @LaurenzV)ImageSampler::alpha. (#1880 by @LaurenzV)CompositeMode with TargetInit, adding configurable target clears. (#1866 by @LaurenzV)RenderContext::pop_clip_path to pop_clip. (#1942 by @LaurenzV)GlyphRunBuilder::fill_glyphs and stroke_glyphs now return Result<(), glifo::GlyphRenderError>. (#1944 by @LaurenzV)fearless_simd to v0.7.0. (#1853 by @LaurenzV)Paint re-export. (#1881 by @LaurenzV)ImageQuality::Medium) instead of switching to bicubic sampling when downscaled. (#1970 by @LaurenzV)Repeat, Reflect, and bilinear/bicubic filtering. (#1946, #1950 by @LaurenzV)sbix glyphs caused by the Apple Color Emoji workaround. (#1936 by @LaurenzV)sbix glyph placement caused by sign errors in bearing offsets. (#1939 by @LaurenzV)This release is a minor release of Vello GPU (formerly Vello Hybrid), which uses the CPU for preprocessing and the GPU for rasterization. The imaging model exposed by Vello GPU is very similar to that of Vello Research.
This implementation is in its early stages and does not yet provide any API stability guarantees (see the roadmap for more details). It also doesn't have feature parity with Vello CPU. A few known issues remain, which we plan to address soon.
unminified feature in vello_gpu_shaders for readable shader output. (#1851 by @grebmeg)WebGlRenderer::begin and begin_with. (#1823 by @grebmeg)Scene::push_clip_rect for non-isolated rectangular clipping. (#1916 by @LaurenzV)ImageSampler::alpha. (#1880 by @LaurenzV)vello_hybrid crate to vello_gpu. HybridGlyphRunBackend is now GpuGlyphRunBackend. (#1883 by @grebmeg, #1918 by @LaurenzV)wgpu to v30 and fearless_simd to v0.7.0. (#1909, #1853 by @LaurenzV)Scene::set_paint, replacing draw_texture_rects and adding support for arbitrary shapes, extend modes, and transparency hints. (#1812, #1813, #1824 by @LaurenzV)use_depth_buffer argument in WebGL. (#1808, #1810 by @grebmeg)TargetInit in wgpu and a clear color in WebGL. (#1869 by @LaurenzV)WebGlError results. (#1892 by @LaurenzV, #1921 by @grebmeg)RenderSize, RenderTargetConfig, atlas configuration, and related dimensions now use u16. (#1826, #1891 by @LaurenzV)atlas_texture takes an AtlasId. (#1859 by @LaurenzV)Scene::pop_clip_path to pop_clip. (#1942 by @LaurenzV)GlyphRunBuilder::fill_glyphs and stroke_glyphs now return Result<(), glifo::GlyphRenderError>. (#1944 by @LaurenzV)failIfMajorPerformanceCaveat. (#1806 by @LaurenzV)ImageQuality::Medium) instead of switching to bicubic sampling when downscaled. (#1970 by @LaurenzV)std feature no longer implicitly enables wgpu. (#1822 by @taj-p)sbix glyphs caused by the Apple Color Emoji workaround. (#1936 by @LaurenzV)sbix glyph placement caused by sign errors in bearing offsets. (#1939 by @LaurenzV)WEBGL_provoking_vertex support. (#1805, #1827 by @LaurenzV)This release also contains Vello Common, a support crate used by Vello CPU and Vello GPU.
Vello Common itself does not currently have any stable API surface, as it is only an implementation detail of Vello CPU and Vello GPU.
TargetInit<C> for configuring target clears or compositing over existing contents. (#1866 by @LaurenzV)pixmap::premultiply_rgba8 and unpremultiply_rgba8 helpers. (#1930 by @LaurenzV)ImageSource::external_texture for external GPU texture paints. (#1824 by @LaurenzV)ImageSampler::alpha. (#1880 by @LaurenzV)ClipContext, ClipState, and ViewportState. (#1916, #1926 by @LaurenzV)Pixmap::from_parts, which now accepts Vec<u8> and PixelMetadata. (#1834 by @LaurenzV)Pixmap::take and take_unpremultiplied with take_rgba8 and try_take_rgb8, adding RGB output support. (#1855 by @LaurenzV)u16; the OffsetU32, SizeU32, and RectU32 geometry types have been removed. (#1826 by @LaurenzV)fearless_simd to v0.7.0 and adapted the SIMD utility APIs. (#1853 by @LaurenzV)ClipContext, ClipState, and ViewportState rename push_clip to push_clip_path, and their clip accessors now return ClipRef instead of PathDataRef. (#1916, #1926 by @LaurenzV)EncodeExt::encode_into now returns Option<Paint>. (#1949 by @grebmeg)EncodedExternalTexture. (#1824 by @LaurenzV)ImageCache::allocate_excluding and MultiAtlasManager::try_allocate_excluding. (#1825 by @LaurenzV)Full Changelog: sparse-strips-v0.2.0...sparse-strips-v0.3.0
This release has an [MSRV][] of 1.88.
vello_common to v0.2.0.This release has an [MSRV][] of 1.75.
Adapter from the utils DeviceHandle ([#634][] by [@cfagot][])wgpu::Textures into a Vello scene ([#636][], [#655][] by [@DJMcNab], [@TrueDoctor][])AaSupport from a set of AaConfigs ([#654][] by [@simbleau][])Encoding for a scene can now be modified, circumventing guardrails for advanced use-cases ([#701][] by [@timtom-dev][])wgpu to 22.1.0 ([#635][] by [@waywardmonkeys])run_app][] API from Winit ([#626][], [#628][] by [@yutannihilation][])vello. ([#677][] by [@waywardmonkeys])Pipelines API from vello_shaders ([#612][] by [@DJMcNab])wgpu_profiler profiler feature is no longer stable ([#694][] by [@DJMcNab])Recording abstraction into a low_level module, as almost all users should prefer the higher-level Renderer ([#711][] by [@DJMcNab])Glifo v0.2.0 has been released.
This release has an MSRV of 1.88.
Vello CPU is our 2D renderer which doesn't use a GPU.
The imaging model exposed by Vello CPU is very similar to that of current Vello.
This implementation is now broadly usable, with a reasonably complete imaging model and competitive performance.
It does not, however, have any API stability guarantees, as we intend to redesign the API to be consistent across the Vello renderers.
Performance information can be seen at https://laurenzv.github.io/vello_chart/ (although this URL is not time-locked, so it might show results from a slightly newer or older version than this tag).
This release is a minor release of Vello Hybrid, which uses the CPU for preprocessing and the GPU for rasterization. The imaging model exposed by Vello Hybrid is very similar to that of current Vello.
This implementation is in its early stages and does not yet provide any API stability guarantees (see the roadmap for more details). It also doesn't have feature parity with Vello CPU. A few known issues remain, which we plan to address soon.
Scene::draw_texture_rects in the webgl backend, bringing it to parity with the wgpu backend. Textures are bound at render time through the new WebGlTextureBindings. (#1792 by @grebmeg)ProbeResult::statistics, ProbeStatistics, and ProbeFeature for diagnosing which renderer-probe features and pixels differ from the reference output. (#1779 by @LaurenzV)PROBE_ELEMENTS for inspecting the active features used by the WebGL compatibility probe. (#1801 by @LaurenzV)Renderer::new, Renderer::new_with, WebGlRenderer::new, and WebGlRenderer::new_with now return the renderer and its associated Resources as a tuple. Resources can no longer be constructed directly and must only be used with the renderer instance that generated it. (#1794 by @LaurenzV)Scene::new_with now takes a Level instead of RenderSettings. (#1794 by @LaurenzV)WebGlRenderer::render and WebGlRenderer::render_to_atlas now take WebGlTextureBindings, providing the external textures referenced by the scene. Pass &WebGlTextureBindings::new() if the scene does not use any. (#1792 by @grebmeg)IntermediateTextureError variants for oversized allocations and texture-count limits. (#1778 by @grebmeg)This release also contains Vello Common, a support crate used by Vello CPU and Vello Hybrid.
Vello Common itself does not currently have any stable API surface, as it is only an implementation detail of Vello CPU and Vello Hybrid.
ProbeResult::statistics, ProbeStatistics, and ProbeFeature for diagnosing which renderer-probe features and pixels differ from the reference output. (#1779 by @LaurenzV)PROBE_ELEMENTS for inspecting the active features used by the shared probe scene. (#1801 by @LaurenzV)AtlasError variants now report configured limits and allocation sizes, with the new AtlasSpaceDiagnostics and AtlasLayerDiagnostics types providing per-layer free-space, utilization, and fragmentation details. (#1778 by @grebmeg)This release also contains Vello Sparse Shaders, a support crate used by Vello Hybrid.
This crate does not currently have any stable API guarantees.
Full Changelog: sparse-strips-v0.1.0...sparse-strips-v0.2.0
This release has an [MSRV][] of 1.88.
This release has an [MSRV][] of 1.75.
From<Encoding> for Scene. ([#538][] by [@waywardmonkeys])vello_shaders crate to load and preprocess WGSL. ([#563][] by [@armansito])#enable post-process directive. ([#550][] by [@armansito])RenderContext::new() no longer returns a Result. ([#547][] by [@waywardmonkeys])wgpu to 0.20. ([#560][] by [@waywardmonkeys])force_rw_storage feature. ([#540][] by [@armansito])draw_leaf uniformity. ([#535][] by [@raphlinus])vello_encoding. ([#573][] by [@armansito])path_reduced_scan buffer size. ([#551][] by [@armansito])Glifo v0.1.1 has been released.
Breaking change: The methods render_to_pixmap and composite_to_pixmap_at_offset have been replaced with unified render and render_with methods, whose…
This release has an MSRV of 1.88.
Vello CPU is our 2d renderer which doesn't use a GPU.
The imaging model exposed by Vello CPU is very similar to that of current Vello.
Crates.io | Docs
This implementation is now broadly usable, with a reasonably complete imaging model and competitive performance.
It does not however have any API stability guarantees, as we intend to redesign the API to be consistent across the Vello renderers.
Performance information can be seen at https://laurenzv.github.io/vello_chart/ (although note that this URL is not "time-locked", so might show results from a slightly newer or older version than this tag).
RenderContext::reset_and_resize, allowing a render context to be reused after its target size changes. (#1705 by @LaurenzV)RenderContext::is_multi_threaded for querying whether the context uses multi-threaded rendering. (#1703 by @LaurenzV)invert parameter on RenderContext::fill_blurred_rounded_rect, enabling inset box shadows. (#1715 by @nicoburns)FilterPrimitive::DropShadowOnly for rendering a drop shadow without compositing the original input over it. (#1763 by @LaurenzV)render_to_pixmap and composite_to_pixmap_at_offset have been replaced with unified render and render_with methods, whose settings control the target, pixel format, compositing, and rendering mode. (#1665 by @LaurenzV)peniko::ImageData by computing and retaining its transparency hint during conversion. (#1760 by @tronical)This release is a minor release of Vello Hybrid, which uses the CPU for preprocessing and the GPU for rasterization. The imaging model exposed by Vello Hybrid is very similar to that of current Vello.
Crates.io | Docs
This implementation is in its early stages and does not yet provide any API stability guarantees (see the roadmap for more details). It also doesn’t have feature parity with Vello CPU. A few known issues remain, which we plan to address soon.
invert parameter on Scene::fill_blurred_rounded_rect, enabling inset box shadows. (#1715 by @nicoburns)Resources::new_with_config for configuring the image and glyph atlas used by resources. (#1750 by @grebmeg)FilterPrimitive::DropShadowOnly for rendering a drop shadow without compositing the original input over it. (#1763 by @LaurenzV)Scene::reset_and_resize, allowing a scene to be reused after its target size changes. (#1769 by @LaurenzV)WebGlRenderer::probe is now asynchronous. It returns a WebGlPendingProbe, which can be polled with try_finish, avoiding a synchronous GPU-to-CPU readback stall and providing specific WebGL error codes on failure. (#1671, #1735 by @LaurenzV)RenderSettings now contains MemorySettings, with separate image-atlas and intermediate-layer configuration. SceneConstraints and RenderError::SlotsExhausted have been removed, and LayersConfig allows applications to limit and tune intermediate textures. (#1759 by @LaurenzV)webgl feature is enabled, including on non-Wasm targets. (#1682 by @jesses-canva)wasm-bindgen-related dependencies. (#1683 by @LaurenzV)u16 coordinates. (#1666 by @dipeshbabu)peniko::ImageData by computing and retaining its transparency hint during conversion. (#1760 by @tronical)This release also contains Vello Common, a support crate used by Vello CPU and Vello Hybrid.
Crates.io | Docs
Vello Common itself does not currently have any stable API surface, as it is only an implementation detail of Vello CPU and Vello Hybrid.
FilterPrimitive::DropShadowOnly for rendering a drop shadow without compositing the original input over it. (#1763 by @LaurenzV)bounds_expansion APIs have been replaced by filter_expansion and source_expansion. (#1701 by @LaurenzV)PaddingU16 type, RectU16::intersect no longer produces inverted rectangles, and strip_bbox now returns Option<RectU16>. (#1751 by @LaurenzV)coarse and render_graph modules. The rewritten CPU and hybrid renderers no longer use them. (#1762 by @LaurenzV)u16 coordinates. (#1666 by @dipeshbabu)peniko::ImageData by computing and retaining its transparency hint during conversion. (#1760 by @tronical)This release also contains Vello Sparse Shaders, a support crate used by Vello Hybrid.
Crates.io | Docs
This crate does not currently have any stable API guarantees.
Full Changelog: sparse-strips-v0.0.9...sparse-strips-v0.1.0
This release has an MSRV of 1.88.
The first release of Glifo!
Glifo moved to the Vello repo in #1539 and was prepared for release by @conor-93, @grebmeg, @jrmoulton, @LaurenzV, @nicoburns, @oscargus, @taj-p, and @xStrom.
<!-- Note that this still comparing against 0.5.0, because 0.5.1 is a cherry-picked patch --> [0.6.0]: https://github.com/linebender/vello/compare/v0.5.0...v0.6.0 [0.5.1]: https://github.com/linebender/vello/compare/v0.5.0...v0.5.1 <!-- 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/vello/compare/v0.4.0...v0.5.0 [0.4.1]: https://github.com/linebender/vello/compare/v0.4.0...v0.4.1 [0.4.0]: https://github.com/linebender/vello/compare/v0.3.0...v0.4.0 <!-- Note that this still comparing against 0.2.0, because 0.2.1 is a cherry-picked patch --> [0.3.0]: https://github.com/linebender/vello/compare/v0.2.0...v0.3.0 [0.2.1]: https://github.com/linebender/vello/compare/v0.2.0...v0.2.1 [0.2.0]: https://github.com/linebender/vello/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/linebender/vello/releases/tag/v0.1.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →