Skip to main content
Version: 2.0.x



ZIO CLI offers an SBT plugin to provide some tasks to make generation and deployment of applications simple.

Current State

The current functionality of the plugin offers:

Native Images

This SBT plugin depends on and utilizes the sbt-native-image plugin. Tasks and settings related to building a native image map 1:1 to the upstream plugin.

Outstanding Action Items

  • Investigate if any cross versions are needed for different versions of SBT
  • Add remaining corresponding upstream configuration options to pass into the sbt-native-image plugin.
  • Implement zioCliGenerateBashCompletion, when ready.
  • Implement zioCliGenerateZshCompletion, when ready.
  • Implement zioCliInstallCli, when ready.

Plugin Settings

zioCliMainClass: Option[String]

The mainClass of the CLI App in the Compile scope. Defaults to None, and will need to be set.

zioCliNativeImageOptions: Seq[String]

A collection of arguments to pass the native-image builder to customize native image generation. Defaults to


zioCliNativeImageReady: () => Unit

A side-effecting callback that is called the native image is ready. Defaults to

() => {
println("ZIO CLI App Native Image Ready!")

Plugin Tasks

zioCliBuildNative: Unit

Sets mainClass in Compile, and attempts to run nativeImage with any applied nativeImageOptions. Fires zioCliNativeImageReady on success.

zioCliGenerateBashCompletion: Unit

Not currently implemented; prints "TODO: Not Implemented!"

zioCliGenerateZshCompletion: Unit

Not currently implemented; prints "TODO: Not Implemented!"

zioCliInstallCli: Unit

Not currently implemented; prints "TODO: Not Implemented!"

End User Project Setup

There are several steps that are needed to use this in an end user project:

Locally Publishing the Plugin

To compile and locally publish a copy of the SBT plugin, simply call publishLocal on the sbtZioCli project. Example:

sbt> project sbtZioCli
sbt> publishLocal

This will locally publish an artifact: "zio.cli.sbt" % "sbt-zio-cli" % "0.0.0-SNAPSHOT"

End User Project

In your project, configure SBT to use the plugin by adding to project/plugins.sbt:

addSbtPlugin("zio.cli.sbt" % "sbt-zio-cli" % "0.0.0-SNAPSHOT")

Then, enable the plugin for your project in your build.sbt file. Example:

lazy val root = project
CLIPlugin.zioCliMainClass := Some("zio.cli.YourApp")

At this point, you should be able to build a native image of your application with the task:

sbt> zioCliBuildNative