Skip to content

Repository files navigation

rustui

The simplest terminal UI library designed for Rust. Developed with Rust's ownership model and safety guarantees in mind.

Features

  • Cross-platform: Works on Unix-like systems (Linux, macOS, etc.)
  • Double Buffering: Efficient rendering with differential updates
  • Rich Text Styling: Support for colors, attributes (bold, italic, underline, etc.)
  • Non-blocking Input: Asynchronous keyboard input handling
  • Thread-safe: Multi-threaded rendering and input processing

Quick Start

use rustui::*;use std::{thread, time};constRENDERING_RATE: time::Duration = time::Duration::from_millis(16);// msconstINPUT_CAPTURING_RATE: time::Duration = time::Duration::from_millis(10);// msfnmain() -> Result<(),Box<dyn std::error::Error>>{letmut win = Window::new(false)?;
win.initialize(RENDERING_RATE)?;// Initialize the window and start the rendering threadlet input_rx = InputListener::new(INPUT_CAPTURING_RATE);// Create an input listenerloop{// Check for key pressesifletOk(InputEvent::Key(Key::Char('q'))) = input_rx.try_recv(){break;// Exit the loop if 'q' is pressed}// Draw the frame
win.draw(|canvas| {
canvas.set_named_border("HELLO WORLD",Align::Right,Attr::default(),Color::White,Color::default(),);// Set a named border for the canvas
canvas.set_str(
canvas.width / 2,// Center the text horizontally
canvas.height / 2,"Hello, world! (Press 'q' to quit)",Attr::Bold,// Set text decorationColor::Green,// Set text colorColor::default(),// Set background colorAlign::Center,// Set text alignment to center);})?;
thread::sleep(time::Duration::from_millis(100));// Sleep to prevent high CPU usage}Ok(())}

Example Applications

This repository includes a demo application that showcases the library's capabilities:

Hello World

cargo run --example hello_world

Colors

cargo run --example colors

Inputs

cargo run --example inputs

Tetris

cargo run --example tetris

File Reader

cargo run --example file_reader <file_path>

Platform Support

Currently supports Unix-like systems:

  • Linux
  • macOS
  • BSD variants

Windows support may be added in future versions.

Contributing

We sincerely appreciate your contribution to this crate. Please be sure to read the guidelines before contributing.

Development

# Clone the repository
git clone <repository-url>cd rustui
# Build the library
cargo build
# Run tests
cargo test# Run clippy
cargo clippy --all-targets --all-features -- -D warnings
# Run formatting
cargo fmt --all --check
# Run the demo
cargo run --example hello_world

License

This project is licensed under the MIT License - see the LICENSE file for details.


Note: This library is designed for educational purposes and as a foundation for terminal-based applications. For production use, consider established libraries like crossterm or ratatui depending on your needs.

About

Terminal UI library for Linux and Unix-like systems

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages