AppCUI-rs

AppCUI-rs es una biblioteca rápida, multiplataforma y escrita en Rust para construir modernas interfaces de usuario basadas en texto (TUI) con widgets avanzados, temas y soporte completo de Unicode—una alternativa a ncurses y otros frameworks de UI para terminal.
✨ Características
- [x] múltiples controles listos para usar (botones, etiquetas, cuadros de texto, casillas de verificación, botones de opción, listas, vistas de árbol, cuadros combinados, selectores de fecha/hora, selectores de color, pestañas, acordeones, etc.). La lista completa de controles se encuentra aquí
- [x] potente sistema de diseño que permite posicionar controles usando coordenadas absolutas, relativas, acoplamiento, alineación, anclas o posiciones de pivote (ver más aquí)
- [x] menús y barras de herramientas
- [x] soporte multiplataforma (Windows vía API y terminal virtual, Linux vía ncurses, macOS vía termios)
- [x] soporte de multihilo para permitir tareas en segundo plano
- [x] temporizadores
- [x] soporte de ratón
- [x] soporte de portapapeles
- [x] temas de color
- [x] soporte para caracteres Unicode
- [x] diálogos predefinidos (cuadro de mensaje, cuadro de entrada, selector de color, diálogos de guardar y abrir, navegador de carpetas, etc.)
- [x] soporte de color verdadero (24 bits por píxel) para terminales que lo soporten.
📸 Capturas de pantalla

👉 ¡Consulta la Galería para ver demostraciones completas de todos los controles!
🖥️ Backends
AppCUI admite varios backends dependiendo del sistema operativo:
- Consola de Windows - basada en la API de bajo nivel Win32, diseñada para la consola clásica de Windows
- Windows VT - basada en secuencias ANSI, diseñada para terminales virtuales modernos de Windows
- NCurses - basada en la API NCurses para entornos Linux
- Termios - basada en secuencias ANSI y APIs de bajo nivel para macOS
- Terminal Web - diseñada para implementaciones web (basada en WebGL)
- CrossTerm - basada en el crate crossterm
, habilitada mediante una bandera de característica
🚀 Inicio Rápido
Agrega lo siguiente a tu Cargo.toml:
toml
[dependencies]
appcui = "*"
Luego crea un nuevo proyecto Rust y añade el siguiente código:
rust
use appcui::prelude::*;fn main() -> Result<(), appcui::system::Error> { let mut app = App::new().build()?; let mut win = Window::new( "Test", LayoutBuilder::new().alignment(Alignment::Center).width(30).height(9).build(), window::Flags::Sizeable, ); win.add(Label::new( "Hello World !", LayoutBuilder::new().alignment(Alignment::Center).width(13).height(1).build(), )); app.add_window(win); app.run(); Ok(()) }
O una versión más compacta usando proc-macros:
rs
use appcui::prelude::*;fn main() -> Result<(), appcui::system::Error> { let mut app = App::new().build()?; let mut win = window!("Test,a:c,w:30,h:9"); win.add(label!("'Hello World !',a:c,w:13,h:1")); app.add_window(win); app.run(); Ok(()) }
rust use appcui::prelude::*;Luego ejecuta el proyecto concargo run. Deberías ver una ventana con el títuloTesty el textoHello World !en el centro.🧪 Ejemplos
AppCUI-rs viene con un conjunto de ejemplos para ayudarte a comenzar. Puedes encontrarlos en la carpeta examples, incluyendo:
- Juegos como Tic Tac Toe, Snake, Flappy Bird, Minesweeper, Ram it, PacMan, Ajedrez, Connect Four, 2048, o Tetris
- Utilidades como Calculadora, Visor CSV, Convertidor de temperatura, o un Temporizador
- Animaciones como Matrix, Fractales, o Spiral
- Controles/Widgets como Botón, CheckBox, ComboBox, DatePicker, ListView, TreeView y muchos más.
- Diálogos como Notificación o Entrada
🛠️ Un ejemplo más complejo
Un ejemplo que crea una ventana con un botón que, al ser presionado, incrementa un contador.
// Create a window that handles button events and has a counter #[Window(events = ButtonEvents)] struct CounterWindow { counter: i32 }
impl CounterWindow { fn new() -> Self { let mut w = Self { // set up the window title and position base: window!("'Counter window',a:c,w:30,h:5"), // initial counter is 1 counter: 1 }; // add a single button with the caption "1" (like the counter) w.add(button!("'1',d:b,w:20")); w } } impl ButtonEvents for CounterWindow { // When the button is pressed, this function will be called // with the handle of the button that was pressed // Since we only have one button, we don't need to store its handle // in the struct, as we will receive the handle via the on_pressed method fn on_pressed(&mut self, handle: Handle
fn main() -> Result<(), appcui::system::Error> { // create a new application let mut a = App::new().build()?; // add a new window (of type CounterWindow) to the application a.add_window(CounterWindow::new()); // Run AppCUI framework (this will start the window loop and message passing) a.run(); Ok(()) } ``
🛣️ Hoja de ruta
- [x] Conjunto básico de widgets y soporte para Windows, Linux y macOS
- [x] Soporte para WebGL
- [ ] Soporte para OpenGL / SDL / Vulkan
- [ ] Soporte para TextArea con resaltado de código
🤝 Contribuir
¡Las contribuciones, problemas y solicitudes de funciones son bienvenidas! Consulta CONTRIBUTING.md para comenzar.
Únete a la discusión en GitHub Discussions.
--- Tranlated By Open Ai Tx | Last indexed: 2026-06-13 ---