github-actions[bot]
|
fbe6549d05
|
chore: release beta (#2162)
## 🤖 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 commit 5ae224b244 so 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>
|
2025-11-01 02:22:55 +03:00 |
|