54 releases
Uses new Rust 2024
| new 0.18.0 | Jan 13, 2026 |
|---|---|
| 0.18.0-rc.2 | Dec 30, 2025 |
| 0.17.3 | Nov 17, 2025 |
| 0.16.1 | May 30, 2025 |
| 0.3.0 | Nov 3, 2020 |
#2910 in Game dev
214,829 downloads per month
Used in 458 crates
(28 directly)
7.5MB
134K
SLoC
This crate provides the tools for positioning and rendering text in Bevy.
Font
Fonts contain information for drawing glyphs, which are shapes that typically represent a single character, but in some cases part of a "character" (grapheme clusters) or more than one character (ligatures).
A font face is part of a font family, and is distinguished by its style (e.g. italic), its weight (e.g. bold) and its stretch (e.g. condensed).
In Bevy, Fonts are loaded by the FontLoader as assets.
TextPipeline
The TextPipeline resource does all of the heavy lifting for rendering text.
UI Text is first measured by creating a TextMeasureInfo in TextPipeline::create_text_measure,
which is called by the measure_text_system system of bevy_ui.
Note that text measurement is only relevant in a UI context.
With the actual text bounds defined, the bevy_ui::widget::text::text_system system (in a UI context)
or bevy_sprite::text2d::update_text2d_layout system (in a 2d world space context)
passes it into TextPipeline::update_text_layout_info, which:
- updates a
Bufferfrom theTextSpans, generating newFontAtlases if necessary. - iterates over each glyph in the
Bufferto create aPositionedGlyph, retrieving glyphs from the cache, or rasterizing to aFontAtlasif necessary. PositionedGlyphs are stored in aTextLayoutInfo, which contains all the information that downstream systems need for rendering.
Bevy Text
Dependencies
~46–65MB
~1M SLoC