Skip to content
CAI
Software that uses CAICheck a score

zio/zio-cli

64.8

Adequate · 20 September 2026

7.2k

lines of production code

Scala

primary language

1

measurement over time

CAI band scale
CAI lens gauges

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.