I am happy to announce the release of ratatui_ruby v0.4.0.
This is a major feature release.
It brings full parity with Ratatui 0.30.
Every widget now exposes the full upstream API.
What is new:
* **Ratatui 0.30.**
The underlying library is now Ratatui 0.30.0.
Layout caching is enabled by default for faster rendering.
* **RatatuiRuby.run.**
The new lifecycle manager handles terminal setup and teardown.
It yields control of the event loop to you.
This replaces `main_loop`, which is now removed.
* **Hex Colors.**
Style accepts hex strings like "#ff0000" for foreground and background.
True color terminals render 24-bit color.
* **Duck-Typed Numerics.**
Numeric parameters accept BigDecimal, Rational, and custom types.
Any object responding to `to_f` or `to_int` works.
* **Draw Command API.**
Custom widgets now return Draw commands.
`render(area)` returns an array of `Draw.string` and `Draw.cell`.
Ruby never holds pointers to Rust memory.
Use-after-free bugs are eliminated by design.
* **Rich Text.**
`Text::Span` and `Text::Line` enable word-level styling.
Build paragraphs with inline formatting.
* **Block Enhancements.**
Borders now support six types: plain, rounded, double, thick, quadrant_inside, quadrant_outside.
Custom border characters are available through `border_set`.
Multiple titles with individual alignment and position.
Directional padding via integer or array.
Nested `children` for composable structures.
* **New Widgets.**
`RatatuiLogo` renders the Ratatui logo.
`RatatuiMascot` renders Ferris.
* **LineGauge Widget.**
Compact, character-based progress bars with customizable fill symbols.
* **Layout Improvements.**
`Constraint.fill` distributes remaining space proportionally.
`Constraint.max` caps maximum size.
`Flex::SpaceEvenly` distributes space evenly around items.
* **Widget API Expansion.**
Tables gain `column_highlight_style`, `cell_highlight_style`, and `selected_column`.
Lists gain `scroll_padding`, `repeat_highlight_symbol`, and `direction`.
Scrollbars gain full styling and all four orientation variants.
Calendars gain `show_month_header`, `show_weekdays_header`, and event highlighting.
Charts gain `legend_position` and full dataset styling.
Gauges gain `gauge_style` and explicit unicode toggle.
Sparklines gain `direction`, `bar_set`, and absent value handling.
BarCharts gain grouped bar support and custom bar characters.
* **Typed Events.**
`poll_event` returns typed objects: `Event::Key`, `Event::Mouse`, `Event::Resize`, `Event::Paste`, `Event::FocusGained`, `Event::FocusLost`.
Predicate methods like `key?` and `ctrl?` simplify handlers.
* **Alpine Linux.**
Builds now work on musl targets through proper static linking.
Breaking changes:
- `main_loop` removed. Use `RatatuiRuby.run` with explicit loop.
- `poll_event` returns typed objects, not hashes.
- `with_test_terminal` defaults to 80x24.
- `Calendar::show_month_header` defaults to false.
- `Gauge::style` no longer defaults to Style.default.
- Custom widget `render` returns Draw commands, not buffer writes.
Read the full changelog:
https://git.sr.ht/~kerrick/ratatui_ruby/tree/v0.4.0/item/CHANGELOG.md
Gem: https://rubygems.org/gems/ratatui_ruby
Source: https://git.sr.ht/~kerrick/ratatui_ruby