| Crates.io | reactive_tui |
| lib.rs | reactive_tui |
| version | 0.0.5 |
| created_at | 2025-08-03 16:25:06.78442+00 |
| updated_at | 2025-08-04 22:47:45.044302+00 |
| description | Revolutionary CSS-styled Terminal User Interface framework with Rust/TypeScript hybrid architecture |
| homepage | https://reactive-tui.com |
| repository | https://github.com/entrepeneur4lyf/reactive-tui |
| max_upload_size | |
| id | 1779862 |
| size | 9,871,523 |
![]() |
CSS-Styled Cross Language Terminal User Interface Framework |
|---|
Reactive TUI enables terminal application development by bringing modern web paradigms to the terminal. Unlike traditional TUI frameworks that require complex manual positioning and styling, Reactive TUI provides:
Traditional TUI ❌:
// Complex manual positioning and styling
let mut rect = layout[0];
rect.x += 2;
rect.y += 1;
rect.width -= 4;
rect.height -= 2;
// ... pages of manual layout code
Reactive TUI ✅:
// Modern, declarative approach
let button = button("save-btn", |config| {
config.text("Save File")
.variant("primary")
.class("w-full")
.on_click("save_action")
});
crate add reactive-tui
npm install reactive-tui-ts
npm install reactive-tui
use reactive_tui::prelude::*;
use reactive_tui::widgets::*;
fn main() -> Result<()> {
let app = TuiApp::new("My App");
// Create widgets with the WidgetFactory pattern
let header = button("header-btn", |c| {
c.text("🚀 Reactive TUI Demo")
.variant("primary")
.class("w-full p-2")
});
let form = input("username", |c| {
c.placeholder("Enter username")
.required(true)
.class("border rounded")
});
let modal = modal("confirm", |c| {
c.title("Confirm Action")
.confirm("Save changes?", "Yes", "No")
.class("modal-center")
});
// CSS-styled layout
app.load_css(r#"
.container {
display: flex;
flex-direction: column;
gap: 1rem;
padding: 2rem;
height: 100vh;
}
.w-full { width: 100%; }
.border { border: 1px solid #ccc; }
.rounded { border-radius: 4px; }
"#);
app.run()
}
import { createApp, button, input, modal } from 'reactive-tui-ts';
const app = createApp({
title: 'My TUI App',
css: `
.container {
display: flex;
gap: 1rem;
padding: 2rem;
}
`,
component: () =>
button('main-btn', config =>
config.text('Click Me!')
.variant('success')
.class('btn-large')
)
});
await app.run();
const { JsTuiApp, TuiUtils } = require('reactive-tui');
const app = new JsTuiApp();
app.setTitle('My TUI App');
const button = TuiUtils.button('main-btn');
button.setText('Click Me!');
button.setVariant('success');
app.setComponent(button);
app.start();
Eliminate boilerplate with our revolutionary factory pattern:
// Old way - verbose and error-prone
let mut button = Button::new("my-button");
button.set_text("Click Me");
button.set_variant(ButtonVariant::Primary);
button.add_css_class("btn-large");
button.set_click_handler(|_| { /* handler */ });
// New way - concise and type-safe
let button = button("my-button", |c| {
c.text("Click Me")
.variant("primary")
.class("btn-large")
.on_click("handle_click")
});
Real CSS that works in the terminal:
.dashboard {
display: grid;
grid-template-areas:
"header header"
"sidebar main";
grid-template-columns: 200px 1fr;
gap: 1rem;
height: 100vh;
}
@media (max-width: 80ch) {
.dashboard {
grid-template-areas:
"header"
"main";
grid-template-columns: 1fr;
}
}
Form Controls: Button, Input, Checkbox, Radio, Select, Slider, Switch
Layout: Grid, Flexbox, Tabs, Modal, Accordion, Bar
Data: DataTable, Tree, List, Progress, Spinner
Content: RichText, Textarea, Viewport
Advanced: Animation, Toast, FormValidator, Plugin System
All widgets support:
# Widget showcase
cargo run --example widget_showcase
# Complex dashboard
cargo run --example dashboard_demo
# Form validation
cargo run --example form_demo
# Real-time data
cargo run --example data_streaming
┌──────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ TypeScript SDK │ │ NPM Package │ │ Rust Crate │
│ reactive-tui-ts │ │ reactive-tui │ │ reactive-tui │
│ ──────────────── │ │ ────────────── │ │ ────────────── │
│ • Enhanced APIs │ │ • NAPI Bindings │ │ • Core Engine │
│ • Widget Factory │◄──►│ • FFI Layer │◄──►│ • Layout System │
│ • Type Definitions │ │ • Memory Bridge │ │ • Widget Library │
│ • Developer Tools │ │ • Event Bridge │ │ • CSS Engine │
└──────────────────────┘ └─────────────────────┘ └─────────────────────┘
Three-Package Architecture:
reactive-tui (Rust) - High-performance core engine and widget systemreactive-tui (NPM) - NAPI-rs bindings for JavaScript integrationreactive-tui-ts (NPM) - Enhanced TypeScript SDK with developer experience features |We welcome contributions! Check out our Contributing Guide.
This project is dual-licensed under your choice of:
For large enterprises ($500k+ revenue) and organizations requiring additional rights or support, a commercial license is available. The commercial license includes:
Contact sales@reactive-tui.dev for commercial licensing inquiries.
Made with ❤️ by the Reactive TUI team - Shawn McAllister @entrepreneur4lyf and Claude Code w/ @claudeai
Website • Documentation • Examples • Discord
Star us if you find Reactive TUI useful! ⭐