{"id":39099148,"url":"https://github.com/caleb-leavell/textinterface","last_synced_at":"2026-01-17T19:00:58.387Z","repository":{"id":258538362,"uuid":"869150575","full_name":"Caleb-Leavell/TextInterface","owner":"Caleb-Leavell","description":"A java library for creating non-GUI, text-based interfaces in Java, with an emphasis on modularity and clean code.","archived":false,"fork":false,"pushed_at":"2025-09-11T02:05:00.000Z","size":469,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-11T05:49:00.765Z","etag":null,"topics":["cli","java","text-interface"],"latest_commit_sha":null,"homepage":"","language":"HTML","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/Caleb-Leavell.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":"2024-10-07T19:57:41.000Z","updated_at":"2025-09-11T02:05:05.000Z","dependencies_parsed_at":"2024-12-11T06:24:14.476Z","dependency_job_id":"c1740550-95ed-4870-a4e1-75311929ebfe","html_url":"https://github.com/Caleb-Leavell/TextInterface","commit_stats":null,"previous_names":["caleb-leavell/textinterface"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Caleb-Leavell/TextInterface","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Caleb-Leavell%2FTextInterface","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Caleb-Leavell%2FTextInterface/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Caleb-Leavell%2FTextInterface/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Caleb-Leavell%2FTextInterface/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Caleb-Leavell","download_url":"https://codeload.github.com/Caleb-Leavell/TextInterface/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Caleb-Leavell%2FTextInterface/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28516540,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T18:55:29.170Z","status":"ssl_error","status_checked_at":"2026-01-17T18:55:03.375Z","response_time":85,"last_error":"SSL_read: 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":["cli","java","text-interface"],"created_at":"2026-01-17T19:00:57.516Z","updated_at":"2026-01-17T19:00:58.368Z","avatar_url":"https://github.com/Caleb-Leavell.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Text Interface\n\n**Note:** This library is deprecated. Please see [Jatui](https://github.com/Caleb-Leavell/Jatui) for the current version.\n\nWhile GUIs are the most popular form of User Interface, there are many applications that are better suited for running purely in the terminal in a text-based format.\nPossible reasons for this are:\n- The program is simple and doesn't require a GUI\n- The program is designed to run in an ecosystem that doesn't support GUIs\n- The program requires efficient runtime that would be hindered by a GUI\n\nHowever, building a text interface in native Java often leads to expansive, unscalable designs that slow down development.\n\nThis TextInterface library is designed to streamline the interface development process by providing a system that handles many of the repetitive tasks required by text interfaces.\n\nThis library focuses on:\n- Acclerating devlopment by providing tools to quickly create text interfaces\n- Improving the readability and maintainability of the codebase by providing a clean, modular approach to building text interfacces\n- Allowing developers to design the way that is best suited for their system\n\nView the [Javadoc](https://caleb-leavell.github.io/TextInterface/javadoc/index.html)\n\nThe core unit of the library is the Scene. All scenes are built up using a Builder Design pattern. Every scene can also have child scenes, which are then attatched to the scene. Scenes can also have functions attatched to them.\n\nA [Demo Application](https://github.com/Caleb-Leavell/TextInterface/blob/main/src/main/java/com/calebleavell/textinterface/DemoApp.java) has been provided to show the recommended development style.\nThis Demo Application implements a simple random number generator that continuously takes a maximum number from the user, then displays the generated number.\nWhen run, the Demo App works as follows:\n\n![image](https://github.com/user-attachments/assets/098fda3e-3c05-4b27-8b6d-0b124ecfb720)\n\nThis functionality, which includes gathering user input, generating the number, displaying the output, and choosing a scene, is all achieved in around 100 lines of code, while utilizing only 3 \ndeclared variables in the entire program.\n\n# v1.2\nThis release add the following features:\n\n- **Input Listeners**: This is a similar concept to Event Handlers, following the Observer design pattern. Input Listeners get updated every time an Inputtable (or any scene that takes an input) receives input, and then updates itself to match or to do something specific based off of it.\n- **Runtime Scene Selection List Generation**: the NumberedSceneSelectorScene class is enhanced with its Builder's sceneList method being overloaded to be able to take in scene names, which are converted into the actual list of scenes when the object is run.\n- **Recursive Termination**: Terminating a scene also terminates its children, and their children, etc.\n\nThese features improve the ability to keep things attached to scenes and not having to rely on disjointed development. It also reduces the need for use of reflective methods, which improves safety.\n\n# v1.1\nAdjusts the getChild methods to all be overloaded. Adds 2 new overloaded versions, one for name and one for ID, that can return the actual class of the scene selected, rather than a polymorphed Scene type. This significantly reduces the amount of reflection needed.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaleb-leavell%2Ftextinterface","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcaleb-leavell%2Ftextinterface","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaleb-leavell%2Ftextinterface/lists"}