Arkham Terminal UI Kit
Go to file
Joe Bellus 24b59f24f3 Updated guide base url 2024-04-19 19:56:15 -04:00
.github/workflows Sync feature 2024-04-19 19:43:42 -04:00
docs Updated guide base url 2024-04-19 19:56:15 -04:00
examples Sync feature 2024-04-19 19:43:42 -04:00
src Fixed thread test 2024-04-19 19:52:34 -04:00
.envrc Added Nix flake 2024-04-13 00:22:20 -04:00
.gitignore Added Nix flake 2024-04-13 00:22:20 -04:00
Cargo.toml Updated guide URL 2024-04-19 19:54:41 -04:00
flake.lock Added Nix flake 2024-04-13 00:22:20 -04:00
flake.nix Stack alignment 2024-04-15 13:14:30 -04:00
readme.md Updated guide URL 2024-04-19 19:54:41 -04:00

readme.md

Arkham

An ergonomic TUI Framework

crates.io Documentation Crates.io Downloads (latest version)
guide CI

Read The Guide

Welcome

Robust TUI foundation

Arkham attempts to give a firm foundation for building TUI Apps. It does not provide a set of widgets or components that can be used. Instead, it tries to make the process of building terminal interfaces easy enough that they aren't necessary.

  • Keyboard handling
  • Terminal modification
  • Full screen terminal UIs with alternate screen handling
  • Full run loop and rendering engine
  • Easy text formatting and styling
  • Ergonomic component architecture
  • Dependency injection

Components are simple functions

fn my_component(ctx &mut ViewContext) {
    ctx.insert((0,0), "Welcome");
}

Easily handle text styling

fn my_component(ctx &mut ViewContext) {
    ctx.insert(
        (0,0), 
        "Welcome"
            .to_runes()
            .bg(Color::Blue)
            .fg(Color::White),
    );
}

Painless dependency injection

fn my_component(ctx &mut ViewContext, user: Res<MyUser>) {
    ctx.insert(
        (0,0), 
        format!("Hello, {}", user.name),
    );
}

Easy keyboard handling

fn my_component(ctx &mut ViewContext, kb: Res<Keyboard>) {
    if kb.char() == Some('x') {
        ctx.insert(
            (0,0), 
            "X marks the spot"
        );
    }
}