cosmic-text
Pure Rust multi-line text handling
0.19.0
7.5M downloads/mo
#3642 most downloaded on crates.io
pop-os/cosmic-text
What this package is like to depend on
Last release 4 months ago
22 Apr 2026
Release timing varies
gaps range from 2 weeks to 7 months
Some releases are documented
notes for 23 of 42 stable releases
1 version withdrawn
withdrawn after publishing
4 years old
43 releases · first in 2022
9 releases in the last 12 months
see the full history below
Release timeline
43 releases · Oct 2022 to Apr 2026Releases
latest 43-
0.19.022 Apr 2026Release notes
Open source →Links
Fixed
- Empty lines use span metrics: #479
- Match variable fonts using wght axis: #486
- Used normalized_coords for swash scaler: #488
- Fix highlight for editor: #491
- Optimize shape_until_scroll with large line count: #490
- Fix shape_until_scroll if a buffer_line is modified: #494
- Remove 1px horizontal offset on pixel fonts: #495
- Make the swash feature compile with no_std: #492
- Fallback to a default font in basic shaping mode: #498
- Clamp scroll.line to a valid range: #501
Added
- Text decoration: #480
- Implement layout_runs for BufferLine: #484
- Add cursor_position and is_rtl methods to buffer: #496
Changed
Release notes
Open source →Fixed
- Empty lines use span metrics: https://github.com/pop-os/cosmic-text/pull/479
- Match variable fonts using wght axis: https://github.com/pop-os/cosmic-text/pull/486
- Used normalized_coords for swash scaler: https://github.com/pop-os/cosmic-text/pull/488
- Fix highlight for editor: https://github.com/pop-os/cosmic-text/pull/491
- Optimize shape_until_scroll with large line count: https://github.com/pop-os/cosmic-text/pull/490
- Fix shape_until_scroll if a buffer_line is modified: https://github.com/pop-os/cosmic-text/pull/494
- Remove 1px horizontal offset on pixel fonts: https://github.com/pop-os/cosmic-text/pull/495
- Make the swash feature compile with no_std: https://github.com/pop-os/cosmic-text/pull/492
- Fallback to a default font in basic shaping mode: https://github.com/pop-os/cosmic-text/pull/498
- Clamp scroll.line to a valid range: https://github.com/pop-os/cosmic-text/pull/501
Added
- Text decoration: https://github.com/pop-os/cosmic-text/pull/480
- Implement layout_runs for BufferLine: https://github.com/pop-os/cosmic-text/pull/484
- Add cursor_position and is_rtl methods to buffer: https://github.com/pop-os/cosmic-text/pull/496
Changed
- Buffer setter methods are now lazy: https://github.com/pop-os/cosmic-text/pull/483
- Update hashbrown: https://github.com/pop-os/cosmic-text/pull/502
-
0.18.220 Feb 2026Release notes
Open source → -
0.18.120 Feb 2026Release notes
Open source → -
0.18.019 Feb 2026Release notes
Open source →Links
Added
- Support for ellipsizing at the start, middle, and end of a line
-
0.17.218 Feb 2026 -
0.17.130 Jan 2026Release notes
Open source →Links
Fixed
- Set correct rust-version to 1.89
Changed
- Update all dependencies to latest versions
Release notes
Open source →Fixed
- Set correct rust-version to 1.89
Changed
- Update all dependencies to latest versions
-
0.17.029 Jan 2026Release notes
Open source →Links
Fixed
- Fix variable font weight for SwashCache::get_outline_commands()
- Allow fallback to fonts with mismatched stretch or style
- Shape as fake italic if no matching italic font exists
- Prevent line break opportunities from splitting ligatures
Changed
- Update all dependencies to latest versions
Removed
- Attrs::matches was removed as it is not compatible with new fallback logic
Release notes
Open source →Fixed
- Fix variable font weight for SwashCache::get_outline_commands()
- Allow fallback to fonts with mismatched stretch or style
- Shape as fake italic if no matching italic font exists
- Prevent line break opportunities from splitting ligatures
Changed
- Update all dependencies to latest versions
Removed
- Attrs::matches was removed as it is not compatible with new fallback logic
-
0.16.029 Dec 2025Release notes
Open source →Links
Added
- Add
Renderertrait for more flexible rendering of buffers and editors - Make hinting configurable with
Hintingenum
Fixed
- Fix bench compilation
- Round x_advance to nearest monospace width when requested
- Do not use ASCII fast path when a word has incompatible spans
Changed
- Update harfrust to 0.4.1
- Update skrifa to 0.39.0
Release notes
Open source →Added
- Add
Renderertrait for more flexible rendering of buffers and editors - Make hinting configurable with
Hintingenum
Fixed
- Fix bench compilation
- Round x_advance to nearest monospace width when requested
- Do not use ASCII fast path when a word has incompatible spans
Changed
- Update harfrust to 0.4.1
- Update skrifa to 0.39.0
- Add
-
0.15.030 Oct 2025Release notes
Open source →Links
Added
- Add DISABLE_HINTING cache flag
- Variable font support
- Add pixel font flag
- Add ASCII fast path optimization to ShapeWord::build
- Optimize BidiParagraphs with ASCII fast path
- Add explicit lifetimes to borrowed return types
- Implement pixel-based scrolling for the Editor
- Add alignment paramater to set_text
Fixed
- Clip based on ascent and descent, not baseline
- Fix scroll when vertical offset is exactly layout_height
- Do not ignore font family
- Transform outline if fake italic provided
- Fixed Tab indenting the line instead of adding Tab or spaces
- Update and fix cargo-deny
- Fix UDHR link
- If buffer is empty, do not set line ending
- Better handling of newlines in editor insert and delete
- Improve handling of non-existant files in load_text
- Fix delete ranges removing interior newlines
Changed
- fontdb updated to 0.23
- Replace rustybuzz with HarfRust
- Use linebender_resource_handle instead of peniko
- Upgrade skrifa to 0.37
Release notes
Open source →Added
- Add DISABLE_HINTING cache flag
- Variable font support
- Add pixel font flag
- Add ASCII fast path optimization to ShapeWord::build
- Optimize BidiParagraphs with ASCII fast path
- Add explicit lifetimes to borrowed return types
- Implement pixel-based scrolling for the Editor
- Add alignment paramater to set_text
Fixed
- Clip based on ascent and descent, not baseline
- Fix scroll when vertical offset is exactly layout_height
- Do not ignore font family
- Transform outline if fake italic provided
- Fixed Tab indenting the line instead of adding Tab or spaces
- Update and fix cargo-deny
- Fix UDHR link
- If buffer is empty, do not set line ending
- Better handling of newlines in editor insert and delete
- Improve handling of non-existant files in load_text
- Fix delete ranges removing interior newlines
Changed
- fontdb updated to 0.23
- Replace rustybuzz with HarfRust
- Use linebender_resource_handle instead of peniko
- Upgrade skrifa to 0.37
-
0.14.214 Apr 2025Release notes
Open source → -
0.14.104 Apr 2025 -
0.14.031 Mar 2025Release notes
Open source →Added
- Add configurable font fallback lists using
Fallbacktrait - Add letter spacing support in
Attrs - Add arbitrary variable font features in
Attrs
- Add configurable font fallback lists using
-
0.13.211 Mar 2025 -
0.13.110 Mar 2025 -
0.13.010 Mar 2025Release notes
Open source →Added
- Add
Buffer::set_tab_widthfunction - Add
AttrsList::spans_iterand use it inBuffer::append - Add alignment option to
Buffer::set_rich_text - Add
SwashCache::get_outline_commands_uncached
Fixed
- Fix typo in fallback font name
Noto Sans CJK JP - Fix the character index used for getting a glyph attribute in basic shaping
- Avoid debug assertion when handling
Motion::BufferEnd - Handle single wrapped line scrolling
- Reduce memory usage and loading time of FontSystem
- Resolve lints
- Use FreeMono as Braille script fallback
- Load fonts prior to setting defaults
Changed
- Use
smol_strfor family name inFamilyOwned - Optimize
Buffer::set_rich_textfor when the buffer is reconstructed - Move
ShapeBuffertoFontSystem - Cache the monospace fallbacks buffer in
FontSystem - Apply fallback font to more Unix-like operating systems
- Use hinting for
swash_outline_commands - Update swash to
0.2.0and hook upstdfeature - Update minimum supported Rust version to
1.75 - Update default fonts (for COSMIC, users should set their own as desired)
Removed
- Drop
ShapePlanCache
- Add
-
0.12.131 Jul 2024 -
0.12.018 Jun 2024Release notes
Open source →Added
- Cache codepoint support info for monospace fonts
- Store a sorted list of monospace font ids in font system
- Add line ending abstraction
- Horizontal scroll support in Buffer
- Concurrently load and parse fonts
- Add metrics to attributes
- Support expanding tabs
- Add an option to set selected text color
- Add Edit::cursor_position
- Allow layout to be calculated without specifying width
- Allow for undefined buffer width and/or height
- Add method to set syntax highlighting by file extension
Fixed
- Fix no_std build
- Handle inverted Ranges in add_span
- Fix undo and redo updating editor modified status
- Ensure at least one line is in Buffer
Changed
- Enable vi feature for docs.rs build
- Convert editor example to winit
- Refactor scrollbar width handling for editor example
- Convert rich-text example to winit
- Only try monospace fonts that support at least one requested script
- Skip trying monospace fallbacks if default font supports all codepoints
- Make vertical scroll by pixels instead of layout lines
- Upgrade dependencies and re-export ttf-parser
-
0.11.209 Feb 2024 -
0.11.108 Feb 2024Release notes
Open source →Added
- Add
shape-run-cachefeature, that can significantly improve shaping performance
Removed
- Remove editor-libcosmic, see cosmic-edit instead
- Add
-
0.11.007 Feb 2024Release notes
Open source →Added
- Add function to set metrics and size simultaneously
- Cache
rustybuzzshape plans - Add capability to synthesize italic
- New wrapping option
WordOrGlyphto allow word to glyph fallback
Fixed
Buffer::set_rich_text: Only add attrs if they do not match the defaults- Do not use Emoji fonts as monospace fallback
- Refresh the attrs more often in basic shaping
Buffer: fix max scroll going one line beyond end- Improve reliability of
layout_cursor - Handle multiple BiDi paragraphs in
ShapeLinegracefully - Improved monospace font fallback
- Only commit a previous word range if we had an existing visual line
Changed
- Update terminal example using
colored - Significant improvements for
Editor,SyntaxEditor, andViEditor - Require default Attrs to be specified in
Buffer::set_rich_text - Bump
fontdbto0.16 - Allow Clone of layout structs
- Move cursor motions to new
Motionenum, move handling toBuffer - Ensure that all shaping and layout uses scratch buffer
BufferLine: userlayout_in_bufferto implement layoutBufferLine: remove wrap from struct, as wrap is passed to layout- Refactor of scroll and shaping
- Move
colorandx_optout of Cursor - Add size limit to
font_matches_cacheand clear it when it is reached - Update
swashto0.1.12 - Set default buffer wrap to
WordOrGlyph
-
0.10.019 Oct 2023Release notes
Open source →Added
- Added
Buffer::set_rich_textmethod - Add
Align::Endfor end-based alignment - Add more
Debugimplementations - Add feature to warn on missing glyphs
- Add easy conversions for tuples/arrays for
Color - Derive
CloneforAttrsList - Add feature to allow
fontdbto getfontconfiginformation - Add benchmarks to accurately gauge improvements
- Add image render tests
- Allow BSD-2-Clause and BSD-3-Clause licneses in cargo-deny
Fixed
- Fix
no_stdbuild - Fix
BufferLine::set_aligndocs to not mention shape reset is performed - Fix width computed during unconstrained layout and add test for it
- Set
cursor_movedto true inEditor::insert_string - Fix
NextWordaction inEditorwhen line ends with word boundaries - Fix building
editor-libcosmicwithvifeature - Respect
fontconfigfont aliases when enabled - Fix rendering of RTL words
Changed
- Unify
no_stdandstdimpls ofFontSystem - Move
hashbrownbehindno_stdfeature - Require either
stdorno_stdfeature to be specified - Use a scratch buffer to reduce allocations
- Enable
stdfeature withfontconfigfeature - Enable
fontconfigfeature by default - Refactor code in
ShapeLine::layout - Set MSRV to
1.65 - Make
Edit::copy_selectionimmutable - Rewrite
PreviousWordlogic inEditorwith iterators - Use attributes at cursor position for insertions in
Editor - Update all dependencies
- Use
self_cellfor creating self-referential struct
- Added
-
0.9.006 Jul 2023Release notes
Open source →Added
- Add
Shapingenum to allow selecting the shaping strategy - Add
Buffer::new_emptyto createBufferwithoutFontSystem - Add
BidiParagraphsiterator - Allow setting
Cursorcolor - Allow setting
Editorcursor - Add
PhysicalGlyphthat allows computingCacheKeyafter layout - Add light syntax highlighter to
libcosmicexample
Fixed
- Fix WebAssembly support
- Fix alignment when not wrapping
- Fallback to monospaced font if Monospace family is not found
- Align glyphs in a
LayoutRunto baseline
Changed
- Update
fontdbto 0.14.1 - Replace ouroboros with aliasable
- Use
BidiParagraphsiterator instead ofstr::Lines - Update
libcosmicversion
Removed
LayoutGlyphno longer hasx_intandy_int, usePhysicalGlyphinstead
- Add
-
0.8.003 Apr 2023Release notes
Open source →Added
FontSystem::new_with_fontshelper- Alignment and justification
FontSystem::db_mutprovides mutable access tofontdbdatabaserustybuzzis re-exported
Fixed
- Fix some divide by zero panics
- Redox now uses
stdFontSystem - Layout system improvements
BufferLinke::set_texthas been made more efficient- Fix potential panic on window resize
Changed
- Use
f32instead ofi32for lengths FontSystemno longer self-referencingSwashCashno longer keeps reference toFontSystem
Removed
Attrs::monospacedis removed, useFamily::Monospaceinstead
-
0.7.007 Feb 2023Nothing published for this version
-
0.6.020 Dec 2022Nothing published for this version
-
0.5.620 Dec 2022 withdrawnNothing published for this version
-
0.5.516 Dec 2022Nothing published for this version
-
0.5.414 Dec 2022Nothing published for this version
-
0.5.313 Dec 2022Nothing published for this version
-
0.5.208 Dec 2022Nothing published for this version
-
0.5.108 Dec 2022Nothing published for this version
-
0.5.015 Nov 2022Nothing published for this version
-
0.4.108 Nov 2022Nothing published for this version
-
0.4.004 Nov 2022Nothing published for this version
-
0.3.031 Oct 2022Nothing published for this version
-
0.2.228 Oct 2022Nothing published for this version
-
0.2.127 Oct 2022Nothing published for this version
-
0.2.027 Oct 2022Nothing published for this version
-
0.1.527 Oct 2022Nothing published for this version
-
0.1.426 Oct 2022Nothing published for this version
-
0.1.326 Oct 2022Nothing published for this version
-
0.1.126 Oct 2022Nothing published for this version
-
0.1.025 Oct 2022Nothing published for this version