Expand description
§Tuiuiu - Zero-dependency Terminal UI Framework
A minimal, reactive terminal UI framework with signal-based reactivity, flexbox layout, and zero external dependencies.
§Quick Start
use tuiuiu::prelude::*;
fn counter() -> impl Component {
let (count, set_count) = create_signal(0);
use_input(move |key| {
match key {
Key::Up => set_count.update(|c| *c += 1),
Key::Down => set_count.update(|c| *c -= 1),
Key::Escape => app::exit(),
_ => {}
}
});
Box::new()
.flex_direction(FlexDirection::Column)
.padding(1)
.border(BorderStyle::Round)
.children([
Text::new("🐦 Tuiuiu Counter")
.color(Color::Cyan)
.bold(true),
Text::new(move || format!("Count: {}", count.get())),
Text::new("↑/↓: change • Esc: exit")
.color(Color::Gray)
.dim(true),
])
}
fn main() {
let app = render(counter);
app.wait_until_exit();
}§Architecture
Tuiuiu follows the Atomic Design methodology:
- Core: Signals, Layout engine, Renderer, Event system
- Primitives: Box, Text, Spacer, Newline, Fragment, Divider
- Atoms: Button, TextInput, Switch, Slider, Spinner, ProgressBar
- Molecules: Select, Table, Tabs, Tree, Calendar, Charts
- Organisms: Modal, CommandPalette, DataTable, FileManager
- Templates: AppShell, Page, Header, StatusBar
§Features
full(default): All componentscore: Only core functionalityprimitives: Core + primitivesatoms: Primitives + atomsmolecules: Atoms + moleculesorganisms: Molecules + organismstemplates: Organisms + templatesthemes: Theme systemmcp: Model Context Protocol serverdev-tools: Development and debugging tools
Re-exports§
pub use core::signals::batch;pub use core::signals::create_effect;pub use core::signals::create_memo;pub use core::signals::create_signal;pub use core::signals::untrack;pub use core::signals::Effect;pub use core::signals::Memo;pub use core::signals::ReadSignal;pub use core::signals::WriteSignal;pub use core::layout::AlignContent;pub use core::layout::AlignItems;pub use core::layout::AlignSelf;pub use core::layout::FlexDirection;pub use core::layout::FlexWrap;pub use core::layout::JustifyContent;pub use core::layout::LayoutNode;pub use core::layout::calculate_layout;pub use core::renderer::OutputBuffer;pub use core::renderer::RenderContext;pub use core::renderer::render_to_string;pub use core::app::App;pub use core::app::RenderOptions;pub use core::app::render;pub use core::app::render_once;pub use core::terminal::Key;pub use core::terminal::KeyModifiers;pub use core::terminal::MouseButton;pub use core::terminal::MouseEvent;pub use core::terminal::Terminal;pub use core::terminal::TerminalEvent;pub use core::event::Event;pub use core::event::EventEmitter;pub use core::event::EventHandler;pub use core::event::EventPhase;pub use core::focus::FocusManager;pub use core::focus::Focusable;pub use core::focus::FocusZoneState;pub use core::tick::Tick;pub use core::tick::get_tick;pub use core::tick::on_tick;pub use core::tick::start_tick;pub use core::tick::stop_tick;pub use core::tick::pause_tick;pub use core::tick::resume_tick;pub use core::tick::get_frame;pub use core::tick::oscillate;pub use hooks::use_state;pub use hooks::use_effect;pub use hooks::use_memo;pub use hooks::use_input;pub use hooks::use_mouse;pub use hooks::use_focus;pub use hooks::use_app;pub use hooks::use_terminal_size;pub use hooks::use_fps;pub use hooks::use_hotkeys;pub use utils::ansi::strip_ansi;pub use utils::ansi::colorize;pub use utils::ansi::style;pub use utils::ansi::Color;pub use utils::ansi::Style;pub use utils::text::measure_text;pub use utils::text::visible_width;pub use utils::text::wrap_text;pub use utils::text::truncate_text;pub use utils::text::slice_ansi;pub use utils::cursor::show_cursor;pub use utils::cursor::hide_cursor;pub use utils::cursor::move_cursor;pub use utils::cursor::save_cursor;pub use utils::cursor::restore_cursor;pub use utils::border::BorderStyle;pub use utils::border::BorderChars;pub use utils::border::BORDER_STYLES;pub use primitives::BoxComponent;pub use primitives::Text;pub use primitives::Spacer;pub use primitives::Newline;pub use primitives::Fragment;pub use primitives::Divider;pub use primitives::Canvas;pub use primitives::When;pub use primitives::Each;pub use primitives::Transform;pub use primitives::Static;pub use primitives::Slot;pub use atoms::Button;pub use atoms::TextInput;pub use atoms::Switch;pub use atoms::Slider;pub use atoms::Spinner;pub use atoms::ProgressBar;pub use atoms::Timer;pub use atoms::Checkbox;pub use atoms::Badge;pub use atoms::Link;pub use atoms::Tooltip;pub use atoms::Icon;pub use molecules::Select;pub use molecules::MultiSelect;pub use molecules::RadioGroup;pub use molecules::Autocomplete;pub use molecules::Table;pub use molecules::Tabs;pub use molecules::Tree;pub use molecules::Calendar;pub use molecules::CodeBlock;pub use molecules::Markdown;pub use molecules::Sparkline;pub use molecules::BarChart;pub use molecules::LineChart;pub use molecules::Gauge;pub use molecules::Heatmap;pub use organisms::Modal;pub use organisms::CommandPalette;pub use organisms::DataTable;pub use organisms::FileManager;pub use organisms::SplitPanel;pub use organisms::ScrollArea;pub use organisms::Grid;pub use organisms::OverlayStack;pub use organisms::Notification;pub use organisms::Toast;pub use templates::AppShell;pub use templates::Page;pub use templates::Header;pub use templates::StatusBar;pub use templates::Sidebar;pub use templates::VStack;pub use templates::HStack;pub use templates::Center;pub use templates::FullScreen;pub use templates::Container;pub use themes::Theme;pub use themes::ThemeMode;pub use themes::use_theme;pub use themes::get_theme;pub use themes::set_theme;pub use themes::create_theme;pub use themes::dark_theme;pub use themes::light_theme;pub use themes::monokai_theme;pub use themes::dracula_theme;pub use themes::nord_theme;
Modules§
- atoms
- Atoms - Smallest functional UI components
- core
- Core module - The heart of Tuiuiu
- hooks
- Hooks - Reactive state and effects
- mcp
- Mcp - Stub module (to be implemented)
- molecules
- Molecules - Composite Components
- organisms
- Organisms - Stub module (to be implemented)
- prelude
- Commonly used types and traits for convenient importing.
- primitives
- Primitives - Basic building blocks
- templates
- Templates - Stub module (to be implemented)
- themes
- Themes - Stub module (to be implemented)
- utils
- Utilities
Structs§
- Version
Info - Version information structure.
Functions§
- version
- Returns the library version.
- version_
info - Returns detailed version information.