{"id":38212315,"url":"https://github.com/oculometric/stui","last_synced_at":"2026-01-17T00:44:19.125Z","repository":{"id":252149068,"uuid":"839571100","full_name":"oculometric/stui","owner":"oculometric","description":"Simple Text UI - an easy-to-use, header-only, semi-immediate-mode TUI framework for building interactive interfaces across platforms","archived":false,"fork":false,"pushed_at":"2025-10-02T10:54:32.000Z","size":1415,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-02T12:36:29.196Z","etag":null,"topics":["cpp","cross-platform","header-only-library","immediate-gui","text-user-interface","ui"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oculometric.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"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":"2024-08-07T22:20:24.000Z","updated_at":"2025-10-02T10:54:35.000Z","dependencies_parsed_at":"2024-08-08T01:38:20.547Z","dependency_job_id":"dcf78f7e-e3f4-4e64-b435-2edd15997c1a","html_url":"https://github.com/oculometric/stui","commit_stats":null,"previous_names":["oculometric/stui"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/oculometric/stui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oculometric%2Fstui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oculometric%2Fstui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oculometric%2Fstui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oculometric%2Fstui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oculometric","download_url":"https://codeload.github.com/oculometric/stui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oculometric%2Fstui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28490523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T23:55:29.509Z","status":"ssl_error","status_checked_at":"2026-01-16T23:55:29.108Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cpp","cross-platform","header-only-library","immediate-gui","text-user-interface","ui"],"created_at":"2026-01-17T00:44:18.520Z","updated_at":"2026-01-17T00:44:19.108Z","avatar_url":"https://github.com/oculometric.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# stui - Simple Text UI\n\na lightweight, easy-to-use, header-only, semi-immediate-mode TUI framework for building interactive interfaces inside the terminal, across platforms.\n\n## Key Features\n\n![](doc/fbx_debug_tool.png)\n_the project i developed this library for, my FBX file debug tool_\n\n- **cross-platform** - tested on Windows and Linux (including WSL)\n- **lightweight** - simple components and code architectured with efficiency in mind, including giving you tools to limit your framerate and only redraw when necessary\n- **immediate-mode** - you can draw the screen, and check for input whenever and wherever you want\n- **callback-driven interaction** - callback functions make it easy to add interactivity\n- **extensible** - lacking a particular UI element you want? add it yourself by subclassing `Component`\n- **header-only** - no extra compiler options, no extra DLLs you need to ship, it all just builds into a single executable\n- **supports Unicode glyphs** - assuming your terminal can display them, `Component`s can draw Unicode characters (e.g. for boxes, spinners, etc)\n- **modular** - manage you UI behaviour manually, or use the `Page` extension to handle `Component` management and focus for you. if you want to write your UI as a separate script file, `LayoutReader` does that. you're free to pull in the extra modules if you need them\n\n![](doc/stui_compiler.gif)\n\n_TUI-driven compiler tool to demonstrate widgets and callbacks. see compiler_tool.cpp_\n\n![](doc/widgets_demo.png)\n_showing off most of the available widgets. see widgets_demo.cpp_\n\n## Purpose\n\ni started writing a tool for debugging FBX files, and i wanted to have a little UI for it displayed in the terminal so you could browse the NodeRecord tree. since i couldn't seem to find any decent, easy-to-use TUI frameworks (my main requirements being header-only and cross-platform), *un*fortunately this cast me into a rabbit hole of building my own library to do that. and now you have this project.\n\nthe project concept was partly inspired by [gitui](https://github.com/extrawurst/gitui), an excellent text UI program for git, which i also used extensively while developing this.\n\n## Status\n\ni'm probably finished with developing this project. it's reasonably complete and documented as it is. i've finished developing LayoutScript, my scripting language extension for building UIs, and i don't want to overcomplicate the project too much or just bloat it with unecessary stuff (any further than it already is).\n\nif there's something (like an additional `Component`) you'd really like to see added, or something you've added that you want merged, i'll look into it.\n\nif there is a bug that needs fixing, or something missing, please submit an issue and i'll endeavour to address it.\n\n## Installation and Usage\n\nsee the [HELP.md](doc/HELP.md) file for a proper explanation, but all you need to do is `git submodule add` this project (or just clone it separately and keep the `inc` directory somewhere handy) and add the `inc` directory as an include path for your compiler. then you're good to go with creating UI elements and drawing them in the terminal. _happy widgeting!_\n\nCopyright (C) 2024-2025  Jacob Costen\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foculometric%2Fstui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foculometric%2Fstui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foculometric%2Fstui/lists"}