| Crates.io | ratatui-macros |
| lib.rs | ratatui-macros |
| version | 0.7.0-alpha.4 |
| created_at | 2024-01-05 20:28:33.256628+00 |
| updated_at | 2025-06-30 11:56:52.547965+00 |
| description | Macros for Ratatui |
| homepage | |
| repository | https://github.com/ratatui/ratatui |
| max_upload_size | |
| id | 1090414 |
| size | 69,046 |
ratatui-macros is a Rust crate that provides easy-to-use macros for simplifying boilerplate
associated with creating UI using Ratatui.
This is an experimental playground for us to explore macros that would be useful to have in Ratatui proper.
Texts, Lines, and Spans.Layouts with Constraints and directions.Rows and Cells.Add ratatui-macros as a dependency in your Cargo.toml:
cargo add ratatui-macros
Then, import the macros in your Rust file:
use ratatui_macros::{constraint, constraints, horizontal, line, row, span, text, vertical};
The [span!] macro creates raw or styled Spans.
let name = "world!";
let raw_greeting = span!("hello {name}");
let styled_greeting = span!(Style::new().green(); "hello {name}");
let colored_greeting = span!(Color::Green; "hello {name}");
let modified_greeting = span!(Modifier::BOLD; "hello {name}");
The [line!] macro creates a Line that contains a sequence of Spans. It is similar to
the [vec!] macro. Each element is converted into a Span using [Into::into].
let name = "world!";
let line = line!["hello", format!("{name}")];
let line = line!["hello ", span!(Color::Green; "{name}")];
let line = line!["Name: ".bold(), "Remy".italic()];
let line = line!["bye"; 2];
The [text!] macro creates a Text that contains a sequence of Line. It is similar to
the [vec!] macro. Each element is converted to a Line using [Into::into].
let name = "world!";
let text = text!["hello", format!("{name}")];
let text = text!["bye"; 2];
let name = "Bye!!!";
let text = text![line!["hello", "world".bold()], span!(Modifier::BOLD; "{name}")];
If you are new to Ratatui, check out the Layout concepts article on the Ratatui website before proceeding.
The [constraints!] macro defines an array of Constraints:
let layout = Layout::horizontal(constraints![==50, ==30%, >=3, <=1, ==1/2, *=1]);
The [constraint!] macro defines individual Constraints:
let layout = Layout::horizontal([constraint!(==50)]);
The [vertical!] and [horizontal!] macros are a shortcut to defining a Layout:
let [top, main, bottom] = vertical![==1, *=1, >=3].areas(area);
let [left, main, right] = horizontal![>=20, *=1, >=20].areas(main);
The [row!] macro creates a Row for a Table that contains a sequence of Cells. It
is similar to the [vec!] macro.
let rows = [
row!["hello", "world"],
row!["goodbye", "world"],
row![
text!["line 1", line!["Line", "2".bold()]],
span!(Modifier::BOLD; "Cell 2"),
],
];
let table = Table::new(rows, constraints![==20, *=1]);
Contributions to ratatui-macros are welcome! Whether it's submitting a bug report, a feature
request, or a pull request, all forms of contributions are valued and appreciated.
ratatui-macros is part of the Ratatui workspace that was modularized in version 0.30.0.
This crate provides declarative macros to reduce boilerplate when working with
Ratatui.
When to use ratatui-macros:
When to use the main ratatui crate:
macros feature is enabled)For detailed information about the workspace organization, see ARCHITECTURE.md.