{"id":31345832,"url":"https://github.com/gdt050579/AppCUI-rs","last_synced_at":"2025-09-26T08:08:05.544Z","repository":{"id":297798206,"uuid":"580050294","full_name":"gdt050579/AppCUI-rs","owner":"gdt050579","description":"AppCUI – A feature-rich and cross-platform TUI/CUI framework for Rust, enabling modern terminal-based applications on Windows, Linux, and macOS. Includes built-in UI components like buttons, menus, list views, tree views, checkboxes, and more. Perfect for building fast and interactive CLI tools and text-based interfaces","archived":false,"fork":false,"pushed_at":"2025-09-24T05:50:34.000Z","size":49422,"stargazers_count":317,"open_issues_count":17,"forks_count":9,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-09-24T07:24:37.504Z","etag":null,"topics":["console-app","ncurses-tui","rust","terminal-graphics","terminal-ui","termios","tui","tui-app","windows-terminal"],"latest_commit_sha":null,"homepage":"https://gdt050579.github.io/AppCUI-rs/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gdt050579.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-12-19T15:41:02.000Z","updated_at":"2025-09-24T05:50:39.000Z","dependencies_parsed_at":"2025-07-08T09:23:01.627Z","dependency_job_id":"7976edce-71b7-4c3b-9f55-6d8bec4006ae","html_url":"https://github.com/gdt050579/AppCUI-rs","commit_stats":null,"previous_names":["gdt050579/appcui-rs"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/gdt050579/AppCUI-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdt050579%2FAppCUI-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdt050579%2FAppCUI-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdt050579%2FAppCUI-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdt050579%2FAppCUI-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gdt050579","download_url":"https://codeload.github.com/gdt050579/AppCUI-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gdt050579%2FAppCUI-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277043187,"owners_count":25750509,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-26T02:00:09.010Z","response_time":78,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["console-app","ncurses-tui","rust","terminal-graphics","terminal-ui","termios","tui","tui-app","windows-terminal"],"created_at":"2025-09-26T08:02:51.601Z","updated_at":"2025-09-26T08:08:05.539Z","avatar_url":"https://github.com/gdt050579.png","language":"Rust","funding_links":[],"categories":["Libraries"],"sub_categories":["Command-line"],"readme":"# AppCUI-rs\n\n\u003cimg src=\"https://raw.githubusercontent.com/gdt050579/AppCUI-rs/main/docs/chapter-1/img/logo.png\" align=\"center\" /\u003e\n\n```                                                              \n⯈ 𝗔𝗽𝗽𝗖𝗨𝗜-𝗿𝘀 🖳\n```\n\n![Windows Build Status](https://github.com/gdt050579/AppCUI-rs/actions/workflows/windows.yml/badge.svg)\n![Linux Build Status](https://github.com/gdt050579/AppCUI-rs/actions/workflows/linux.yml/badge.svg)\n![MacOS Build Status](https://github.com/gdt050579/AppCUI-rs/actions/workflows/macos.yml/badge.svg)\n![Code Coverage](https://gist.githubusercontent.com/gdt050579/f7d7e7d56b2725a3b33a265e8a9d8e9c/raw/coverage.svg)\n![License](https://img.shields.io/github/license/gdt050579/AppCUI-rs)\n[![Crates.io](https://img.shields.io/crates/v/appcui.svg)](https://crates.io/crates/appcui)\n[![Docs.rs](https://docs.rs/appcui/badge.svg)](https://docs.rs/appcui)\n[![Gallery](https://img.shields.io/badge/Gallery-See%20Examples-blue)](https://gdt050579.github.io/AppCUI-rs/gallery/screenshots.html)\n\n\nAppCUI-rs is a fast, cross-platform Rust library for building modern, text-based user interfaces (TUIs) with rich widgets, themes, and full Unicode support—an alternative to ncurses and other terminal UI frameworks.\n* [Book](https://gdt050579.github.io/AppCUI-rs/)\n* [Documentation](https://docs.rs/appcui)\n* [Gallery](https://gdt050579.github.io/AppCUI-rs/gallery/screenshots.html)\n\n\n## ✨ Features\n- [x] multiple out-of-the-box controls (buttons, labels, text boxes, check boxes, radio buttons, list views, tree views, combo boxes, date/time pickers, color pickers, tabs, accordeons, etc.). A full list of controls can be found [here](https://gdt050579.github.io/AppCUI-rs/chapter-3/stock_controls.html) \n- [x] powerful layout system that allows you to position controls using absolute coordinates, relative coordinates, docking, alignment, anchors or pivot positioning (see more [here](https://gdt050579.github.io/AppCUI-rs/chapter-3/layout.html)) \n- [x] menus and toolbars\n- [x] multi-platform support (Windows via API and virtual terminal, Linux via ncurses, MacOS via termios)\n- [x] multi-threading support to allow background tasks\n- [x] timers\n- [x] mouse support\n- [x] clipboard support\n- [x] color themes\n- [x] support for Unicode characters\n- [x] predefined dialogs (message box, input box, color picker, save \u0026 open dialogs, folder navigator, etc)\n- [x] true colors support (24 bits per pixel) for terminals that supports it.\n\n## 📸 Screenshots \n\n\u003cimg src=\"https://github.com/gdt050579/AppCUI-rs/raw/main/docs/chapter-1/img/appcui-rs-demo.gif\" align=\"center\" /\u003e\n\n👉 **Check out the [Gallery](https://gdt050579.github.io/AppCUI-rs/gallery/screenshots.html) for full demos of all controls!**\n\n## 🖥️ Backends\n\nAppCUI supports various backends based on the operating system it is being used for:\n\n* **Windows Console** - based on Win32 low level API, design for clasical windows console\n* **Windows VT** - based on ANSI sequances, designed for modern windows virtual terminals\n* **NCurses** - based on NCurses API for linux envinronments\n* **Termios** - based on ANSI sequances and low level APIs for MAC OSX\n* **Web Terminal** - designed for Web implementation (based on webgl)\n* **CrossTerm** - based on the `crossterm` crate, but enabled via a feature flag\n\nMore on the supported backends can be found [here](https://gdt050579.github.io/AppCUI-rs/chapter-2/backends.html)\n\n\n## 🚀 Quick Start\n\nAdd the following to your `Cargo.toml`:\n\n```toml\n[dependencies]\nappcui = \"*\"\n```\n\nThen create a new Rust project and add the following code:\n\n```rust\nuse appcui::prelude::*;\n\nfn main() -\u003e Result\u003c(), appcui::system::Error\u003e {\n    let mut app = App::new().build()?;\n    let mut win = Window::new(\n        \"Test\",\n        LayoutBuilder::new().alignment(Alignment::Center).width(30).height(9).build(),\n        window::Flags::Sizeable,\n    );\n    win.add(Label::new(\n        \"Hello World !\",\n        LayoutBuilder::new().alignment(Alignment::Center).width(13).height(1).build(),\n    ));\n    app.add_window(win);\n    app.run();\n    Ok(())\n}\n```\n\nor a more compact version using proc-macros:\n\n```rs\nuse appcui::prelude::*;\n\nfn main() -\u003e Result\u003c(), appcui::system::Error\u003e {\n    let mut app = App::new().build()?;\n    let mut win = window!(\"Test,a:c,w:30,h:9\");\n    win.add(label!(\"'Hello World !',a:c,w:13,h:1\"));\n    app.add_window(win);\n    app.run();\n    Ok(())\n}\n```\n\nThen run the project with `cargo run`. You should see a window with the title `Test` and the text `Hello World !` in the center.\n\n## 🧪 Examples\n\nAppCUI-rs comes with a set of examples to help you get started. You can find them in the [examples](examples) folder, including:\n- **Games** such as [Tic Tac Toe](examples/tic-tac-toe/), [Snake](examples/snake/), [Flappy Bird](examples/flappy), [Minesweeper](examples/minesweeper/) or [Ram it](examples/ramit/)\n- **Utilities** such as [Calculator](examples/calculator/), [CSV Viewer](examples/csv_viewer/), [Temperature Converter](examples/temperature_convertor/) or a [Timer](examples/timer/)\n- **Animations** such as [Matrix](examples/matrix/), [Fractals](examples/fractals/) or [Spiral](examples/spiral/)\n- **Controls**/**Widgets** such as [Button](examples/buttons/), [CheckBox](examples/checkboxes/), [ComboBox](examples/combobox/), [DatePicker](examples/datepicker/), [ListView](examples/listview/), [TreeView](examples/treeview/) and many more.\n- **Dialogs** such as [Notification](examples/notification_dialogs/) or [Input](examples/input_dialog/)\n\n## 🛠️ A more complex example\n\nAm example that creates a window with a button that when pressed increases a counter.\n\n```rust\nuse appcui::prelude::*;\n\n// Create a window that handles button events and has a counter\n#[Window(events = ButtonEvents)]\nstruct CounterWindow {\n    counter: i32\n}\n\nimpl CounterWindow {\n    fn new() -\u003e Self {\n        let mut w = Self {\n            // set up the window title and position\n            base: window!(\"'Counter window',a:c,w:30,h:5\"),\n            // initial counter is 1\n            counter: 1            \n        };\n        // add a single button with the caption \"1\" (like the counter)\n        w.add(button!(\"'1',d:b,w:20\"));\n        w\n    }\n}\nimpl ButtonEvents for CounterWindow {\n    // When the button is pressed, this function will be called\n    // with the handle of the button that was pressed\n    // Since we only have one button, we don't need to store its handle \n    // in the struct, as we will receive the handle via the on_pressed method\n    fn on_pressed(\u0026mut self, handle: Handle\u003cButton\u003e) -\u003e EventProcessStatus {\n        // increase the counter\n        self.counter += 1;\n        // create a text that containe the new counter\n        let text = format!(\"{}\",self.counter);\n        // aquire a mutable reference to the button using its handle\n        if let Some(button) = self.control_mut(handle) {\n            // set the caption of the button to th new text\n            button.set_caption(\u0026text);\n        }\n        // Tell the AppCUI framework that we have processed this event\n        // This allows AppCUI to repaint the button\n        EventProcessStatus::Processed\n    }\n}\n\nfn main() -\u003e Result\u003c(), appcui::system::Error\u003e {\n    // create a new application\n    let mut a = App::new().build()?;\n    // add a new window (of type CounterWindow) to the application\n    a.add_window(CounterWindow::new());\n    // Run AppCUI framework (this wil start the window loop and messaage passing)\n    a.run();\n    Ok(())\n}\n```\n\n## 🛣️ Roadmap\n\n- [x] Basic set of widgets and support for Windows, Linux and MacOS\n- [x] WebGL support\n- [ ] OpenGL / SDL / Vulkan support\n- [ ] TextArea support for code highlighting\n\n## 🤝 Contributing\n\nContributions, issues, and feature requests are welcome!  \nCheck out [CONTRIBUTING.md](CONTRIBUTING.md) to get started.\n\nJoin the discussion in [GitHub Discussions](https://github.com/gdt050579/AppCUI-rs/discussions).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgdt050579%2FAppCUI-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgdt050579%2FAppCUI-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgdt050579%2FAppCUI-rs/lists"}