{"id":51028018,"url":"https://github.com/jwodder/ratselect","last_synced_at":"2026-06-21T21:30:59.406Z","repository":{"id":354038511,"uuid":"1221888707","full_name":"jwodder/ratselect","owner":"jwodder","description":"TUI selection list forms in Rust with Ratatui","archived":false,"fork":false,"pushed_at":"2026-06-08T16:01:10.000Z","size":159,"stargazers_count":0,"open_issues_count":18,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T17:11:33.313Z","etag":null,"topics":["forms","ratatui","rust","terminal","tui"],"latest_commit_sha":null,"homepage":"","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/jwodder.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2026-04-26T20:06:50.000Z","updated_at":"2026-06-08T16:01:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jwodder/ratselect","commit_stats":null,"previous_names":["jwodder/ratselect"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jwodder/ratselect","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwodder%2Fratselect","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwodder%2Fratselect/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwodder%2Fratselect/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwodder%2Fratselect/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jwodder","download_url":"https://codeload.github.com/jwodder/ratselect/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwodder%2Fratselect/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34627163,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"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":["forms","ratatui","rust","terminal","tui"],"created_at":"2026-06-21T21:30:57.787Z","updated_at":"2026-06-21T21:30:59.398Z","avatar_url":"https://github.com/jwodder.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Project Status: Concept – Minimal or no implementation has been done yet, or the repository is only intended to be a limited example, demo, or proof-of-concept.](https://www.repostatus.org/badges/latest/concept.svg)](https://www.repostatus.org/#concept)\n[![CI Status](https://github.com/jwodder/ratselect/actions/workflows/test.yml/badge.svg)](https://github.com/jwodder/ratselect/actions/workflows/test.yml)\n[![codecov.io](https://codecov.io/gh/jwodder/ratselect/branch/main/graph/badge.svg)](https://codecov.io/gh/jwodder/ratselect)\n[![Minimum Supported Rust Version](https://img.shields.io/badge/MSRV-1.88-orange)](https://www.rust-lang.org)\n[![MIT License](https://img.shields.io/github/license/jwodder/ratselect.svg)](https://opensource.org/licenses/MIT)\n[![Built With Ratatui](https://ratatui.rs/built-with-ratatui/badge.svg)](https://ratatui.rs/)\n\n[GitHub](https://github.com/jwodder/ratselect) | [Issues](https://github.com/jwodder/ratselect/issues)\n\nThis is an experimental Rust library made using [Ratatui](https://ratatui.rs)\nfor presenting a user with a full-screen terminal interface consisting of a\nseries of *selection lists* (radio buttons and sets of checkboxes) and\ncapturing their choices.\n\n![Screenshot of the `flavors` example on startup](screenshots/flavors.png)\n\nUsage, in brief:\n\n- Create a new `Form`\n\n- Call `form.add(list_key, selector)` with each `RadioSelector` or\n  `MultiSelector` you wish to present to the user\n\n- Call `form.run()` to run the interface and get the user's selections.  If the\n  user cancelled/quit the interface, this method returns `None`; otherwise, it\n  returns `Some(selections)`, where `selections` is a `Vec\u003c(T, Selection)\u003e`\n  pairing the `list_key`'s supplied to `add()` with the choices the user made\n  for the respective selection lists.\n\nThe terminal interface supports the following keybindings:\n\n| Key                                        | Command                                                                    |\n| ------------------------------------------ | -------------------------------------------------------------------------- |\n| \u003ckbd\u003ej\u003c/kbd\u003e, \u003ckbd\u003eDown\u003c/kbd\u003e              | Move down one item                                                         |\n| \u003ckbd\u003ek\u003c/kbd\u003e, \u003ckbd\u003eUp\u003c/kbd\u003e                | Move up one item                                                           |\n| \u003ckbd\u003eh\u003c/kbd\u003e, \u003ckbd\u003eLeft\u003c/kbd\u003e              | Move left one item                                                         |\n| \u003ckbd\u003el\u003c/kbd\u003e, \u003ckbd\u003eRight\u003c/kbd\u003e             | Move right one item                                                        |\n| \u003ckbd\u003eg\u003c/kbd\u003e, \u003ckbd\u003eHome\u003c/kbd\u003e              | Go to first item                                                           |\n| \u003ckbd\u003eG\u003c/kbd\u003e, \u003ckbd\u003eEnd\u003c/kbd\u003e               | Go to start of last line (i.e., the \"OK\" button)                           |\n| \u003ckbd\u003eTab\u003c/kbd\u003e                             | Go to start of next selection list or next button, wrapping around         |\n| \u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eTab\u003c/kbd\u003e            | Go to start of previous selection list or previous button, wrapping around |\n| \u003ckbd\u003eEnter\u003c/kbd\u003e, \u003ckbd\u003eSpace\u003c/kbd\u003e         | Select/toggle/activate current selection                                   |\n| \u003ckbd\u003eq\u003c/kbd\u003e, \u003ckbd\u003eQ\u003c/kbd\u003e, \u003ckbd\u003eEsc\u003c/kbd\u003e | Cancel \u0026 quit                                                              |\n\n\u003c!--\n| \u003ckbd\u003ew\u003c/kbd\u003e, \u003ckbd\u003ePage Up\u003c/kbd\u003e           | Scroll up a page                                                           |\n| \u003ckbd\u003ez\u003c/kbd\u003e, \u003ckbd\u003ePage Down\u003c/kbd\u003e         | Scroll down a page                                                         |\n--\u003e\n\nSee Also\n========\n\n- [`curselect`](https://github.com/jwodder/curselect), a roughly-equivalent\n  implementation in Python made using the [urwid](https://urwid.org) library\n\n- [`cursive-select`](https://github.com/jwodder/cursive-select), a\n  roughly-equivalent implementation in Rust made using the\n  [`cursive`](https://crates.io/crates/cursive) library\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwodder%2Fratselect","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjwodder%2Fratselect","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwodder%2Fratselect/lists"}