{"id":13485515,"url":"https://github.com/jline/jline3","last_synced_at":"2026-04-08T07:01:35.834Z","repository":{"id":37432395,"uuid":"60111626","full_name":"jline/jline3","owner":"jline","description":"JLine is a Java library for handling console input.","archived":false,"fork":false,"pushed_at":"2026-04-02T11:05:42.000Z","size":12197,"stargazers_count":1753,"open_issues_count":27,"forks_count":241,"subscribers_count":34,"default_branch":"master","last_synced_at":"2026-04-03T09:56:47.668Z","etag":null,"topics":["cli","console","java"],"latest_commit_sha":null,"homepage":"https://jline.org","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jline.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2016-05-31T18:00:01.000Z","updated_at":"2026-04-03T00:49:31.000Z","dependencies_parsed_at":"2023-10-12T15:23:54.892Z","dependency_job_id":"98d0a4d0-b3b6-4d94-8564-bf21a5a6d1c5","html_url":"https://github.com/jline/jline3","commit_stats":{"total_commits":2585,"total_committers":116,"mean_commits":22.28448275862069,"dds":0.6038684719535783,"last_synced_commit":"3c634784c4c5cc8ea38a61e8585c18bad8fc6443"},"previous_names":[],"tags_count":82,"template":false,"template_full_name":null,"purl":"pkg:github/jline/jline3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jline%2Fjline3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jline%2Fjline3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jline%2Fjline3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jline%2Fjline3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jline","download_url":"https://codeload.github.com/jline/jline3/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jline%2Fjline3/sbom","scorecard":{"id":523437,"data":{"date":"2025-08-11","repo":{"name":"github.com/jline/jline3","commit":"37d44d909f1d680beb88430adf297213013574a9"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.4,"checks":[{"name":"Code-Review","score":3,"reason":"Found 6/16 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-drafter.yml:27","Warn: no topLevel permission defined: .github/workflows/master-build.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/release-drafter.yml:21","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/website.yml:11"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Binary-Artifacts","score":0,"reason":"binaries present in source code","details":["Warn: binary detected: demo/wget.exe:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/FreeBSD/x86/libjlinenative.so:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/FreeBSD/x86_64/libjlinenative.so:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Linux/arm/libjlinenative.so:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Linux/arm64/libjlinenative.so:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Linux/armv6/libjlinenative.so:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Linux/armv7/libjlinenative.so:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Linux/ppc64/libjlinenative.so:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Linux/x86/libjlinenative.so:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Linux/x86_64/libjlinenative.so:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Mac/arm64/libjlinenative.jnilib:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Mac/x86/libjlinenative.jnilib:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Mac/x86_64/libjlinenative.jnilib:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Windows/arm64/jlinenative.dll:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Windows/x86/jlinenative.dll:1","Warn: binary detected: native/src/main/resources/org/jline/nativ/Windows/x86_64/jlinenative.dll:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":10,"reason":"project is fuzzed","details":["Info: OSSFuzz integration found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:20"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/master-build.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/jline/jline3/master-build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/master-build.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/jline/jline3/master-build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/master-build.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/jline/jline3/master-build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-drafter.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/jline/jline3/release-drafter.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/jline/jline3/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/jline/jline3/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/website.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/jline/jline3/website.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/website.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/jline/jline3/website.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/website.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/jline/jline3/website.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/website.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/jline/jline3/website.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/website.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/jline/jline3/website.yml/master?enable=pin","Warn: npmCommand not pinned by hash: build:367","Info:   0 out of  10 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":7,"reason":"3 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T03:40:13.840Z","repository_id":37432395,"created_at":"2025-08-20T03:40:13.840Z","updated_at":"2025-08-20T03:40:13.840Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31544087,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"online","status_checked_at":"2026-04-08T02:00:06.127Z","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":["cli","console","java"],"created_at":"2024-07-31T18:00:24.800Z","updated_at":"2026-04-08T07:01:35.820Z","avatar_url":"https://github.com/jline.png","language":"Java","funding_links":[],"categories":["Projects","Java","Java ☕","[Java](https://dev.java/)","项目","二、核心功能库（解决具体开发问题）"],"sub_categories":["CLI","Useful awesome list for Go cli","7. 命令行工具"],"readme":"# JLine - Java Console Library\n\n[![Maven Central](https://img.shields.io/maven-central/v/org.jline/jline.svg)](https://search.maven.org/search?q=g:org.jline)\n[![Build Status](https://github.com/jline/jline3/actions/workflows/master-build.yml/badge.svg)](https://github.com/jline/jline3/actions)\n[![License](https://img.shields.io/badge/License-BSD-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)\n\nJLine is a Java library for handling console input. It's similar to [GNU Readline](https://tiswww.case.edu/php/chet/readline/rltop.html) but with a focus on portability, flexibility, and integration with Java applications. See https://jline.org for its documentation.\n\n## Requirements\n\n- **Java 11 or higher**: JLine 4.x requires Java 11 as the minimum runtime version\n- **Maven 3.9 or higher**: JLine 4.x requires Maven 3.9+ for building from source\n- **Note**: JLine 3.x supports Java 8+ and Maven 3.x+, but JLine 4.x requires Java 11+ and Maven 3.9+\n\n## Features\n\n- **Cross-platform support**: Works on Windows, macOS, Linux, and other Unix-like systems\n- **Line editing**: Emacs and Vi editing modes with customizable key bindings\n- **History management**: Persistent command history with search capabilities\n- **Tab completion**: Customizable completion for commands, arguments, and file paths\n- **Syntax highlighting**: Colorize input based on custom rules\n- **Password masking**: Secure input for sensitive information\n- **ANSI terminal support**: Full support for ANSI escape sequences and colors\n- **Unicode support**: Proper handling of wide characters and combining marks\n- **ConsoleUI components**: Interactive UI elements like menus, checkboxes, and prompts\n\n## Installation\n\n### Maven\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.jline\u003c/groupId\u003e\n    \u003cartifactId\u003ejline\u003c/artifactId\u003e\n    \u003cversion\u003e4.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Gradle\n\n```groovy\nimplementation 'org.jline:jline:4.0.0'\n```\n\n### Java 11-21 Compatibility (JDK11 Classifier)\n\nIf you're using Java 11-21 and need to avoid Java 22+ class files, use the `jdk11` classifier. This variant excludes the FFM (Foreign Function \u0026 Memory) terminal provider which requires Java 22+:\n\n**Maven:**\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.jline\u003c/groupId\u003e\n    \u003cartifactId\u003ejline\u003c/artifactId\u003e\n    \u003cversion\u003e4.0.0\u003c/version\u003e\n    \u003cclassifier\u003ejdk11\u003c/classifier\u003e\n\u003c/dependency\u003e\n```\n\n**Gradle:**\n\n```groovy\nimplementation 'org.jline:jline:4.0.0:jdk11'\n```\n\nThe `jdk11` classifier artifact:\n\n- Contains all JLine functionality\n- Excludes the FFM terminal provider (`org.jline.terminal.impl.ffm.*` classes compiled with Java 22)\n- Uses JNI or Exec providers for native terminal access instead\n- Compatible with Java 11-21\n\n**Note:** For JLine 3.x, use the `jdk8` classifier instead, which is compatible with Java 8-21.\n\n## Quick Start\n\nHere's a simple example to get you started:\n\n```java\nimport org.jline.reader.*;\nimport org.jline.reader.impl.*;\nimport org.jline.terminal.*;\nimport org.jline.terminal.impl.*;\n\npublic class HelloJLine {\n    public static void main(String[] args) {\n        try {\n            // Create a terminal\n            Terminal terminal = TerminalBuilder.builder()\n                    .system(true)\n                    .build();\n\n            // Create line reader\n            LineReader reader = LineReaderBuilder.builder()\n                    .terminal(terminal)\n                    .build();\n\n            // Prompt and read input\n            String line = reader.readLine(\"JLine \u003e \");\n\n            // Print the result\n            System.out.println(\"You entered: \" + line);\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}\n```\n\n## Modules\n\nJLine is organized into several modules:\n\n- **jline-terminal**: Core terminal functionality\n- **jline-reader**: Line editing and reading\n- **jline-console**: Higher-level console abstractions\n- **jline-console-ui**: Interactive UI components (checkboxes, lists, etc.) - **Deprecated**\n- **jline-prompt**: Modern prompt API for interactive console applications\n- **jline-style**: Styling and coloring support\n- **jline-builtins**: Built-in commands and utilities\n- **jline-remote-ssh**: SSH server support\n- **jline-remote-telnet**: Telnet server support\n\n## JPMS (Java Platform Module System) Support\n\nJLine provides full support for JPMS starting with version 4.0. The following modules are proper JPMS modules with `module-info.java`:\n\n### ✅ JPMS Modules (with module-info.java)\n\n| Module | Artifact ID | Module Name | Description |\n|--------|-------------|-------------|-------------|\n| **Core Modules** | | | |\n| Native | `jline-native` | `org.jline.nativ` | Native library loading |\n| Terminal | `jline-terminal` | `org.jline.terminal` | Core terminal functionality |\n| Terminal FFM | `jline-terminal-ffm` | `org.jline.terminal.ffm` | FFM-based terminal (JDK 22+) |\n| Reader | `jline-reader` | `org.jline.reader` | Line editing and reading |\n| Style | `jline-style` | `org.jline.style` | Styling and coloring |\n| **Extended Modules** | | | |\n| Builtins | `jline-builtins` | `org.jline.builtins` | Built-in commands |\n| Console UI | `jline-console-ui` | `org.jline.console.ui` | Interactive UI components (deprecated) |\n| Prompt | `jline-prompt` | `org.jline.prompt` | Modern prompt API for interactive applications |\n| Console | `jline-console` | `org.jline.console` | Console framework |\n| Jansi Core | `jline-jansi-core` | `org.jline.jansi.core` | ANSI support |\n\n### ❌ Non-JPMS Modules (automatic modules)\n\nThese modules remain as automatic modules for compatibility:\n\n| Module | Artifact ID | Reason |\n|--------|-------------|---------|\n| Terminal Jansi | `jline-terminal-jansi` | Legacy compatibility |\n| Groovy | `jline-groovy` | Groovy integration |\n| Remote SSH | `jline-remote-ssh` | SSH server support |\n| Remote Telnet | `jline-remote-telnet` | Telnet server support |\n| Demo | `jline-demo` | Example applications |\n| Graal | `jline-graal` | GraalVM native image support |\n\n### 🎯 Usage with JPMS\n\nWhen using JLine in a modular application, add the required modules to your `module-info.java`:\n\n```java\nmodule your.application {\n    requires org.jline.terminal;\n    requires org.jline.reader;\n    requires org.jline.style;        // Optional: for styling\n    requires org.jline.builtins;     // Optional: for built-in commands\n    requires org.jline.console;      // Optional: for console framework\n    requires org.jline.prompt;       // Optional: for modern prompt API\n    requires org.jline.console.ui;   // Optional: for legacy UI components (deprecated)\n}\n```\n\n**Note**: The FFM terminal provider (`jline-terminal-ffm`) requires JDK 22+ and native access permissions:\n```bash\njava --enable-native-access=org.jline.terminal.ffm your.application\n```\n\n## Documentation\n\n- [Website](https://jline.org)\n- [Wiki](https://github.com/jline/jline3/wiki)\n- [Javadoc](https://www.javadoc.io/doc/org.jline/jline/latest/index.html)\n\n## License\n\nJLine is licensed under the [BSD License](https://opensource.org/licenses/BSD-3-Clause).\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjline%2Fjline3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjline%2Fjline3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjline%2Fjline3/lists"}