Skip to main content
Version: 2.0.x


Integration with other libraries

zio-config is also integrated with enumeratum, cats, scalaz, aws-sdk, zio-aws, refined etc. Note that only a few of them is documented here. refined is already discussed under automatic-validations.


Many applications rely on this beautiful library Zio-config can directly load it from enumeratum's enum without relying on auto-derivation (and rely on Enumeratum's macro indirectly witha additional features).

sealed trait Greeting extends EnumEntry

object Greeting extends Enum[Greeting] {

val values = findValues

case object Hello extends Greeting
case object GoodBye extends Greeting
case object Hi extends Greeting
case object Bye extends Greeting


// Load using zio-config
import zio.config.enumeratum._

val mapProvider =
"greeting" -> "Hello"

val config =

val pgm: IO[Error, Greeting] =

// Returns Hello


Highly polymorphic code end up relying on typeclasses, and zio-config provides instances for Config.

This is a simple example to showcase the capability.

import _root_.scalaz._, Scalaz._
import zio.config.scalaz.instances._

// Across the application, there can be various effect types, but there is only one addition!
def add[F[_]: Applicative, A: Monoid](primary: F[A], secondary: F[A]): F[A] =
primary.<*>(Applicative[F].map(secondary)(secondary => (primary: A) => primary.mappend(secondary)))

// Now even `Config` can take part in this addition given the values of config parameters should be Monoid,
// instead of using native `zip` and separately implementing addition for various types
val configResult = add("marks1"),"marks2")))

ConfigProvider.fromMap(Map("marks1" -> "10", "marks2" -> "20")).load(configResult) // returns 30

In addition to it, it can also load cats/scalaz specific datatypes

import zio.config.scalaz._
import _root_.scalaz.Maybe

val config: Config[Maybe[Int]] = maybe("age"))

Have a look at modules of zio-config to know about other integrations such as aws, zio-aws etc