zio/zio-cli
64.8
Adequate · 20 September 2026
7.2k
lines of production code
Scala
primary language
1
measurement over time
What this system is
This system is a ZIO-based library for building command-line applications, providing a functional API for defining commands, options, and arguments. It supports advanced interactive features such as shell tab completion, command auto-correction, and OAuth2 authentication for third-party integrations. The library also enables native image generation via GraalVM and includes utilities for rendering ASCII art banners.
How it got here
2020 — Initial release and native image support
11 changes.
This period established the ZIO CLI library with core features such as subcommand parsing, OAuth2 authentication, and shell tab completion. It also introduced an sbt plugin for GraalVM native image generation and expanded test coverage for the new components. The work included initial documentation publication and build system modernization to support Scala 3.
2021–2024 — multi-platform support and OAuth2 integration
10 changes.
This period focused on expanding zio-cli's platform coverage by introducing Scala Native and JavaScript targets alongside enhanced JVM implementations for file system operations and shell completion. Significant features included the addition of built-in OAuth2 authentication support and improved CLI banner rendering via Figlet fonts. The work was underpinned by comprehensive test suites and new testing utilities to ensure robustness across these new capabilities.
Features
Add JVM-specific file system implementation
Introduces a new platform-specific implementation for file system operations on the JVM, providing concrete methods to parse paths, and check for the existence, directory status, and regular file status of paths using Java NIO.
zio-cli/jvm/src/main/scala/zio/cli/files · high confidence
Add Scala Native platform support for zio-cli
This change introduces platform-specific implementations for the Scala Native target, enabling zio-cli to run on Native. The diff adds \\*PlatformSpecific\ files in \zio-cli/native\ that provide concrete implementations for file system operations (using \java.nio.file\), argument parsing for files and directories, and shell completion stubs. It also includes corresponding stubs for the JavaScript target (\zio-cli/js\) to ensure API consistency, where file system operations and OAuth2 validation are explicitly marked as unsupported or returning empty results.
zio-cli/js · high confidence
Add sbt plugin for building native images of ZIO CLI apps
A new sbt plugin (ZIOCLIPlugin) has been added to the sbt-zio-cli module, enabling users to build GraalVM native images for their ZIO CLI applications. The plugin integrates with the sbt-native-image plugin, providing settings to configure native image options (such as allowing incomplete classpaths and initializing at build time) and exposing tasks to build the native image. While the core build functionality is implemented, features for generating shell completions (bash/zsh) and installing the CLI are currently marked as not implemented.
sbt-zio-cli · high confidence
Added OAuth2 authentication support for CLI applications
The zio-cli library now includes built-in support for OAuth2 authorization. This change introduces the \OAuth2\ class and platform-specific validation logic that handles the full authorization flow, including loading cached tokens, refreshing expired access tokens, and performing device-code authorization with polling. Users can now integrate third-party OAuth2 providers into their CLI tools, with automatic help documentation generated for OAuth2-specific options.
zio-cli/jvm/src/main/scala/zio/cli/oauth2 · high confidence
Added Slant FIGfont for CLI banner rendering
A new Slant FIGfont file (slant.flf) has been added to the shared resources, enabling the CLI to render text banners using this specific font style. This change supports the 'figfont' capability mentioned in the commit, allowing users to generate stylized ASCII art output in the command-line interface.
zio-cli/shared/src/main/resources · high confidence
Initial ZIO CLI documentation published to the website
The website now includes the initial set of documentation pages for ZIO CLI, covering core concepts such as Args, Options, Commands, and HelpDoc construction. It also provides guides for advanced usage including OAuth2 authentication (with built-in providers for GitHub, Google, and Facebook), Bash and Zsh tab completion, CLI configuration (case sensitivity, autocorrection), and the SBT plugin for native image generation.
website · high confidence
Initial release of ZIO CLI library and examples
This change introduces the core ZIO CLI library, providing a functional API for building command-line applications with support for subcommands, options, arguments, and help documentation. It includes built-in features such as OAuth2 authentication (specifically for GitHub), shell tab completion, and a wizard mode for interactive command construction. The release also ships with example applications demonstrating these capabilities, including a Git-like CLI, a word count utility, and string manipulation tools.
repository · high confidence
JVM-specific CLI argument and completion implementations
This change introduces platform-specific implementations for the JVM target, adding support for file and directory path arguments, shell completion via Bash's \compgen\, and OAuth2 authorization options. Users can now define file and directory arguments that validate existence, leverage automatic shell completion for files and directories on Linux/macOS, and integrate OAuth2 provider authentication into their CLI applications through a new \Options.oauth2\ method.
zio-cli/jvm/src/main/scala/zio/cli · high confidence
New CLI testkit utilities for asserting and property-testing CliApp and Command behavior
The zio-cli-testkit module now includes \CliAssertion\ and \GenerationAssertion\ objects, providing developers with methods to verify \CliApp\ and \Command\ instances directly. Users can assert specific properties like help documentation and usage synopses, or run property-based tests using generators to validate command parsing results and application outputs. This addition simplifies the process of writing robust tests for CLI applications by offering dedicated assertion helpers and generation-based testing capabilities.
zio-cli-testkit/shared · high confidence
New installer script and updated build configuration
The repository now includes an installer script (installer.sh) that allows users to easily run the ZIO CLI application by downloading a standalone JAR or building a GraalVM native image. Additionally, the project has updated its code formatting tool (scalafmt) to version 3.11.5, removed the legacy sbt launcher script in favor of standard sbt usage, and refreshed the README with comprehensive documentation and examples.
(repo-wide) · high confidence
New tab completion and auto-correct capabilities for CLI applications
This release introduces shell tab completion and command auto-correction to zio-cli. Users can now enable tab completion for commands, options, and arguments (including file/directory paths and enumeration values) via generated shell scripts for Bash, with the underlying logic provided by the new \Completion\ and \Compgen\ modules. Additionally, the \AutoCorrect\ module implements Levenshtein distance-based suggestions to help users correct misspelled options, improving the interactive CLI experience.
zio-cli/shared/src/main/scala/zio · high confidence
Removals
Removal of HelloWorld example file
The HelloWorld.scala file, which previously contained a sample ZIO application demonstrating basic console interaction (prompting for a name and printing a greeting), has been removed from the zio-cli shared source directory.
zio-cli/shared/src/main/scala/zio-cli · high confidence
Behavioural changes
Platform-specific FigFont loading on JVM
The JVM-specific implementation for loading Figlet fonts now uses ZIO 2's effect types (ZIO) for file, resource, and URL operations, replacing previous platform-agnostic or non-ZIO approaches with \attemptBlockingIO\ to handle I/O safely.
zio-cli/jvm/src/main/scala/zio/cli/figlet · high confidence
Fixes
Add Scala 2.11 compatibility backfills
The zio-cli library now supports Scala 2.11 by introducing a compatibility package that provides backfill implementations for methods missing in that version. Specifically, it adds implicit classes to convert \Try\ to \Either\, \Either\ to \Option\, and \String\ to \Option\[Int\]\, ensuring the CLI tool builds and functions correctly on older Scala runtimes.
zio-cli/shared/src/main/scala-2.11 · high confidence
Test coverage
Added standard.figlet font resource for testing; Added test coverage for CLI argument validation, primitive types, wizard interaction, and shell completion; Added tests for FigFont parsing and rendering; Added tests for Figlet font rendering and parsing logic; Expanded test coverage for ZIO CLI core components; Removed HelloWorldSpec test file.
Dependencies
Upgrade to sbt 2.0 and Scala 3.3.8 with plugin modernization
The build system has been upgraded to sbt 2.0.8 (from 1.3.7) and the project now targets Scala 3.3.8 (dropping Scala 2.11 and 2.12 support, keeping 2.12.21 and 2.13.18). This involves significant changes to \project/BuildHelper.scala\, including explicit \BuildInfoKey\ usage for Scala 3 compatibility, removal of Dotty-specific settings, and updated compiler options. The \project/plugins.sbt\ file has been updated to use modernized versions of core plugins (e.g., sbt-scalajs 1.22.0, sbt-buildinfo 0.13.2) and added support for Scala Native and native-image generation, while removing obsolete plugins like sbt-dotty and sbt-explicit-dependencies.
project · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 65.
Lenses
- Code Health 92
- Architecture 100
- Maturity 54
- Readiness 85
- Security 59
Changes since last survey
- 300 commits — 284 feature/other, 16 fixes
By area
- project/plugins.sbt — 100 commits
- (root) — 70 commits
- .github/workflows — 53 commits
- project/build.properties — 31 commits
- zio-cli/shared — 26 commits
- project/BuildHelper.scala — 12 commits
- (repo) — 3 commits
- sbt-zio-cli/src — 1 commit
- website/docs — 1 commit
- website/static — 1 commit
- zio-cli-testkit/shared — 1 commit
- zio-cli/jvm — 1 commit
Notable commits
- fix: Fix #146 (#151)
- fix: Fix --help/--wizard showing wrong subcommand help (#448) — review follow-up (#576)
- fix: Fix default value printing in help string (#244)
- fix: Fix error message for invalid subcommands (#227)
- fix: Fix option collision error rendering (#250)
- fix: Fixed issue-226 (exception when parsing non-key-value-pair) (#229)
- fix: Fixed regex for "-" (#237)
- fix: Fixed scalafmt config. (#208)
- fix: Native and ScalaJS support + ci fixed (#289)
- fix: Revert "Update sbt-scalafix to 0.11.1 (#272)" (#277)
- fix: Try fix Native CI (#483)
- fix: build: fix sbt 2.0.7 build (drop abandoned sbt2-incompatible plugins) (#632)
- fix: fix publishing (#231)
- fix: fix rendering of CliError message/cause (#461)
- fix: fix: remove v (#215)
- fix: fix: site ci (#435)
- change: Accept syntactic IDE suggestions and replace function calls for more direct options (#315)
- change: Add Scaladoc Support (#148)
- change: Add a space between app name and version (#406)
- change: Add support for OAuth2 (#189)
- …and 280 more
Architecture
- 0 containers · 1 bounded contexts · 0 dependency edges (baseline)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
zio/zio-cli was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit c022195bc1f3ec5326f1e8b2e0850a88509e6144 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.