## 🤖 New release * `ratatui-core`: 0.1.0-alpha.6 -> 0.1.0-beta.0 * `ratatui-crossterm`: 0.1.0-alpha.5 -> 0.1.0-beta.0 * `ratatui-widgets`: 0.3.0-alpha.5 -> 0.3.0-beta.0 * `ratatui-macros`: 0.7.0-alpha.4 -> 0.7.0-beta.0 * `ratatui-termwiz`: 0.1.0-alpha.5 -> 0.1.0-beta.0 * `ratatui-termion`: 0.1.0-alpha.5 -> 0.1.0-beta.0 * `ratatui`: 0.30.0-alpha.5 -> 0.30.0-beta.0 <details><summary><i><b>Changelog</b></i></summary><p> ## [v0.30.0-beta.0](https://github.com/ratatui/ratatui/releases/tag/v0.30.0-beta.0) - 2025-10-28 > _"Rats don't just survive; they discover; they create. ... I mean, just look at what they do with the terminal!" – Remy & Orhun_ We are excited to announce the biggest release of `ratatui` so far - a Rust library that's all about cooking up TUIs 👨🍳🐀 ✨ **WIP Release highlights**: <https://ratatui-0-30.ratatui.pages.dev/highlights/v030/> ⚠️ List of breaking changes can be found [here](https://github.com/ratatui/ratatui/blob/main/BREAKING-CHANGES.md). ### Features - [56d5e05](56d5e05762) _(bar)_ Update label and text_value to accept Into<> by @Emivvvvv in [#1471](https://github.com/ratatui/ratatui/pull/1471) [**breaking**] > BREAKING CHANGE:label and text_value now accept `Into<>` types, which > breaks type inference. > > ```diff > - Bar::default().label("foo".into()); > + Bar::default().label("foo"); > ``` > > ```diff > - Bar::default().text_value("bar".into()); > + Bar::default().text_value("bar"); > ``` - [b76ad3b](b76ad3b02e) _(bar)_ Impl Styled for Bar by @Emivvvvv in [#1476](https://github.com/ratatui/ratatui/pull/1476) > Related:https://github.com/ratatui/ratatui/issues/683 - [e15fefa](e15fefa922) _(barchar)_ Add BarChart::grouped constructor by @joshka in [#1513](https://github.com/ratatui/ratatui/pull/1513) > Add a new constructor to the `BarChart` widget that allows creating a > grouped barchart with multiple groups of bars. > > Also add a new constructor to the `BarGroup` widget that allows creating > a group of bars with a label. - [369b18e](369b18eef2) _(barchart)_ Reduce barchart creation verbosity by @Emivvvvv in [#1453](https://github.com/ratatui/ratatui/pull/1453) > Adds constructor methods for BarChart, BarGroup, and Bar - [2d713d7](2d713d723d) _(crossterm)_ Allow multiple crossterm versions by @joshka in [#1841](https://github.com/ratatui/ratatui/pull/1841) > This commit introduces feature flags to make it possible for widget > library authors to depend on a specific version of crossterm without > causing version conflicts. This should make it easier for libraries and > apps to update crossterm versions more easily. > > The available feature flags are `crossterm_0_28` and `crossterm_0_29`. > By default, the latest version is enabled. If a multiple features are > enabled we choose the latest version. We will in general support at > least the last two major (0.x) versions of crossterm, and will only > remove versions in a major version bump. - [d99984f](d99984f1e9) _(layout)_ Add `Flex::SpaceEvenly` by @kdheepak in [#1952](https://github.com/ratatui/ratatui/pull/1952) [**breaking**] > Resolves https://github.com/ratatui/ratatui/issues/1951 > > BREAKING CHANGE:Old `Flex::SpaceAround` behavior is available by using > > `Flex::SpaceEvenly` and new > > `Flex::SpaceAround` now distributes space evenly around each element > except the middle spacers > are twice the size of first and last elements > > With this change, the following variants of `Flex` are supported: > > - `Flex::Start`: Aligns items to the start; excess space appears at the > end. > - `Flex::End`: Aligns items to the end; excess space appears at the > start. > - `Flex::Center`: Centers items with equal space on both sides. > - `Flex::SpaceAround` (**new**): Distributes space _around_ items; space > between items is _twice_ the edge spacing. > - `Flex::SpaceBetween`: Distributes space _evenly between_ items except > no space at the edges. > - `Flex::SpaceEvenly` (**previously `Flex::SpaceAround`**): Distributes > space _evenly between_ items and edges. > - `Flex::Legacy`: Preserves legacy behavior, placing all excess space at > the end. > > This aligns behavior of `Flex` with CSS flexbox more closely. > > The following is a screenshot in action: > > <img width="1090" alt="image" > > src="https://github.com/user-attachments/assets/2c7cd797-27bd-4242-a824-4565d369227b" > /> > > *** - [9275d34](9275d3421c) _(layout)_ Add Offset::new() constructor by @joshka in [#1547](https://github.com/ratatui/ratatui/pull/1547) - [7ad9c29](7ad9c29eac) _(linegauge)_ Customized symbols by @sectore in [#1601](https://github.com/ratatui/ratatui/pull/1601) > With this PR any symbol (`&str`) can be used to render `filled` and > `unfilled` parts of `LineGauge` now. Before that change, only > [`symbols::line::Set`](https://docs.rs/ratatui/latest/ratatui/symbols/line/struct.Set.html) > was accepted. > > Note:New methods are introduced to define those symbols: > `filled_symbol` and `unfilled_symbol`. The method > [`line_set`](https://docs.rs/ratatui/latest/ratatui/widgets/struct.LineGauge.html#method.line_set) > is still there, but marked as `deprecated`. > >  - [92a19cb](92a19cb604) _(list)_ Highlight symbol styling by @airblast-dev in [#1595](https://github.com/ratatui/ratatui/pull/1595) [**breaking**] > Allow styling for `List`'s highlight symbol > > This change makes it so anything that implements `Into<Line>` can be > used as a highlight symbol. > > BREAKING CHANGE:`List::highlight_symbol` can no longer be used in const > context > > BREAKING CHANGE:`List::highlight_symbol` accepted `&str`. Conversion > methods that rely on type inference will need to be rewritten as the > compiler cannot infer the type. > > closes:https://github.com/ratatui/ratatui/issues/1443 > > *** - [e89a526](e89a526aab) _(no_std)_ Portable-atomic integration for targets with no atomic types by @j-g00da in [#2076](https://github.com/ratatui/ratatui/pull/2076) > Improves compatibility with no-std targets that don't support atomic > types. > > We support three different scenarios depending on the target: > > 1. Terminal applications and other std targets (e.g. espidf): > > - `std` enabled, `portable-atomic` disabled > > 2. Embedded targets with atomic types, bare metal x86, etc.: > > - `std` disabled `portable-atomic` disabled > > 3. Embedded targets without atomic types (e.g. single-core MCUs): > > - `std` disabled, `portable-atomic` enabled > > Turning on `portable-atomic` together with `std` will fall back to `std` > atomic. - [1399d95](1399d95ae0) _(no_std)_ Make palette and serde features depends on std by @j-g00da in [#1919](https://github.com/ratatui/ratatui/pull/1919) - [b32f781](b32f78195b) _(no_std)_ Make `ratatui-macros` no-std by @j-g00da in [#1865](https://github.com/ratatui/ratatui/pull/1865) - [3e1c72f](3e1c72fb27) _(no_std)_ Make ratatui compatible with `#![no_std]` by @j-g00da in [#1794](https://github.com/ratatui/ratatui/pull/1794) [**breaking**] > Resolves #1781 > > This PR makes it possible to compile ratatui with `#![no_std]`. > Also makes me answer "We Are So Embedded" to "Are We Embedded Yet?" - [ab48c06](ab48c06171) _(no_std)_ Option to disable layout cache for `no_std` compatibility by @j-g00da in [#1795](https://github.com/ratatui/ratatui/pull/1795) [**breaking**] > Resolves #1780 > > BREAKING CHANGE:Disabling `default-features` will now disable layout > cache, which can have a negative impact on performance. > > `Layout::init_cache` and `Layout::DEFAULT_CACHE_SIZE` are now only > available if `layout-cache` feature is enabled. - [09173d1](09173d1829) _(no_std)_ Make `TestBackend::Error` `Infallible` by @j-g00da in [#1823](https://github.com/ratatui/ratatui/pull/1823) [**breaking**] > BREAKING CHANGE:`TestBackend` now uses `core::convert::Infallible` for > error handling instead of `std::io::Error` - [007713e](007713e50a) _(no_std)_ Replace `Backend`'s `io::Error` usages with associated `Error` type by @j-g00da in [#1778](https://github.com/ratatui/ratatui/pull/1778) [**breaking**] > Resolves #1775 > > BREAKING CHANGE:Custom backends now have to implement `Backend::Error` > and `Backend::clear_region`. Additionally some generic `Backend` usage > will have to explicitly set trait bounds for `Backend::Error`. - [a42a17e](a42a17e184) _(no_std)_ Make `ratatui-widgets` `no_std` by @j-g00da in [#1779](https://github.com/ratatui/ratatui/pull/1779) > Resolves #1776 - [5a232a3](5a232a3115) _(no_std)_ Remove redundant `std` usages in `ratatui-widgets` by @j-g00da in [#1762](https://github.com/ratatui/ratatui/pull/1762) - [ebe10cd](ebe10cd81f) _(no_std)_ Remove redundant `std` usages in `ratatui-core` by @j-g00da in [#1753](https://github.com/ratatui/ratatui/pull/1753) > Resolves https://github.com/ratatui/ratatui/issues/1751 - [08b08cc](08b08cc45b) _(rect)_ Centering by @janTatesa in [#1814](https://github.com/ratatui/ratatui/pull/1814) > Resolves #617 - [ff729b7](ff729b7607) _(scrollbar)_ Support retrieving the current position of state by @orhun in [#1552](https://github.com/ratatui/ratatui/pull/1552) > As of now it is possible to change the position of the Scrollbar but not > possible to retrieve the position for further use. e.g. > > ```rust > let mut state = ScrollbarState::default(); > state.next(); > ``` > > This commit adds a new method "`current_position`" (since `position` is > already taken by the fluent setter) for that purpose: > > ```rust > let index = state.get_position(); // yay > ``` > > See #1545 for the concrete usage of this. - [b9da192](b9da1926a0) _(serde)_ Derive Serialize/Deserialize for alignment enums by @j-g00da in [#1957](https://github.com/ratatui/ratatui/pull/1957) > Resolves #1954 - [89b7421](89b74214d9) _(serde)_ Derive Serialize/Deserialize for additional structs/enums by @aurreland in [#1883](https://github.com/ratatui/ratatui/pull/1883) > This PR adds `#[derive(Serialize, Deserialize)]` to the following > structs: > > - `Constraint` > - `Direction` > - `Spacing` > - `Layout` > - `AccentedPalette` > - `NonAccentedPalette` > - `Palette` > - `Padding` > - `Borders` > - `BorderType` > - `ListDirection` > - `ScrollbarOrientation` > - `ScrollDirection` > - `RenderDirection` > - `HighlightSpacing` > > Fixes #1877 - [03f3f6d](03f3f6df35) _(style)_ Allow add/sub modifiers to be omitted in Style serialization. by @rcorre in [#2057](https://github.com/ratatui/ratatui/pull/2057) > It's really useful that Style supports Deserialize, this allows TUI > apps to have configurable theming without much extra code. > > However, deserializing a style currently fails if `add_modifier` and > `sub_modifier` are > not specified. That means the following TOML config: > > ```toml > [theme.highlight] > fg = "white" > bg = "black" > ``` > > Will fail to deserialize with "missing field `add_modifier`". It should > be possible > to omit modifiers and have them default to "none". - [985cd05](985cd05573) _(symbols)_ Add dashed borders by @theotchlx in [#1573](https://github.com/ratatui/ratatui/pull/1573) > Adds several new border sets: > > - ratatui::symbols::border::LIGHT_DOUBLE_DASHED > - ratatui::symbols::border::HEAVY_DOUBLE_DASHED > - ratatui::symbols::border::LIGHT_TRIPLE_DASHED > - ratatui::symbols::border::HEAVY_TRIPLE_DASHED > - ratatui::symbols::border::LIGHT_QUADRUPLE_DASHED > - ratatui::symbols::border::HEAVY_QUADRUPLE_DASHED > > And corresponding variants to the ratatui::widgets::BorderType enum > > Fixes:https://github.com/ratatui/ratatui/issues/1355 - [4c301e8](4c301e891d) _(text)_ Implement `AddAssign` for `Text` by @acuteenvy in [#1956](https://github.com/ratatui/ratatui/pull/1956) > This makes it possible to add a second `Text` instance to a first one using the += operator. > > ```rust > let mut text = Text::from("line 1"); > text += Text::from("line 2"); > ``` > > Style and alignment applied to the second text is ignored (though styles and alignment of lines and spans are copied). - [ce4856a](ce4856a65f) _(widgets)_ Add the missing constructor to canvas types by @orhun in [#1538](https://github.com/ratatui/ratatui/pull/1538) > Allows constructing `Rectangle`, `Points` and `Circle` using the `new` > method instead of initializing with the public fields directly. - [75b78be](75b78be09f) _(uncategorized)_ Add width() impl for tabs by @joshka in [#2049](https://github.com/ratatui/ratatui/pull/2049) > The purpose of this is to make it easy for apps to easily calculate the > total tab width including all dividers and padding. - [8188ed3](8188ed3950) _(uncategorized)_ Implement UnicodeWidthStr for Text/Line/Span by @joshka in [#2030](https://github.com/ratatui/ratatui/pull/2030) > You can now calculate the width of any Text/Line/Span using the > UnicodeWidthStr trait instead of the width method on the type. This also > makes it possible to use the width_cjk() method if needed. - [c845fec](c845fec765) _(uncategorized)_ Add conversion from Size to Rect by @joshka in [#2028](https://github.com/ratatui/ratatui/pull/2028) > `Rect::from(size)` returns a new Rect at the origin (0, 0) with the > specified `Size` - [017af11](017af11b2b) _(uncategorized)_ Preserve block titles when merging borders by @j-g00da in [#1977](https://github.com/ratatui/ratatui/pull/1977) > Resolves #1939 - [6dcd53b](6dcd53bc6b) _(uncategorized)_ Add ergonomic methods for layouting Rects by @joshka in [#1909](https://github.com/ratatui/ratatui/pull/1909) > This commit introduces new methods for the `Rect` struct that simplify > the process of splitting a `Rect` into sub-rects according to a given > `Layout`. By putting these methods on the `Rect` struct, we make it a > bit more natural that a layout is applied to the `Rect` itself, rather > than passing a `Rect` to the `Layout` struct to be split. > > Adds:- `Rect::layout` and `Rect::try_layout` methods that allow splitting a > `Rect` into an array of sub-rects according to a given `Layout`. > > - `Rect::layout_vec` method that returns a `Vec` of sub-rects. > - `Layout::try_areas` method that returns an array of sub-rects, with > compile-time checks for the number of constraints. This is added > mainly for consistency with the new `Rect` methods. > > ```rust > use ratatui_core::layout::{Layout, Constraint, Rect}; > let area = Rect::new(0, 0, 10, 10); > let layout = Layout::vertical([Constraint::Fill(1); 2]); > > // Rect::layout() infers the number of constraints at compile time: > let [top, main] = area.layout(&layout); > > // Rect::try_layout() and Layout::try_areas() do the same, but return a > // Result: > let [top, main] = area.try_layout(&layout)?; > let [top, main] = layout.try_areas(area)?; > > // Rect::layout_vec() returns a Vec of sub-rects: > let areas_vec = area.layout_vec(&layout); > > // you can also explicitly specify the number of constraints: > let areas = area.layout::<2>(&layout); > let areas = area.try_layout::<2>(&layout)?; > let areas = layout.try_areas::<2>(area)?; > ``` - [0c3872f](0c3872f1c5) _(uncategorized)_ Add Rect::outer() by @joshka in [#1929](https://github.com/ratatui/ratatui/pull/1929) > Fixes:https://github.com/ratatui/ratatui/issues/211 - [7bc78bc](7bc78bca1b) _(uncategorized)_ Add ratatui::run() method by @joshka in [#1707](https://github.com/ratatui/ratatui/pull/1707) > This introduces a new `ratatui::run()` method which runs a closure with > a terminal initialized with reasonable defaults for most applications. > This calls `ratatui::init()` before running the closure and > `ratatui::restore()` after the closure completes, and returns the result > of the closure. > > A minimal hello world example using the new `ratatui::run()` method: > > ```rust > fn main() -> Result<(), Box<dyn std::error::Error>> { > ratatui::run(|terminal| { > loop { > terminal.draw(|frame| frame.render_widget("Hello World!", frame.area()))?; > if crossterm::event::read()?.is_key_press() { > break Ok(()); > } > } > }) > } > ``` > > Of course, this also works both with apps that use free methods and > structs: > > ```rust > fn run(terminal: &mut DefaultTerminal) -> Result<(), AppError> { ... } > > ratatui::run(run)?; > ``` > > ```rust > struct App { ... } > > impl App { > fn new() -> Self { ... } > fn run(mut self, terminal: &mut DefaultTerminal) -> Result<(), AppError> { ... } > } > > ratatui::run(|terminal| App::new().run(terminal))?; > ``` - [b6fbfcd](b6fbfcdd1c) _(uncategorized)_ Add lifetime to symbol sets by @joshka in [#1935](https://github.com/ratatui/ratatui/pull/1935) > This makes it possible to create symbol sets at runtime with non-static > lifetimes. > > Fixes:https://github.com/ratatui/ratatui/issues/1722 - [488e5f0](488e5f020f) _(uncategorized)_ Make `border!` work without importing `Borders` by @j-g00da in [#1918](https://github.com/ratatui/ratatui/pull/1918) > Currently using `border!` macro requires explicit import of `Borders` > which is unnecessary. - [671c2b4](671c2b4fd4) _(uncategorized)_ Support merging the borders of blocks by @j-g00da > When two borders overlap, they will automatically merge into a single, > clean border instead of overlapping. > > This improves visual clarity and reduces rendering glitches around corners. > > For example: > > ``` > assert_eq!(Cell::new("┘").merge_symbol("┏", MergeStrategy::Exact).symbol(), "╆"); > ``` - [702fff5](702fff501c) _(uncategorized)_ Implement stylize methods directly on Style by @joshka in [#1572](https://github.com/ratatui/ratatui/pull/1572) [**breaking**] > This makes it possible to create constants using the shorthand methods. > > ```rust > const MY_STYLE: Style = Style::new().blue().on_black(); > ``` > > Rather than implementing Styled for Style and then adding extension > methods that implement the Stylize shorthands, this implements the > methods as const functions directly on Style. > > BREAKING CHANGE:`Style` no longer implements `Styled`. Any calls to > methods implemented by the blanket implementation of Stylize are now > defined directly on Style. Remove the Stylize import if it is no longer > used by your code. > > The `reset()` method does not have a direct replacement, as it clashes > with the existing `reset()` method. Use `Style::reset()` rather than > `some_style.reset()` > > Fixes:#1158 - [4fcd238](4fcd238e1e) _(uncategorized)_ Support no-std for calendar widget by @joshka in [#1852](https://github.com/ratatui/ratatui/pull/1852) > Removes the CalendarEventStore::today() function in no-std environments - [53cdbbc](53cdbbccd5) _(uncategorized)_ Enable serde propagation to backend crates (crossterm, termion) by @ArjunKrish7356 in [#1812](https://github.com/ratatui/ratatui/pull/1812) > This PR propagates the serde feature from the main ratatui crate to the > ratatui-crossterm and ratatui-termion backend crates. Solves #1805 - [6836a69](6836a6903e) _(uncategorized)_ Implement styled for other primitives by @aschey in [#1684](https://github.com/ratatui/ratatui/pull/1684) - [fcb47d6](fcb47d60f3) _(uncategorized)_ Rename Alignment to HorizontalAlignment and add VerticalAlignment by @joshka in [#1735](https://github.com/ratatui/ratatui/pull/1735) [**breaking**] > We don't anticipate removing or deprecating the type alias in the near > future, but it is recommended to update your imports to use the new > name. > > Added a VerticalAlignment enum to make the API more consistent. We don't > have a specific use case for it yet, but it's better to add it now and > be able to use it in the future. > > BREAKING-CHANGE:The `Alignment` enum has been renamed to > `HorizontalAlignment` to better reflect its purpose. A type alias has > been added to maintain backwards compatibility, however there are some > cases where type aliases are not enough to maintain backwards > compatibility. E.g. when using glob imports to import all the enum > variants. This should not affect most users, but it is recommended to > update your imports to use the new name. > > ```diff > - use ratatui::layout::Alignment; > + use ratatui::layout::HorizontalAlignment; > > - use Alignment::*; > + use HorizontalAlignment::*; > ``` - [2714d6b](2714d6b9c3) _(uncategorized)_ Add array and tuple RGB color conversion methods by @joshka in [#1703](https://github.com/ratatui/ratatui/pull/1703) > Other crates (e.g. colorgrad) that deal with colors can convert colors > to a tuple of 3 or 4 u8 values. This commit adds conversion methods from > these types to a `Color::Rgb` instance. Any alpha value is ignored. > > ```rust > Color::from([255, 0, 0]); > Color::from((255, 0, 0)); > Color::from([255, 0, 0, 255]); > Color::from((255, 0, 0, 255)); > ``` - [50ba965](50ba96518f) _(uncategorized)_ Add a new RatatuiMascot widget by @Its-Just-Nans in [#1584](https://github.com/ratatui/ratatui/pull/1584) > Move the Mascot from Demo2 into a new widget. > Make the Rat grey and adjust the other colors. > > ```rust > frame.render_widget(RatatuiMascot::default(), frame.area()); > ``` - [1d28c89](1d28c89fe5) _(uncategorized)_ Add conversions for anstyle by @joshka in [#1581](https://github.com/ratatui/ratatui/pull/1581) > https://crates.io/crates/anstyle makes it possible to define colors in > an interoperable way. This makes it possible for applications to easily > load colors from a variety of formats. > > This is gated by the anstyle feature flag which is disabled by default. > > *** ### Bug Fixes - [a89d3d6](a89d3d62ff) _(buffer)_ Clear behavior with VS16 wide emojis by @nornagon in [#2063](https://github.com/ratatui/ratatui/pull/2063) > This fixes a bug where certain emojis like ⌨️ would sometimes be > "overlaid" onto existing content from the buffer, instead of properly > clearing. > > [example demonstrating > bug](https://gist.github.com/nornagon/11a79d7a1f2e98aa129fedb4abccc530) > > This PR was generated by Codex, and validated by me: > > 1. Behavior of the above example code was buggy before this fix (showed > overlaying "b" on top of the keyboard emoji), and fixed after. > 2. The U+FE0F check is not strictly required, but I did note that emoji > without this char don't exhibit the buggy behavior, even without the > fix. > > *** - [ec30390](ec30390446) _(canvas)_ Round coordinates to nearest grid cell by @joshka in [#1507](https://github.com/ratatui/ratatui/pull/1507) > Previously the canvas coordinates were rounded towards zero, which > causes the rendering to be off by one pixel in some cases. It also meant > that pixels at the extreme edges of the canvas can only be drawn if the > point was exactly on the edge of the canvas. This commit rounds the > coordinates to the nearest integer instead. This may change the output > for some apps using Canvas / Charts. - [afd1ce1](afd1ce179b) _(canvas)_ Lines that start outside the visible grid are now drawn by @renesat in [#1501](https://github.com/ratatui/ratatui/pull/1501) > Previously lines with points that were outside the canvas bounds were > not drawn at all. Now they are clipped to the bounds of the canvas so > that the portion of the line within the canvas is draw. > > To facilitate this, a new `Painter::bounds()` method which returns the > bounds of the canvas is added. > > Fixes:https://github.com/ratatui/ratatui/issues/1489 - [2b0a044](2b0a044ced) _(ci)_ Add contents write permission to release-plz PR by @marcoieni in [#2119](https://github.com/ratatui/ratatui/pull/2119) > https://release-plz.dev/docs/github/quickstart#3-setup-the-workflow > > Fixes https://github.com/release-plz/release-plz/issues/2439 - [18e70d3](18e70d3d51) _(crossterm)_ Terminal should keep Bold when removing Dim by @MarSik in [#1541](https://github.com/ratatui/ratatui/pull/1541) > The Dim removal should behave the same as the logic for Bold removal > that sends NormalIntensity sequence and then restores Dim when needed. - [dca331c](dca331c748) _(demo)_ Support tab key in demo2 example by @orhun in [#1726](https://github.com/ratatui/ratatui/pull/1726) > see #1721 > > Not sure what caused this - it's been there for a while probably and we > didn't realize it since we used `demo2-destroy` mostly. - [0fd4753](0fd4753e6b) _(examples)_ Run the correct example for chart by @orhun in [#1679](https://github.com/ratatui/ratatui/pull/1679) > fixes #1678 - [39479e2](39479e298c) _(examples)_ Ensure that example projects are not published by @orhun in [#1672](https://github.com/ratatui/ratatui/pull/1672) - [9314312](93143126b3) _(layout)_ Feature flag cache related types by @joshka in [#1842](https://github.com/ratatui/ratatui/pull/1842) - [2dd1977](2dd1977c59) _(layout-cache)_ Import `NonZeroUsize` only when `layout-cache` is enabled by @j-g00da in [#1839](https://github.com/ratatui/ratatui/pull/1839) > This silences unused import warning, when `layout-cache` is disabled. - [564a9d7](564a9d76fc) _(line-gauge)_ Pad default label to display 3 numbers by @martinetd in [#2053](https://github.com/ratatui/ratatui/pull/2053) > Display the default label of the LineGauge widget padded to fill 3 cells. > This makes it so that the label doesn't shift around when going from a > single digit to double / triple digits. > > To maintain the existing behavior, use a custom label by calling `.label()` > on the LineGauge. - [a692a6e](a692a6e371) _(lint)_ Apply rust 1.84 clippy suggestions by @joshka in [#1612](https://github.com/ratatui/ratatui/pull/1612) > The canvas map constants are now statics instead. > Fixes > https://rust-lang.github.io/rust-clippy/master/index.html\#large_const_arrays - [2e54d5e](2e54d5e22c) _(macros)_ Use $crate re-export in text macro by @airblast-dev in [#1832](https://github.com/ratatui/ratatui/pull/1832) - [79d5165](79d5165cae) _(no_std)_ Propagate `std` feature flag to dependencies by @j-g00da in [#1838](https://github.com/ratatui/ratatui/pull/1838) > Disables `std` feature flags in dependencies and only enables them with > `ratatui` and `ratatui-core`'s `std` feature flag. This partially fixes the > issue of still depending on `std`, when `std` feature flag is disabled. - [00da8c6](00da8c6203) _(no_std)_ Provide `f64` polyfills for `no_std` compatibility by @j-g00da in [#1840](https://github.com/ratatui/ratatui/pull/1840) > Related:https://github.com/rust-lang/rust/issues/137578 - [3b13240](3b13240728) _(scrollbar)_ Check for area.is_empty() before rendering by @farmeroy in [#1529](https://github.com/ratatui/ratatui/pull/1529) > This adds the `area.is_empty()` back into the scrollbar render method. > Without it, the widget panics if the height is 0. - [f57b696](f57b696fdc) _(span)_ Dont render control characters by @EdJoPaTo in [#1312](https://github.com/ratatui/ratatui/pull/1312) - [2ce958e](2ce958e38c) _(table)_ Allow display of additional table row, if row height > 1 by @Lunderberg in [#1452](https://github.com/ratatui/ratatui/pull/1452) - [0a25bc1](0a25bc166d) _(tests)_ Update the stderr snapshot for ratatui-macros by @orhun in [#2161](https://github.com/ratatui/ratatui/pull/2161) > New 🦀 broke the CI - [5fa342c](5fa342cc52) _(widgets)_ Fix centered block title truncation by @ognis1205 in [#1973](https://github.com/ratatui/ratatui/pull/1973) > Previously block titles that were aligned center were > truncated poorly (aligned to the left, and the last > non-fitting title would be truncated on the left and right. > This now truncates the titles more obviously centered. - [1fe64de](1fe64de09a) _(uncategorized)_ Include underline color in anstyle conversion by @aschey in [#2004](https://github.com/ratatui/ratatui/pull/2004) > Underline color wasn't included in the style conversion logic. - [c1b8528](c1b8528b69) _(uncategorized)_ Panic when rendering widgets on too small buffer by @j-g00da in [#1996](https://github.com/ratatui/ratatui/pull/1996) > Fixes panic on overflow on horizontal `Barchart` and `RatatuiMascot` and adds proper tests to all widgets. > > *** - [08b21fa](08b21fa55c) _(uncategorized)_ Fix panic when rendering a `Paragraph` out of bounds by @jwodder in [#1670](https://github.com/ratatui/ratatui/pull/1670) > Fixes #1667. - [80bc818](80bc818723) _(uncategorized)_ Fix truncation of left aligned block titles by @joshka in [#1931](https://github.com/ratatui/ratatui/pull/1931) > truncate the right side of left aligned titles rather than the left side > of right aligned titles. This is more obvious as the left side of text > often contains more important information. And we generally read > left to right. > > This change makes centered titles overwrite left aligned titles and > right aligned titles overwrite centered or left aligned titles. > > Fixes:https://github.com/ratatui/ratatui/issues/358 - [21e3b59](21e3b598ce) _(uncategorized)_ Fix handling of multi-byte chars in bar chart by @joshka in [#1934](https://github.com/ratatui/ratatui/pull/1934) > The split_at method requires that the split point is at a valid utf8 > character boundary. > > Fixes:https://github.com/ratatui/ratatui/issues/1928 - [e1e4004](e1e400406c) _(uncategorized)_ Derive copy for list state by @janTatesa in [#1921](https://github.com/ratatui/ratatui/pull/1921) - [12cb5a2](12cb5a28fe) _(uncategorized)_ Allow canvas area to exceed u16::MAX by @Daksh14 in [#1891](https://github.com/ratatui/ratatui/pull/1891) > This allows Canvas grids where the width \* height exceeds u16::MAX by > converting values to usize earlier in several methods. > > Fixes:https://github.com/ratatui/ratatui/issues/1449 - [09cc9ef](09cc9ef57d) _(uncategorized)_ Typo in changelog by @joshka in [#1857](https://github.com/ratatui/ratatui/pull/1857) - [c238aca](c238aca83a) _(uncategorized)_ `padding_right()` should set right padding instead of left by @sxyazi in [#1837](https://github.com/ratatui/ratatui/pull/1837) > Fixes https://github.com/ratatui/ratatui/issues/1836 - [c90ba97](c90ba9781e) _(uncategorized)_ Avoid unnecessary imports in minimal build by @cgzones in [#1787](https://github.com/ratatui/ratatui/pull/1787) > core::ops::Range is only used with the feature `scrolling-regions`. > Ensure a minimal `cargo check` reports no warnings. - [416ebdf](416ebdf8c8) _(uncategorized)_ Correct clippy errors introduced by rust 1.86.0 update by @j-g00da in [#1755](https://github.com/ratatui/ratatui/pull/1755) > New version of rust (1.86.0) caused CI to fail. - [4eac5b2](4eac5b2849) _(uncategorized)_ Make deprecation notes more helpful by @joshka in [#1702](https://github.com/ratatui/ratatui/pull/1702) > AI coding assistants use the deprecation notes to automatically suggest > fixes. This commit updates the deprecation notes to push those tools to > suggest the correct replacement methods and types. > > Specifically, AI tools often suggest using `Buffer::get(x, y)`, because > of their training data where this was prevalent. When fixing these > deprecations, they often incorrectly suggest using `Buffer::get(x, y)` > instead of `Buffer[(x, y)]`. - [35a8642](35a86427ab) _(uncategorized)_ `Rect::positions()` should be empty when width is 0 and height is nonzero by @jwodder in [#1669](https://github.com/ratatui/ratatui/pull/1669) > Fixes #1666. - [f5fc819](f5fc8197ff) _(uncategorized)_ Avoid extra line break on whitespace only lines when wrapping paragraphs by @dotdash in [#1636](https://github.com/ratatui/ratatui/pull/1636) > Currently whitespace only lines produces an extra line break when > trimming is disabled, because both the trimmed as well as the > non-trimmed line get inserted. Fix this by only inserting the > non-trimmed one. - [2892bdd](2892bddce6) _(uncategorized)_ Rust 1.83 clippy lints by @joshka in [#1527](https://github.com/ratatui/ratatui/pull/1527) > https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes - [36e2d1b](36e2d1bda1) _(uncategorized)_ Add feature(doc_cfg) when generating docs by @joshka in [#1506](https://github.com/ratatui/ratatui/pull/1506) - [4d7704f](4d7704fba5) _(uncategorized)_ Make StatefulWidget and Ref work with unsized State by @thscharler in [#1505](https://github.com/ratatui/ratatui/pull/1505) > StatefulWidget::State and StatefulWidgetRef::State are now ?Sized. > > This allows implementations of the traits to use unsized types for the > State associated type. This is turn is useful when doing things like > boxing different stateful widget types with State which implements > `Any`, are slices or any other dynamically sized type. - [7b87509](7b875091e1) _(uncategorized)_ Typo by @marcoieni in [#1480](https://github.com/ratatui/ratatui/pull/1480) ### Refactor - [8d60e96](8d60e96b2b) _(examples)_ Use crossterm event methods by @joshka in [#1792](https://github.com/ratatui/ratatui/pull/1792) > Crossterm 0.29 introduced methods to easily check / extract the event > type. E.g. as_key_press_event() and is_key_press(). This commit > updates the examples to use these methods instead of matching on > the event type. This makes the code cleaner and easier to read. > > Also does a general cleanup of the event handling code in the examples. - [07bec55](07bec55b7d) _(no_std)_ Make usages of std explicit in ratatui-core. by @ed-2100 in [#1782](https://github.com/ratatui/ratatui/pull/1782) > ### This commit does the following: > > - Adds `#[no_std]` to `lib.rs`. > - Adds `extern crate std;` to `lib.rs`. > - Updates `ratatui-core` to explicitly `use` items from std and alloc. > - Prefers `use`-ing alloc over std when possible. > > ### Explanation: > > This allows usages of `std` in `ratatui-core` to be clearly pointed out > and dealt with individually. > > Eventually, when `std` is to be feature gated, the associated commit > will be much cleaner. - [f132fa1](f132fa1715) _(table)_ Small readability improvements by @joshka in [#1510](https://github.com/ratatui/ratatui/pull/1510) - [02e53de](02e53de0f8) _(uncategorized)_ Make use of iter::repeat_n() by @cgzones in [#1788](https://github.com/ratatui/ratatui/pull/1788) > Applied via clippy --fix. > Available since 1.82.0. - [a195d59](a195d59a47) _(uncategorized)_ Move xtask commands to small modules by @joshka in [#1620](https://github.com/ratatui/ratatui/pull/1620) - [904b0aa](904b0aa723) _(uncategorized)_ Move symbols to modules by @joshka in [#1594](https://github.com/ratatui/ratatui/pull/1594) - [7c8573f](7c8573f575) _(uncategorized)_ Rearrange selection_spacing code by @raylu in [#1540](https://github.com/ratatui/ratatui/pull/1540) - [217c57c](217c57cd60) _(uncategorized)_ Modularize backends by @orhun in [#1508](https://github.com/ratatui/ratatui/pull/1508) > Backend code is now moved to `ratatui-crossterm`, `ratatui-termion` and > `ratatui-termwiz`. This should be backwards compatible with existing code. - [e461b72](e461b724a6) _(uncategorized)_ Move {Stateful,}Widget{,Ref} types into individual files by @joshka in [#1479](https://github.com/ratatui/ratatui/pull/1479) > This is a preparatory refactoring for modularization. No user visible > changes. ### Documentation - [40e96a2](40e96a2a04) _(block)_ Add collapsed border example by @joshka in [#1899](https://github.com/ratatui/ratatui/pull/1899) - [d291042](d291042e69) _(block)_ Revise the block example by @orhun in [#1520](https://github.com/ratatui/ratatui/pull/1520) > - Moves the block example from `ratatui` to `ratatui-widgets` > - Simplifies the example (bordered, styled, custom borders) > > see #1512 - [0951da5](0951da52f9) _(breaking-changes)_ Improve migration guide for `Backend::Error` by @j-g00da in [#1908](https://github.com/ratatui/ratatui/pull/1908) > Related:https://github.com/fujiapple852/trippy/pull/1588 - [bbe1cf9](bbe1cf9497) _(breaking-changes)_ Change MSRV to 1.85 by @j-g00da in [#1896](https://github.com/ratatui/ratatui/pull/1896) > The minimum supported Rust version is now for `ratatui` v0.30 is 1.85 - [c7912f3](c7912f3990) _(breaking-changes)_ Fix header level by @j-g00da in [#1825](https://github.com/ratatui/ratatui/pull/1825) - [eb24938](eb249382c9) _(changelog)_ Add note to ratatui-macros' changelog - [fcde9cb](fcde9cb9c3) _(changelog)_ Fix typo by @orhun in [#1463](https://github.com/ratatui/ratatui/pull/1463) - [73488ab](73488abb45) _(contributing)_ Fix link to `widgets_block_renders` test by @ognis1205 in [#2101](https://github.com/ratatui/ratatui/pull/2101) > The `CONTRIBUTING.md` referenced `tests/widgets_block.rs`, but the > correct path is `ratatui/tests/widgets_block.rs`. Updated the link so > that readers can navigate to the test example without 404 error. > > *** - [0b025db](0b025db72b) _(contributing)_ Fix grammar by @j-g00da in [#1958](https://github.com/ratatui/ratatui/pull/1958) - [1197b2a](1197b2a02c) _(contributing)_ Add note about using nightly for formatting by @joshka in [#1816](https://github.com/ratatui/ratatui/pull/1816) - [3ae6bf1](3ae6bf1d6f) _(contributing)_ Use cargo-xtask for instructions by @orhun in [#1509](https://github.com/ratatui/ratatui/pull/1509) > - Updates `CONTRIBUTING.md` about the usage of `xtask` > - Removes `Makefile.toml` - [22e3e84](22e3e84de8) _(core)_ Remove link to Paragraph widget by @orhun in [#1683](https://github.com/ratatui/ratatui/pull/1683) - [200b217](200b217722) _(examples)_ Add VHS tapes and docs for widget examples by @orhun in [#2114](https://github.com/ratatui/ratatui/pull/2114) > fixes #1982 > > Later on I'll figure out an easy way to regenerate this in the CI and > possibly do the same for the app examples' VHS tapes. That's why I > haven't added a script or mentioned anything in the docs yet (hint: > #1721) > > *** - [861fbdf](861fbdf5cf) _(examples)_ Fix a typo by @j-g00da in [#1890](https://github.com/ratatui/ratatui/pull/1890) > Makes CI typos check pass again - [882cc3c](882cc3c6c6) _(examples)_ Update app examples with tapes by @orhun in [#1673](https://github.com/ratatui/ratatui/pull/1673) - [4393fae](4393fae54c) _(examples)_ Move scrollbar example to examples folder by @orhun in [#1665](https://github.com/ratatui/ratatui/pull/1665) - [9ea70e2](9ea70e28c6) _(examples)_ Move widget-impl example to examples folder by @orhun in [#1663](https://github.com/ratatui/ratatui/pull/1663) - [774ab78](774ab788d4) _(examples)_ Move widget-ref-container example to examples folder by @orhun in [#1664](https://github.com/ratatui/ratatui/pull/1664) > see #1512 - [910d16e](910d16e63a) _(examples)_ Move user-input example to examples folder by @orhun in [#1659](https://github.com/ratatui/ratatui/pull/1659) - [dbfb7da](dbfb7da9e3) _(examples)_ Move table example to examples folder by @orhun in [#1657](https://github.com/ratatui/ratatui/pull/1657) - [cb2a58a](cb2a58aaa0) _(examples)_ Move tracing example to examples folder by @orhun in [#1658](https://github.com/ratatui/ratatui/pull/1658) - [7e00b64](7e00b646fc) _(examples)_ Move panic example to examples folder by @orhun in [#1655](https://github.com/ratatui/ratatui/pull/1655) - [8127590](8127590812) _(examples)_ Move modifiers example to examples folder by @orhun in [#1654](https://github.com/ratatui/ratatui/pull/1654) - [7c40c0b](7c40c0bbdd) _(examples)_ Move popup example to examples folder by @orhun in [#1656](https://github.com/ratatui/ratatui/pull/1656) > see #1512 - [d87354f](d87354f400) _(examples)_ Move list example to examples folder by @orhun in [#1653](https://github.com/ratatui/ratatui/pull/1653) > see #1512 > > also renames it to todo-list - [621226f](621226f2e2) _(examples)_ Move inline example to examples folder by @orhun in [#1651](https://github.com/ratatui/ratatui/pull/1651) - [9ba7d25](9ba7d25b71) _(examples)_ Move hyperlink example to examples folder by @orhun in [#1650](https://github.com/ratatui/ratatui/pull/1650) - [bb94d1c](bb94d1c0fa) _(examples)_ Move minimal example to examples folder by @orhun in [#1649](https://github.com/ratatui/ratatui/pull/1649) - [9f399ac](9f399ac7a6) _(examples)_ Move gauge example to examples folder by @orhun in [#1646](https://github.com/ratatui/ratatui/pull/1646) - [104d6a6](104d6a6c2b) _(examples)_ Move custom-widget example to examples folder by @orhun in [#1644](https://github.com/ratatui/ratatui/pull/1644) - [fa8ca01](fa8ca0121a) _(examples)_ Move flex example to examples folder by @orhun in [#1642](https://github.com/ratatui/ratatui/pull/1642) - [f5fde0e](f5fde0ef53) _(examples)_ Move constraints example to examples folder by @orhun in [#1641](https://github.com/ratatui/ratatui/pull/1641) - [fc70288](fc70288954) _(examples)_ Move constraint-explorer example to examples folder by @orhun in [#1640](https://github.com/ratatui/ratatui/pull/1640) - [325f961](325f96102a) _(examples)_ Move hello-world example to examples folder by @orhun in [#1647](https://github.com/ratatui/ratatui/pull/1647) - [867c4bc](867c4bc4e9) _(examples)_ Move colors-rgb example to examples folder by @joshka in [#1582](https://github.com/ratatui/ratatui/pull/1582) > - **docs: move colors-rgb example to examples folder** > - **docs: update main examples README** > > *** - [72334ed](72334ed61c) _(layout)_ Update documentation to point to `kasuari` solver by @a-kenji in [#2003](https://github.com/ratatui/ratatui/pull/2003) - [2be9ccb](2be9ccb120) _(layout)_ Remove unnecessary path prefix by @j-g00da in [#1766](https://github.com/ratatui/ratatui/pull/1766) - [b669ceb](b669cebcaf) _(layout)_ Change `cassowary` to `kasuari` crate reference by @j-g00da in [#1765](https://github.com/ratatui/ratatui/pull/1765) - [f907c74](f907c74bb3) _(license)_ Update copyright years by @LVivona in [#1639](https://github.com/ratatui/ratatui/pull/1639) > Update MIT Licence to copyright year 2025 - [68b9f67](68b9f67f59) _(readme)_ Add `Built with Ratatui` badge for downstream projects by @harilvfs in [#1905](https://github.com/ratatui/ratatui/pull/1905) - [088aac1](088aac136d) _(readme)_ Tweak links and badges by @joshka in [#1598](https://github.com/ratatui/ratatui/pull/1598) - [6e43672](6e436725e4) _(readme)_ Reimagine README.md by @orhun in [#1569](https://github.com/ratatui/ratatui/pull/1569) > This is the result of the re-imagination of a more suitable README.md. It > is simpler and shorter: not giving more information to the user than > they actually need. > > Also updates the quickstart code with the up-to-date version and adds > link to templates which was missing. > > *** - [8f28247](8f282473b2) _(readme)_ Correct examples links by @HoKim98 in [#1484](https://github.com/ratatui/ratatui/pull/1484) - [9f90f74](9f90f7495f) _(readme)_ Fix broken link by @nilsmartel in [#1485](https://github.com/ratatui/ratatui/pull/1485) - [260af68](260af68a34) _(readme)_ Include iocraft as an alternative by @kdheepak in [#1483](https://github.com/ratatui/ratatui/pull/1483) - [8e5151f](8e5151f83d) _(rect)_ Fix typo in the Rect::outer function comments by @orhun in [#2123](https://github.com/ratatui/ratatui/pull/2123) - [40f13c6](40f13c6a6c) _(rect)_ Update the outdated comment for Rect::area() by @eqsdxr in [#2100](https://github.com/ratatui/ratatui/pull/2100) > The return value of Rect.area() is no longer of u16 type, and the value > is not being clumped anymore. - [ce16692](ce16692b9a) _(release)_ Fix typo by @j-g00da in [#1754](https://github.com/ratatui/ratatui/pull/1754) - [9a930a6](9a930a6e99) _(terminal)_ Made usage of Terminal::get_frame() clearer by @Blaeriz in [#2071](https://github.com/ratatui/ratatui/pull/2071) > Closes : https://github.com/ratatui/ratatui/issues/1200 > > *** - [b08b4cb](b08b4cbd5e) _(terminal)_ Add disclaimer about panics to Terminal::new by @lolbinarycat in [#2088](https://github.com/ratatui/ratatui/pull/2088) > part of #2087 > > cc @orhun > > *** - [dafb716](dafb716f9d) _(widgets)_ Add example for grouped barchart by @orhun in [#1566](https://github.com/ratatui/ratatui/pull/1566) > related #1512 > > *** - [ed5dd73](ed5dd73084) _(widgets)_ Add example for tabs by @orhun in [#1559](https://github.com/ratatui/ratatui/pull/1559) > related #1512 > > Also removes the tabs example from ratatui crate since it overlaps with > this new example in terms of functionality and it was not following the > general theme of other examples. - [fab5321](fab532171d) _(widgets)_ Add example for scrollbar by @orhun in [#1545](https://github.com/ratatui/ratatui/pull/1545) > Related to: #1512 - [898aef6](898aef6e2f) _(widgets)_ Add example for list by @orhun in [#1542](https://github.com/ratatui/ratatui/pull/1542) > Related to: #1512 - [452366a](452366aa9e) _(widgets)_ Add example for sparkline by @orhun in [#1556](https://github.com/ratatui/ratatui/pull/1556) > related #1512 > > Also removes the sparkline example from ratatui crate since this example > is a simplified and easier to understand version of that - [6ddde0e](6ddde0e8a8) _(widgets)_ Add example for table by @orhun in [#1557](https://github.com/ratatui/ratatui/pull/1557) > related #1512 - [93ad6b8](93ad6b828c) _(widgets)_ Update values in chart example by @orhun in [#1558](https://github.com/ratatui/ratatui/pull/1558) > better stonks - [15f442a](15f442a71e) _(widgets)_ Add example for paragraph by @orhun in [#1544](https://github.com/ratatui/ratatui/pull/1544) > related #1512 > > Also removes the paragraph example from `ratatui` since these examples > are more or less the same. - [17bba14](17bba14540) _(widgets)_ Move the logo example to widgets by @orhun in [#1543](https://github.com/ratatui/ratatui/pull/1543) > related #1512 > > Also updates the code to make it consistent with the other examples - [f2451e7](f2451e7f1e) _(widgets)_ Add example for gauge by @orhun in [#1539](https://github.com/ratatui/ratatui/pull/1539) > related #1512 - [4f0a8b2](4f0a8b21af) _(widgets)_ Add example for canvas by @orhun in [#1533](https://github.com/ratatui/ratatui/pull/1533) > related #1512 - [91147c4](91147c4d75) _(widgets)_ Add example for chart by @orhun in [#1536](https://github.com/ratatui/ratatui/pull/1536) > stonks - [6dd25a3](6dd25a3111) _(widgets)_ Add example for calendar by @orhun in [#1532](https://github.com/ratatui/ratatui/pull/1532) > related #1512 - [99ac005](99ac005b06) _(widgets)_ Add simple barchart example by @joshka in [#1511](https://github.com/ratatui/ratatui/pull/1511) - [f8b0594](f8b0594363) _(uncategorized)_ Fix: fix typos by @j-g00da in [#2129](https://github.com/ratatui/ratatui/pull/2129) > This fixes the pipeline after bumping typos. - [9998000](9998000e36) _(uncategorized)_ Use shields.io badge by @LitoMore in [#2040](https://github.com/ratatui/ratatui/pull/2040) > Related to: > > - https://github.com/simple-icons/simple-icons/pull/13593 > - https://github.com/ratatui/ratatui/pull/1967 > > The Ratatui icon is available on shields.io now ✌️ > > And it's customizable. There are more configurations at > https://shields.io/badges. > > Here are some examples: > > ```markdown >  >  >  >  >  > ``` > >  >  > >  > >  > >  > > I also created a PR to the ratatui-website project to update the badge. > Here is the PR: > > - https://github.com/ratatui/ratatui-website/pull/924 - [71ef65b](71ef65b624) _(uncategorized)_ Add section on collaborative development to contributing doc by @joshka in [#2029](https://github.com/ratatui/ratatui/pull/2029) - [cba5cca](cba5cca2bd) _(uncategorized)_ Update heading image for Ratatui 0.30.0 release 🎉 by @j-g00da in [#2000](https://github.com/ratatui/ratatui/pull/2000) - [9836f07](9836f0760d) _(uncategorized)_ Add AI contribution guidelines by @joshka in [#2013](https://github.com/ratatui/ratatui/pull/2013) - [98f85b8](98f85b8650) _(uncategorized)_ Update link to scrollable widgets RFC by @MatrixFrog in [#1994](https://github.com/ratatui/ratatui/pull/1994) - [055522e](055522ef7b) _(uncategorized)_ Add docs for authoring widget crates by @j-g00da in [#1955](https://github.com/ratatui/ratatui/pull/1955) > - added Authoring Widget Libraries sub-section > - moved built-in and third-party widgets sections higher - [617d318](617d31851a) _(uncategorized)_ Improve Block docs by @joshka in [#1953](https://github.com/ratatui/ratatui/pull/1953) - [8e2d568](8e2d568428) _(uncategorized)_ Improve layout related docs by @joshka in [#1948](https://github.com/ratatui/ratatui/pull/1948) > Adds module level docs and more comprehensive docs on all the types in > the layout module > > Fixes #1937 - [4c708dd](4c708ddf8a) _(uncategorized)_ Improve docs for run/init/restore etc. by @joshka in [#1947](https://github.com/ratatui/ratatui/pull/1947) > - **docs: document the init module** > - **docs: use the ratatui::run() methods in the main doc** > - **docs: add more intradoc / website links and historical perspective > on Terminal / backend** > - **docs: add notes about new run/init/restore methods and the > defaultterminal type to terminal docs** - [5620e06](5620e06b1a) _(uncategorized)_ Add crate organization sections to workspace by @joshka in [#1946](https://github.com/ratatui/ratatui/pull/1946) > Adds summary-level crate organization documentation to all crates > explaining the modular workspace structure and when to use each crate. > Links to ARCHITECTURE.md for detailed information. - [cfb65e6](cfb65e64ba) _(uncategorized)_ Add examples for handling state by @joshka in [#1849](https://github.com/ratatui/ratatui/pull/1849) > Added comprehensive state management examples covering both immutable > and mutable patterns and documentation to help developers choose the > right approach for their applications. - [3de41a8](3de41a8249) _(uncategorized)_ Document widgets module by @joshka in [#1932](https://github.com/ratatui/ratatui/pull/1932) > Adds a good overview of the use and implementation of widget traits. > > Goals with the doc rewrite: > > - document the rationale for the ratatui-widgets crate with info for app > builders and widget makers. > - Show how to use the widgets for rendering as well as implement the > traits- document the differences and reasons for each trait > - document the historical perspective (to make it easy to understand > older Ratatui apps as well as migrate to newer approaches > - give recommended approaches to implementing traits > - explain the differences between Consuming and Shared / Mutable > Reference implementations of Widget > - explain the differences between using StatefulWidget and Mutable > References > - Explain the use case for WidgetRef and StatefulWidgetRef > - Link out to third part widget lists > > Fixes:https://github.com/ratatui/ratatui/issues/366 > > *** - [ca2ad4a](ca2ad4a1f9) _(uncategorized)_ Simplify ratatui-macro docs by @joshka in [#1923](https://github.com/ratatui/ratatui/pull/1923) - [92b6a16](92b6a16bde) _(uncategorized)_ Fix grammar in ratatui-widgets README by @sevki in [#1885](https://github.com/ratatui/ratatui/pull/1885) - [da05957](da05957fa0) _(uncategorized)_ Add widget-ref-container example by @joshka in [#1603](https://github.com/ratatui/ratatui/pull/1603) > Implements ideas alluded to by > <https://discord.com/channels/1070692720437383208/1072907135664529508/1323061053990637640> > and followup conversations. - [1798512](1798512e94) _(uncategorized)_ Fix wording in user_input example by @dawedawe in [#1611](https://github.com/ratatui/ratatui/pull/1611) > Fix wording in `user_input.rs` example. - [03066d8](03066d81bf) _(uncategorized)_ Fix punctuation in canvas.rs documentation by @dawedawe in [#1583](https://github.com/ratatui/ratatui/pull/1583) > Fix end of sentence punctuation in canvas.rs docs. - [e411d9e](e411d9ec3e) _(uncategorized)_ Add input form example by @joshka in [#1551](https://github.com/ratatui/ratatui/pull/1551) > Demonstrates how to manage the cursor and input focus with a simple > form. Uses an enum to track the current input field and passes the > input events to the active field. > > This is similar to the json tutorial on the website, but a bit simpler - [ed071f3](ed071f3723) _(uncategorized)_ Add mouse-drawing example by @joshka in [#1546](https://github.com/ratatui/ratatui/pull/1546) > Demonstrates how to handle mouse events - [46902f5](46902f5587) _(uncategorized)_ Improve docs for workspace crates by @orhun in [#1490](https://github.com/ratatui/ratatui/pull/1490) > Overall makes improvements in the documentation of the workspace crates and checking them. - [a6b5792](a6b579223f) _(uncategorized)_ Fix example link in readme by @thomas-tacquet in [#1462](https://github.com/ratatui/ratatui/pull/1462) ### Performance - [1f41a61](1f41a61008) _(paragraph)_ Avoid unnecessary work when rendering by @alexpasmantier in [#1622](https://github.com/ratatui/ratatui/pull/1622) > Improve render times for paragraphs that are scrolled. > > Currently all `LineComposer`s are considered to be state machines which > means rendering a paragraph with a given Y offset requires computing the > entire state up to Y before being able to render from Y onwards. > > While this makes sense for Composers such as the `WordWrapper` (where > one needs to consider all previous lines to determine where a given line > will end up), it means it also penalizes Composers which can render a > given line "statelessely" (such as the `LineTruncator`) which actually > end up doing a lot of unnecessary work (and on the critical rendering > path) when the offset gets high. - [ba9eed7](ba9eed7742) _(table)_ Replace while loop with simple min operation by @EdJoPaTo in [#1747](https://github.com/ratatui/ratatui/pull/1747) ### Styling - [ac60de3](ac60de3960) _(uncategorized)_ Fix wrapping in doc comment by @joshka in [#2104](https://github.com/ratatui/ratatui/pull/2104) - [2739391](2739391950) _(uncategorized)_ Use Module imports_granularity by @joshka in [#1728](https://github.com/ratatui/ratatui/pull/1728) > I was swayed by the arguments about this made by the compiler team In > <https://github.com/rust-lang/compiler-team/issues/750> and decided to > look at how this organization affects ratatui. I found this reduces the > number of lines across the codebase by about 350 and makes the imports > more readable and definitely more greppable as you usually only have > to read a single line. I've found in the past that maintaining imports > regularly leads to merge conflicts which have to be resolved by hand > and this change should reduce the likelihood of that happening. > > Main change is in rustfmt.toml, and the rest is just the result of > running `cargo xtask format`. > > While implementing this, cargo machete brings up that the various > backend crates are unused by the example crates. > > The re-export of each backend crate under ratatui is to make it possible > for libs that rely on a specific version of ratatui to use the same > version of the backend crate. Apps in general should use the backend > crate directly rather than through ratatui as this is less confusing. > > - Removes all usages of `ratatui::{crossterm, termion, termwiz}`` in the > examples. > - Adds the backend crate to the dependencies of the examples that use > the backend crate directly. ### Testing - [db65aa0](db65aa0ef7) _(bench)_ Add benchmark for text by @orhun in [#2160](https://github.com/ratatui/ratatui/pull/2160) > #2138 > > *** - [a21501f](a21501f7f4) _(bench)_ Added a benchmark for constraints by @kashregister in [#2043](https://github.com/ratatui/ratatui/pull/2043) > I've added a new benchmark for constraints, which only takes into > account the time it takes to generate a full layout using a single type > of constraints only. Avoided rendering here as it resulted in more > inaccurate benchmarks, and i believe it should be separated nonetheless. - [39cd313](39cd313b3b) _(layout)_ Add visual buffer tests for Rect methods by @orhun in [#2124](https://github.com/ratatui/ratatui/pull/2124) - [8aefc06](8aefc06a90) _(macros)_ Regenerate trybuild stderr by @ognis1205 in [#2093](https://github.com/ratatui/ratatui/pull/2093) > ### Overview > > Updated the `.stderr` file corresponding to the > `ratatui-macros/tests/ui/fails.rs` compile-fail test. > > ### Changes > > - Updated `tests/ui/fails.stderr` to match the new compiler output. > > ### Impact > > - Affects only the trybuild UI tests > - No impact on production code > > ### Notes > > - The `.stderr` was generated using `TRYBUILD=overwrite cargo test`. > > Closes https://github.com/ratatui/ratatui/issues/2094 - [deb1b8e](deb1b8ec43) _(uncategorized)_ Ensure Style::new() and Style::default() are equivalent by @cgzones in [#1789](https://github.com/ratatui/ratatui/pull/1789) ### Miscellaneous Tasks - [abe2f27](abe2f27328) _(backend)_ Change From<T> impls to new backend specific IntoBackend and FromBackend traits by @joshka in [#1464](https://github.com/ratatui/ratatui/pull/1464) [**breaking**] > Adds two traits `IntoCrossterm` and `FromCrossterm` for converting > between ratatui and crossterm types. This is necessary in order to avoid > the orphan rule when implementing `From` for crossterm types once the > crossterm types are moved to a separate crate. > > Similarly Termwiz and Termwiz gain FromTermion, IntoTermion, FromTermwiz > and IntoTermwiz traits. > > BREAKING CHANGE:The `From` and `Into` impls for backend types are now > replaced > with specific backend traits. > > ```diff > + use ratatui::backend::{FromCrossterm, IntoCrossterm}; > > let crossterm_color = crossterm::style::Color::Black; > - let ratatui_color = crossterm_color.into(); > - let ratatui_color = ratatui::style::Color::from(crossterm_color); > + let ratatui_color = ratatui::style::Color::from_crossterm(crossterm_color); > - let crossterm_color = ratatui_color.into(); > - let crossterm_color = crossterm::style::Color::from(ratatui_color); > + let crossterm_color = ratatui_color.into_crossterm(); > > let crossterm_attribute = crossterm::style::types::Attribute::Bold; > - let ratatui_modifier = crossterm_attribute.into(); > - let ratatui_modifier = ratatui::style::Modifier::from(crossterm_attribute); > + let ratatui_modifier = ratatui::style::Modifier::from_crossterm(crossterm_attribute); > - let crossterm_attribute = ratatui_modifier.into(); > - let crossterm_attribute = crossterm::style::types::Attribute::from(ratatui_modifier); > + let crossterm_attribute = ratatui_modifier.into_crossterm(); > ``` > > Similar conversions for `ContentStyle` -> `Style` and `Attributes` -> > `Modifier` exist for Crossterm, > and all the Termion and Termwiz types. > > *** - [0a47ebd](0a47ebd94b) _(bencher)_ Update bencher CLI usage by @epompeii in [#1470](https://github.com/ratatui/ratatui/pull/1470) - [b46778d](b46778dd1d) _(breaking-changes)_ Add details to `no_std`-related breaking changes by @j-g00da in [#1828](https://github.com/ratatui/ratatui/pull/1828) > Some corrections and added details to BREAKING-CHANGES.md. > > I decided to remove: > > - `Backend` now uses `Self::Error` for error handling instead of > `std::io::Error` > - `Terminal<B>` now uses `B::Error` for error handling instead of > `std::io::Error` > > ...as we are still using `std::io::Error` in built-in backends, so this > will only be breaking if a third-party backend decides to use a custom > error other than `std::io::Error`, which would be a breaking change in > downstream and not `ratatui`. > > The exception to that is `TestBackend`, which uses `Infallible`, but > this already has its own breaking changes entry. - [a0979d6](a0979d6871) _(build)_ Remove cargo lint by @joshka in [#1549](https://github.com/ratatui/ratatui/pull/1549) > Duplicate crate lint is too noisy and sensitive to upstream changes - [ae43ea7](ae43ea796a) _(cell)_ Use Option instead of space (" ") for symbol by @joshka > This change makes the `Cell::symbol` field an `Option<CompactString>`, > allowing it to represent an empty cell as `None` instead of an empty > string. The rationale for this is to later allow the merge symbol > functionality to act differently based on whether a cell has previously > held a symbol or not, rather than always merging with an empty string. > This will help make it possible to merge borders with titles with spaces > and other symbols, without assuming that an empty string is always > equivalent to no symbol. > > - Default is now derived as `Option::None` works correctly. > - PartialEq and Eq implementations are updated to treat `None` the same > as an empty string. > - merge_symbol against an empty cell will now just set the symbol > rather than calling MergeStrategy::merge with an empty string. > - PartialEq, and Hash are manually implemented instead of being > derived, and are updated to treat `None` equal to an empty string. - [887a636](887a6366e5) _(ci)_ Override RUSTUP_TOOLCHAIN for the check step by @ognis1205 in [#2116](https://github.com/ratatui/ratatui/pull/2116) > Summary > Fixes an issue where the "check" CI jobs for MSRV and stable were > unintentionally using the stable toolchain from `rust-toolchain.toml` > instead of the matrix-specified toolchain. > > Details > > - Added `RUSTUP_TOOLCHAIN: ${{ matrix.toolchain }}` to the "check" job > in CI configuration. > > Additional Context > > - https://github.com/ratatui/ratatui/pull/2106 > - https://discord.com/channels/1070692720437383208/1072879985762762812/1422345357131780177 > - https://rust-lang.github.io/rustup/overrides.html#overrides - [34baaf1](34baaf1137) _(ci)_ Override the toolchain for CI runs by @ognis1205 in [#2106](https://github.com/ratatui/ratatui/pull/2106) > ### Summary > > Fixes an issue where the beta CI jobs were unintentionally using the > stable > toolchain from `rust-toolchain.toml` instead of the matrix-specified > toolchain. > This caused clippy to run against the wrong version. > > ### Details > > - Added `RUSTUP_TOOLCHAIN: ${{ matrix.toolchain }}` to the CI > configuration > > ### Additional Context > > - https://discord.com/channels/1070692720437383208/1072879985762762812/1421990770482745415 > - https://rust-lang.github.io/rustup/overrides.html#overrides - [e48aa9e](e48aa9ec09) _(ci)_ Stop publish-alpha from running on forks by @j-g00da in [#1916](https://github.com/ratatui/ratatui/pull/1916) > I can't sleep because every Saturday alpha release fails on my ratatui > fork. This should fix my insomnia. - [b3f3c9b](b3f3c9bfd5) _(ci)_ Disable running release-plz on forked repositories by @orhun in [#1730](https://github.com/ratatui/ratatui/pull/1730) > See https://github.com/jdssl/ratatui/pull/1#issuecomment-2739366609 - [eaa4038](eaa403856e) _(ci)_ Install pre-built binaries for cargo-rdme by @orhun in [#1477](https://github.com/ratatui/ratatui/pull/1477) > `install-action` uses `cargo-binstall` to install the pre-built binaries > of `cargo-rdme` (which was released in > https://github.com/orium/cargo-rdme/releases/tag/v1.4.7). > > This will make the `check-readme` step faster in CI (now takes only 10 > seconds). - [e5e2316](e5e2316451) _(ci)_ Add check for keeping README.md up-to-date by @orhun in [#1473](https://github.com/ratatui/ratatui/pull/1473) - [2ef3583](2ef3583eff) _(ci)_ Replace cargo-make with a custom cargo-xtask by @joshka in [#1461](https://github.com/ratatui/ratatui/pull/1461) > This removes the need for cargo-make and replaces it with a custom xtask > binary. See <https://github.com/matklad/cargo-xtask> for info. > > Rearranges the CI workflow to use the new xtask and simplify which > workflows that run. > > *** - [98df774](98df774d7f) _(core)_ Move core types to ratatui-core by @joshka in [#1460](https://github.com/ratatui/ratatui/pull/1460) > The buffer, layout, style, symbols, text, and the top level of widgets > modules are moved to ratatui-core. This is the first step in > modularizing the library so that the core types can be used in other > projects without the need for the backend / widgets types. > > This helps reduce the need for updating other crates as often due to > semver changes outside of the core types. > > *** - [35eba76](35eba76b4d) _(example)_ Move demo2 to top level folder by @joshka in [#1524](https://github.com/ratatui/ratatui/pull/1524) - [5f57d35](5f57d35234) _(examples)_ Add colors explorer demo app by @orhun in [#1580](https://github.com/ratatui/ratatui/pull/1580) > related #1512 > > Moves the colors examples to apps - [5c021bf](5c021bf344) _(examples)_ Add chart demo app by @orhun in [#1579](https://github.com/ratatui/ratatui/pull/1579) > related #1512 > > Moves the chart example to apps - [9721300](9721300a47) _(examples)_ Add canvas demo app by @orhun in [#1578](https://github.com/ratatui/ratatui/pull/1578) > related #1512 > > This moves the canvas example to the apps and adds some interactivity > via changing the marker by pressing enter. - [a6a1368](a6a1368250) _(examples)_ Add calendar explorer demo app by @orhun in [#1571](https://github.com/ratatui/ratatui/pull/1571) > Related to #1512 > > As discussed, this moves the calendar example from ratatui to app > examples as an "explorer" example. It also adds interactivity where you > can press s to toggle between different styles of calendars. > > *** - [819e92c](819e92cd44) _(examples)_ Add weather demo app by @orhun in [#1567](https://github.com/ratatui/ratatui/pull/1567) > related to #1512 - [b5f7e44](b5f7e44183) _(examples)_ Move async example to apps by @joshka in [#1503](https://github.com/ratatui/ratatui/pull/1503) > Move async example to examples/apps/async as full project. > Simplify a little by removing the need for the github api token. - [17316ec](17316ec5d0) _(github)_ Enable sponsorship button by @orhun in [#1478](https://github.com/ratatui/ratatui/pull/1478) - [d02995f](d02995fda1) _(gitignore)_ Add `.env` to `.gitignore` by @j-g00da in [#1949](https://github.com/ratatui/ratatui/pull/1949) - [b4a71e5](b4a71e5fd5) _(lint)_ Add `std` instead of `core`/`alloc` lints to `ratatui-widgets` by @j-g00da in [#1763](https://github.com/ratatui/ratatui/pull/1763) > Resolves #1761 - [cef617c](cef617cc35) _(lint)_ Add `std` instead of `core`/`alloc` lints to `ratatui-core` by @j-g00da in [#1759](https://github.com/ratatui/ratatui/pull/1759) > Resolves #1752 - [d3f01eb](d3f01ebf6e) _(lint)_ Ensure lint config is correct by @joshka in [#1528](https://github.com/ratatui/ratatui/pull/1528) > - Move lints to workspace manifest > - Add lint config to backend crates > - Fix one small lint error - [9fb0544](9fb054453d) _(release)_ Initialize release-plz by @orhun in [#1550](https://github.com/ratatui/ratatui/pull/1550) > See https://github.com/ratatui/ratatui/pull/1550 - [60a8191](60a81913ed) _(widgets)_ Move crossterm to dev-dependencies by @j-g00da in [#1834](https://github.com/ratatui/ratatui/pull/1834) > Crossterm in widgets is used only in tests. - [2b7ec5c](2b7ec5cb7f) _(widgets)_ Enable calendar widget as default by @orhun in [#1521](https://github.com/ratatui/ratatui/pull/1521) > We now expect that you disable the default features if you want less > dependencies - [d201b8e](d201b8e5dd) _(xtask)_ Check lints for only library targets by @orhun in [#1531](https://github.com/ratatui/ratatui/pull/1531) > Makes it possible to filter workspace packages by their targets. > (e.g. when we want to retrieve all the binary targets / examples, etc.) - [297d264](297d264c6b) _(uncategorized)_ Update maintainers by @orhun in [#2122](https://github.com/ratatui/ratatui/pull/2122) - [91fa249](91fa249cd4) _(uncategorized)_ Remove obsolete doc_auto_cfg feature by @ognis1205 in [#2103](https://github.com/ratatui/ratatui/pull/2103) > The doc_auto_cfg feature was incorporated into the doc_cfg feature > in https://github.com/rust-lang/rust/pull/138907 > > Closes #2102 - [46e7c6c](46e7c6cbbf) _(uncategorized)_ Document rustfmt options by @joshka in [#2055](https://github.com/ratatui/ratatui/pull/2055) - [719badb](719badb5b8) _(uncategorized)_ Skip `alpha` and `beta` tags in `cliff.toml` by @j-g00da in [#2026](https://github.com/ratatui/ratatui/pull/2026) > https://github.com/ratatui/ratatui/pull/2025#issuecomment-3135177683 - [0afb1a9](0afb1a99af) _(uncategorized)_ Ignore `beta` and `rc` tags in `cliff.toml` by @j-g00da in [#2025](https://github.com/ratatui/ratatui/pull/2025) - [5ae224b](5ae224b244) _(uncategorized)_ Prepare for beta release by @j-g00da in [#2022](https://github.com/ratatui/ratatui/pull/2022) - [cfebd68](cfebd68e18) _(uncategorized)_ Fix typo in CONTRIBUTING.md by @kdheepak in [#2001](https://github.com/ratatui/ratatui/pull/2001) > Removes a hanging opening code block: > > ```` > ```suggestion > ```` - [572749f](572749f388) _(uncategorized)_ Update contributing guidelines and add copilot-instructions by @joshka in [#1998](https://github.com/ratatui/ratatui/pull/1998) > See > https://docs.github.com/en/copilot/how-tos/agents/copilot-code-review/using-copilot-code-review > > These instructions will be used by copilot when it performs automated PR > reviews, and helps provide guardrails for our standards. Over time we > might grow these to capture any consistent problems that we start seeing > when reviewing. > > *** - [0148b62](0148b62f0c) _(uncategorized)_ Remove cargo_metadata dep from xtask by @joshka in [#1993](https://github.com/ratatui/ratatui/pull/1993) > Removed due to hard N-2 MSRV requirement, whereas we use a soft N-2 > (only update when necessary). This makes it painful to be able to test > our actual msrv (as the xtask has to be built with the version that its > deps support, while still wanting to check the msrv version, so we'd end > up with 2 versions in the one CI task and this would get annoying to > check). > > See https://github.com/rust-lang/cargo/issues/15746 for more details. > > Partially implements #1820 - mainly as a problem solution rather than a > specific goal to use cargo-hack - [9bc5739](9bc573931c) _(uncategorized)_ Remove clap-cargo from xtask by @joshka in [#1992](https://github.com/ratatui/ratatui/pull/1992) > Removed to avoid needing to bump our msrv. See > https://github.com/rust-lang/cargo/issues/15746\#issuecomment-3071774343 > for more details. - [0e10170](0e10170e19) _(uncategorized)_ Change Borders::NONE to a proper const by @joshka in [#1985](https://github.com/ratatui/ratatui/pull/1985) > https://docs.rs/bitflags/latest/bitflags/#zero-bit-flags > > > Flags with no bits set should be avoided because they interact > > strangely with > > [Flags::contains](https://docs.rs/bitflags/latest/bitflags/trait.Flags.html#method.contains) > and > > [Flags::intersects](https://docs.rs/bitflags/latest/bitflags/trait.Flags.html#method.intersects). > A zero-bit flag is always contained, but is never intersected. The names > of zero-bit flags can be parsed, but are never formatted. > > Removing this simplifies the manual Debug impl that previously had to > check for Borders::NONE and now does not. - [8e3bd11](8e3bd11d60) _(uncategorized)_ Add svg logo asset by @LitoMore in [#1967](https://github.com/ratatui/ratatui/pull/1967) > Added a shields.io style svg logo and a nicer version of the original logo. > The simplified icon will be added and available directly from shields.io via: > > - https://github.com/simple-icons/simple-icons/pull/13593 - [92bb9b2](92bb9b2219) _(uncategorized)_ Remove `Title` references by @j-g00da in [#1943](https://github.com/ratatui/ratatui/pull/1943) - [d6647db](d6647db744) _(uncategorized)_ Remove some allow attributes for fixed clippy bugs by @joshka in [#1944](https://github.com/ratatui/ratatui/pull/1944) - [3f48bde](3f48bde3c6) _(uncategorized)_ Remove OpenSSL license by @joshka in [#1942](https://github.com/ratatui/ratatui/pull/1942) > Only keep licenses in the allow list that are actually used - [4c86513](4c86513790) _(uncategorized)_ Remove block::Title by @joshka in [#1926](https://github.com/ratatui/ratatui/pull/1926) > The title alignment is better expressed in the `Line` as this fits more > coherently with the rest of the library. > > BREAKING CHANGES: > > - `widgets::block` is no longer exported > - `widgets::block::Title` no longer exists > - `widgets::block::Position` is now `widgets::TitlePosition` > - `Block::title()` now accepts `Into::<Line>` instead of `Into<Title>` > - `BlockExt` is now exported at widgets::`BlockExt` > > Closes:https://github.com/ratatui/ratatui/issues/738 - [272f5c0](272f5c05dc) _(uncategorized)_ Fix new lints by @joshka in [#1922](https://github.com/ratatui/ratatui/pull/1922) - [770cb7c](770cb7c3c3) _(uncategorized)_ Add tests for combining list styles by @joshka in [#1884](https://github.com/ratatui/ratatui/pull/1884) - [dbfb2c3](dbfb2c3399) _(uncategorized)_ Upgrade to Rust Edition 2024 by @MatrixFrog in [#1863](https://github.com/ratatui/ratatui/pull/1863) > https://doc.rust-lang.org/edition-guide/rust-2024/index.html > > Fixes #1727 - [7cb35d4](7cb35d4be1) _(uncategorized)_ Update to Rust version 1.85.0 by @MatrixFrog in [#1860](https://github.com/ratatui/ratatui/pull/1860) > This is a small step toward fixing #1727 - [a07f5be](a07f5bec20) _(uncategorized)_ Move dependency management to workspace by @joshka in [#1858](https://github.com/ratatui/ratatui/pull/1858) > Move all dependency management to the workspace level. This makes it > easier to manage dependencies across multiple crates in the workspace. > > This also changes the versions of each dependency to track based on the > semver compatible version of the dependency (e.g. 0.1 instead of 0.1.0 > or 2.9 instead of 2.9.0 to avoid having to regularly update the toml > files and to communicate that Ratatui will still generally work with > versions of the dependencies that are not the fully latest version. The > exact version of the dependencies is still tracked in the Cargo.lock > file. > > Several dependencies that are fairly stable are changed to track a less > specific version (e.g. serde 1 instead of 1.0.x). > > The following dependencies are updated to their latest versions: > > - bitflags (2.3 -> 2.9) > - strum (0.26 -> 0.27) > - strum_macros (0.26 -> 0.27) > - all other semver compatible updates - [1874b9d](1874b9dd55) _(uncategorized)_ Move time to dev-dependencies by @j-g00da in [#1835](https://github.com/ratatui/ratatui/pull/1835) - [d88cd29](d88cd29079) _(uncategorized)_ Add 'const' to functions where possible. by @MatrixFrog in [#1802](https://github.com/ratatui/ratatui/pull/1802) > The Clippy check for this (missing_const_for_fn) is already enabled, but > catches more cases in upcoming toolchain versions. > > This is part of the work to unblock #1727 - [bb06889](bb068892c9) _(uncategorized)_ Fix io_other_error clippy lints by @joshka in [#1756](https://github.com/ratatui/ratatui/pull/1756) > Pre-emptive fix for new lint to be added in 1.87 (currently in beta). > > https://rust-lang.github.io/rust-clippy/master/index.html\#io_other_error - [0f80c5e](0f80c5e87e) _(uncategorized)_ Use expect() instead of allow() for lint overrides by @cgzones in [#1786](https://github.com/ratatui/ratatui/pull/1786) [**breaking**] > BREAKING CHANGE:MSRV is now 1.81 - [fe8577c](fe8577c070) _(uncategorized)_ Remove paste dependency by @joshka in [#1713](https://github.com/ratatui/ratatui/pull/1713) > The paste crate is no longer maintained. Replaces the usages of this in > the Stylize declarative macros with hard coded values. These macros are > internal implementation detail to ratatui and so the changes should have > no impact on users. > > Fixes:https://github.com/ratatui/ratatui/issues/1712 - [255e466](255e4661a8) _(uncategorized)_ Cargo update - pull in fixed version of ring crate by @joshka in [#1710](https://github.com/ratatui/ratatui/pull/1710) - [f05feac](f05feac337) _(uncategorized)_ Sort dependencies in Cargo.toml by @canac in [#1662](https://github.com/ratatui/ratatui/pull/1662) - [7eab88f](7eab88fe9a) _(uncategorized)_ Remove unused deps by @joshka in [#1661](https://github.com/ratatui/ratatui/pull/1661) - [37a1c6f](37a1c6f89b) _(uncategorized)_ Remove some examples by @orhun in [#1645](https://github.com/ratatui/ratatui/pull/1645) - [6f21319](6f213191ef) _(uncategorized)_ Rename examples with clashing names by @joshka in [#1597](https://github.com/ratatui/ratatui/pull/1597) > These will eventually be moved / consolidated elsewhere, but this clears > the warnings while building for now. - [11cbb2b](11cbb2ba87) _(uncategorized)_ Use cargo xtask for bacon clippy command by @joshka in [#1592](https://github.com/ratatui/ratatui/pull/1592) - [b544e39](b544e394c9) _(uncategorized)_ Use clap instead of argh for demo example by @joshka in [#1591](https://github.com/ratatui/ratatui/pull/1591) - [9a54198](9a541981b8) _(uncategorized)_ Make source files non-executable by @orhun in [#1577](https://github.com/ratatui/ratatui/pull/1577) > ```bash > find . -type f -not -path './.git/*' -not -name '*.bash' -exec chmod 644 {} + > ``` > > fixes #1576 - [357ae7e](357ae7e251) _(uncategorized)_ Move terminal types to ratatui-core by @joshka in [#1530](https://github.com/ratatui/ratatui/pull/1530) [**breaking**] > - Move Terminal, TerminalOptions, ViewPort, CompletedFrame, Frame to > ratatui-core crate > - Move render_widget_ref() and render_stateful_widget_ref() to extension > trait (FrameExt) due as the Ref types are unstable and kept in the > main lib instead of -core > - Fix rustdoc errors / feature config issues > > BREAKING CHANGE:to call `Frame::render_widget_ref()` or > > `Frame::render_stateful_widget_ref()` you now need to import the > FrameExt trait from `ratatui::widgets` and enable the > `unstable-widget-ref` feature. - [21e62d8](21e62d84c2) _(uncategorized)_ Move the demo example to main folder by @joshka in [#1523](https://github.com/ratatui/ratatui/pull/1523) > Add a top level examples folder for more app-ish examples > Move the demo example into the top level folder. > > *** - [fbf6050](fbf6050c86) _(uncategorized)_ Prepare alpha modularization release by @joshka in [#1525](https://github.com/ratatui/ratatui/pull/1525) > This is the first modularization -alpha release. It captures the changes > necessary to manual publish. And ensures all the crates are properly > setup and to set a baseline for comparison in future release checks etc. > > This does not update / check the git-cliff setup / changelog > > Part of: #1388 - [e4e95bc](e4e95bcecf) _(uncategorized)_ Remove --color always flags from bacon.toml by @joshka in [#1502](https://github.com/ratatui/ratatui/pull/1502) > No longer necessary as of bacon 3.3 - [a41c97b](a41c97b413) _(uncategorized)_ Move unstable widget refs to ratatui by @joshka in [#1491](https://github.com/ratatui/ratatui/pull/1491) [**breaking**] > These are less stable than the non-ref traits as we have not yet > committed to the exact API. This change moves them to ratatui from > ratatui-core. > > To facilitate this: > > - implementations of WidgetRef for all internal widgets are removed and > replaced with implementations of Widget for references to those > widgets. > - Widget is now implemented for Option<W> where W: Widget, allowing for > rendering of optional widgets. > - The blanket implementation of Widget for WidgetRef is reversed, to be > a blanket implementation of WidgetRef for all &W where W: Widget. > > BREAKING CHANGE:implementations of WidgetRef no longer have a blanket > implementation of Widget, so Widgets should generally implement the > Widget trait on a reference to the widget rather than implementing > WidgetRef directly. This has the advantage of not requiring unstable > features to be enabled. > > Part of: https://github.com/ratatui/ratatui/issues/1388 - [e7085e3](e7085e3a3e) _(uncategorized)_ Move widgets into ratatui-widgets crate by @joshka in [#1474](https://github.com/ratatui/ratatui/pull/1474) > All the widgets now live in their own ratatui-widgets crate, but are re-exported in the main ratatui crate. > This makes it easier to use portions of the ratatui library and is part of the effort to modularize > > Part of: #1388 > > *** - [f1d0a18](f1d0a18375) _(uncategorized)_ Move ratatui crate into workspace folder by @joshka in [#1459](https://github.com/ratatui/ratatui/pull/1459) > This is the first step towards modularization. Handling the move > as a separate step rather than combining it should make it easier > to rebase other PRs when necessary. > > *** - [55fb2d2](55fb2d2e56) _(uncategorized)_ Update repo links to ratatui instead of ratatui-org by @joshka in [#1458](https://github.com/ratatui/ratatui/pull/1458) ### Continuous Integration - [c01b7d4](c01b7d43ea) _(uncategorized)_ Remove old release workflows by @joshka in [#2015](https://github.com/ratatui/ratatui/pull/2015) - [02ca587](02ca5870c5) _(uncategorized)_ Add environment to release workflow by @joshka in [#1983](https://github.com/ratatui/ratatui/pull/1983) > https://github.com/rust-lang/crates.io/issues/11564#issuecomment-3066696820 - [821611f](821611f76f) _(uncategorized)_ Use trusted publishing by @joshka in [#1981](https://github.com/ratatui/ratatui/pull/1981) > https://blog.rust-lang.org/2025/07/11/crates-io-development-update-2025-07/ > > https://crates.io/docs/trusted-publishing - [1f0c2ee](1f0c2ee18e) _(uncategorized)_ Audit github workflows with zizmor by @joshka in [#1961](https://github.com/ratatui/ratatui/pull/1961) > Fixes https://github.com/ratatui/ratatui/issues/1950 - [a0746ba](a0746bad7e) _(uncategorized)_ Add job to check no-std build by @joshka in [#1851](https://github.com/ratatui/ratatui/pull/1851) > Uses x86_64-unknown-none as an arbitrary target that does not support > the std library > > Resolves:https://github.com/ratatui/ratatui/issues/1843 - [5a3be12](5a3be12ebd) _(uncategorized)_ Run clippy using rust stable and beta by @joshka in [#1757](https://github.com/ratatui/ratatui/pull/1757) > This makes it possible to pre-emptively catch upcoming clippy issues. We > should not block PRs on these generally (unless the PR introduces a > valid clippy warning), so the workflow is set up to not fail on beta. - [e7defb3](e7defb36de) _(uncategorized)_ Remove bencher workflows by @joshka in [#1719](https://github.com/ratatui/ratatui/pull/1719) > These actions are currently unused as we haven't > invested the time necessary to understand how best > to use them. We can always re-add them later if we > find them useful. - [9398a25](9398a2550a) _(uncategorized)_ Add workflow_dispatch trigger for release-plz by @joshka in [#1693](https://github.com/ratatui/ratatui/pull/1693) - [57c2326](57c2326574) _(uncategorized)_ Run cargo-deny directly rather than via action by @joshka in [#1621](https://github.com/ratatui/ratatui/pull/1621) > Improves CI time - [4a871f9](4a871f993e) _(uncategorized)_ Refactor xtask / toml formatting by @joshka in [#1602](https://github.com/ratatui/ratatui/pull/1602) > - format toml files using taplo > - add toml formatting check to CI > - use xtask consistently from bacon > - refactor xtask commands to take params instead of multiple commands ### Reverted Commits - [cace1e0](cace1e099c) _(release)_ Prepare for beta release by @orhun in [#2117](https://github.com/ratatui/ratatui/pull/2117) > This reverts commit5ae224b244so that > `release-plz` is being triggered again. > > See https://github.com/ratatui/ratatui/pull/2022#issuecomment-3349094310 > for rationale. </details> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Orhun Parmaksız <orhunparmaksiz@gmail.com>
81 lines
2.5 KiB
TOML
81 lines
2.5 KiB
TOML
[package]
|
|
name = "ratatui-widgets"
|
|
description = "A collection of Ratatui widgets for building terminal user interfaces using Ratatui."
|
|
# Note that this started at 0.3.0 as there was a previous crate using the name `ratatui-widgets`.
|
|
# <https://github.com/joshka/ratatui-widgets/issues/46>
|
|
version = "0.3.0-beta.0"
|
|
readme = "README.md"
|
|
authors.workspace = true
|
|
documentation.workspace = true
|
|
repository.workspace = true
|
|
homepage.workspace = true
|
|
keywords.workspace = true
|
|
categories.workspace = true
|
|
license.workspace = true
|
|
exclude.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
|
|
[package.metadata.docs.rs]
|
|
all-features = true
|
|
cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples"]
|
|
rustdoc-args = ["--cfg", "docsrs"]
|
|
|
|
[features]
|
|
default = ["all-widgets"]
|
|
|
|
## enables std
|
|
std = ["time/local-offset"]
|
|
|
|
## enables serialization and deserialization of style and color types using the [`serde`] crate.
|
|
## This is useful if you want to save themes to a file.
|
|
serde = ["dep:serde", "ratatui-core/serde"]
|
|
|
|
#! Widgets that add dependencies are gated behind feature flags to prevent unused transitive
|
|
#! dependencies. The available features are:
|
|
|
|
## enables all widgets.
|
|
all-widgets = ["calendar"]
|
|
|
|
## enables the [`calendar`](calendar) widget module and adds a dependency on [`time`].
|
|
calendar = ["dep:time"]
|
|
|
|
## Enable all unstable features.
|
|
unstable = ["unstable-rendered-line-info"]
|
|
|
|
## Enables the [`Paragraph::line_count`](paragraph::Paragraph::line_count)
|
|
## [`Paragraph::line_width`](paragraph::Paragraph::line_width) methods
|
|
## which are experimental and may change in the future.
|
|
## See [Issue 293](https://github.com/ratatui/ratatui/issues/293) for more details.
|
|
unstable-rendered-line-info = []
|
|
|
|
[dependencies]
|
|
bitflags.workspace = true
|
|
document-features = { workspace = true, optional = true }
|
|
hashbrown.workspace = true
|
|
indoc.workspace = true
|
|
instability.workspace = true
|
|
itertools.workspace = true
|
|
line-clipping.workspace = true
|
|
ratatui-core = { workspace = true }
|
|
serde = { workspace = true, optional = true }
|
|
strum.workspace = true
|
|
time = { workspace = true, optional = true }
|
|
unicode-segmentation.workspace = true
|
|
unicode-width.workspace = true
|
|
|
|
[dev-dependencies]
|
|
color-eyre.workspace = true
|
|
crossterm.workspace = true
|
|
pretty_assertions.workspace = true
|
|
ratatui = { path = "../ratatui" }
|
|
rstest.workspace = true
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
# Adding a single example is enough for activating rustdoc-scrape-examples
|
|
[[example]]
|
|
name = "barchart"
|
|
doc-scrape-examples = true
|