Awesome ZIO
A community driven list of useful ZIO libraries, frameworks and software. Inspired by awesome-python. Other amazingly awesome lists can be found in the awesome-awesomeness list.
Projects with over 500 stargazers are in bold.
Based partial on ZIO documentation.
Table of Contents
Projects
- Rudder: an example about how to manage error ADT in several sub-projects and specialized sub-domains, and how one can gradually contextualize error messages in domain layers. Uses queues, brackets, interop with Java, and historical code. See context and references.
- ZIO AI Platform Backend: Clover Group AI Platform backend, which employs ZIO, Doobie, http4s and Kafka .
- Polynote: a new, polyglot notebook with first-class Scala support, Apache Spark integration, multi-language interoperability including Scala, Python, and SQL, as-you-type autocomplete, and more.
- TicTacToe command line game using Module Pattern by ioleo
- Hello world with ZIO and http4s by maplambda
- STM Partitioning - Code for the 'Exploring the STM functionality in ZIO' blog post
- ZIO Todo Backend by mschuwalow
- Event Driven Messenger by edvmorango
- Zorechka Bot by wix-incubator
- A ZIO + http4s + Circe + Quill + Tapir giter8 template by pandaforme
- More ZIO/http4s: with http4s authentication, encoding/decoding + zio tests by Tim Pigden
- GitHub Release Pager with ZIO by Pavels Sisojevs
- Seed Build Tool: by Tim Nieradzik Build tool for Scala projects
- A Ray tracer built using ZIO to learn environmental effects: by Pierangelo Cecchetto a ray tracer to learn ZIO modules
- zio3D: An experimental 3D game built with ZIO and OpenGL (LWJGL)
- ZIO modules with different implementations - Code for the 'Decouple the Program from its Implementation...' blog post 12/2019 by pme123
- Long Polling with ZIO - Code for the 'What can ZIO do for me?' blog post 11/2019 by pme123
- Full Scala Stack, a sample project that uses akka-http, slick, zio, scalajs, react, ScalablyTyped and semantic ui by Roberto Leibman
- A minimal ZIO giter8 template by jchoffmann
Actors
- ZIO Actors: A high-performance, purely-functional library for building, composing, and supervising typed actors based on ZIO
- ZIO Akka Cluster: A ZIO wrapper for Akka Cluster
Algorithm
- cakeless: Better reader monad for deeply-nested cakes
- zio-saga: Purely functional transaction management with Saga pattern
Config
- ZIO Config: A ZIO based configuration parsing library
Database
- zio-slick: Bridge library between ZIO and Slick Functional Relational Mapping Library
Dependency Injection
- distage: Staged, transparent and debuggable runtime & compile-time Dependency Injection Framework
- zio-email: Purely functional email client
Frameworks
- caliban: Functional GraphQL backend in Scala
- idealingua: API Definition, Data Modeling and RPC Language, optimized for fast prototyping – like gRPC, but with a human face
HTTP
ZIO libraries and wrappers for HTTP clients.
- ZIO HTTP: A ZIO-powered HTTP server and client
- Http4s ★ 732 ⧗ 3 - A minimal, idiomatic Scala interface for HTTP.
- sttp - The Scala HTTP client you always wanted!
- zio-google-cloud-oauth2 - zio-google-cloud-ouath2 is effectful API for Google OAuth 2.0 flows for Scala.
IO
- ZIO NIO: A performant, purely-functional, low-level, and unopinionated wrapper around Java NIO functionality
Logging
ZIO libraries and wrappers for Logging
- logstage: Automatic structural logs from Scala string interpolations
- ZIO Logging: An environmental effect for adding logging into any ZIO application, with choice of pluggable back-ends
- slf4zio: Simple convenience layer on top of SLF4J for ZIO
- zio-slf4j: Referentially transparent logging with slf4j
- zio-interop-log4j2: Fiber aware MDC logging for Log4j 2
Metrics and Monitoring
- ZIO Metric: A high-performance, purely-functional library for adding instrumentation to any application, with a simple web client and JMX support.
- ZIO Telemetry: A ZIO-powered OpenTelemetry library
Misc
- zio-graphviz: Simple Graphviz API for ZIO.
- zio-wayback: ZIO + Wayback Machine API
- Zparkio: Boiler plate framework to use Spark and ZIO together.
NoSQL
- ZIO-JMS: ZIO-JMS adapts JMS API to ZIO streams and makes it working more conveniently and seamlessly integrates ZIO
- ZIO Kafka: A Kafka client for ZIO and ZIO Streams
- zio-kafka-registry: Project to use zio-kafka in combination with the Confluent Schema Registry.
- zio-elasticsearch: ElasticSearch client for Scala based on ZIO and FP by Alberto Paro
- elastic4s: Elasticsearch Scala Client - Reactive, Non Blocking, Type Safe, HTTP Client
- neotypes: A Scala lightweight, type-safe & asynchronous driver for neo4j
- scanamo: Simpler DynamoDB access for Scala
- ZIO SQS: A ZIO-powered client for AWS SQS
- ZIO Keeper: A functional library for consistent replication of metadata across dynamic clusters
- SwayDB: Embeddable persistent & in-memory database
- zio-amqp: ZIO AMQP is a ZIO-based wrapper around the RabbitMQ client. It provides a streaming interface to AMQP queues and helps to prevent you from shooting yourself in the foot with thread-safety issues.
- zio-kinesis: ZIO Kinesis is a ZIO-based wrapper around the AWS Kinesis SDK. All operations are non-blocking. It provides a streaming interface to Kinesis streams.
- zio-rocksdb: A ZIO-based interface to RocksDB.
Sample
Some repositories that contains useful code to look at.
- zio-cookbook: Cookbook apps for ZIO
Official ZIO Libraries
These libraries are hosted in the ZIO organization on Github, and are generally maintained by core contributors to ZIO.
- ZIO Actors: A high-performance, purely-functional library for building, composing, and supervising typed actors based on ZIO
- ZIO Akka Cluster: A ZIO wrapper for Akka Cluster
- ZIO Config: A ZIO based configuration parsing library
- ZIO HTTP: A ZIO-powered HTTP server and client
- ZIO Kafka: A Kafka client for ZIO and ZIO Streams
- ZIO Keeper: A functional library for consistent replication of metadata across dynamic clusters
- ZIO Logging: An environmental effect for adding logging into any ZIO application, with choice of pluggable back-ends
- ZIO NIO: A performant, purely-functional, low-level, and unopinionated wrapper around Java NIO functionality
- ZIO SQS: A ZIO-powered client for AWS SQS
- ZIO Telemetry: A ZIO-powered OpenTelemetry library
Blog Articles
These articles reflect the state of ZIO at the time of their publication. The code samples might be outdated, considering ZIO was early in development at the time they were written. However, the concepts are still relevant.
- Effective testing with ZIO Test by Pavels Sisojevs (January 2020)
- Implementing your future with ZIO By Pavels Sisojevs (December 2019)
- How to write a command line application with ZIO? by Piotr Gołębiewski (November 2019)
- Simulating IoT Events with ZIO Streams by Tim Pigden (November 2019)
- Speeding up time with ZIO TestClock by Tim Pigden (October 2019)
- ZIO with http4s, Auth, Codecs and zio-tests by Tim Pigden (October 2019)
- Functional dependency injection in Scala using ZIO environments by Chiel van de Steeg (October 2019)
- Making ZIO, Akka and Slick play together nicely by Jakub Czuchnowski (August 2019)
- Wrapping impure code with ZIO by Pierre Ricadat (July 2019)
- Combining ZIO and Akka to enable distributed FP in Scala by Pierre Ricadat (July 2019)
- tAPIr’s Endpoint meets ZIO’s IO by Adam Warski (July 2019)
- ZIO with http4s and doobie by Wiem Zine Elabadine (June 2019)
- Thread shifting in cats-effect and ZIO by Adam Warski (June 2019)
- Exploring the STM functionality in ZIO by Fredrik Skogberg (May 2019)
- Performant Functional Programming to the Max with ZIO by Mark Galea (May 2019)
- Using 47 Degree's Fetch library with ZIO by Justin Heyes-Jones (May 2019)
- ZIO & Cats Effect: A Match Made in Heaven by John De Goes (April 2019)
- Hacker News API Part 5 by Justin Heyes-Jones (April 2019)
- Testing Incrementally with ZIO Environment by John De Goes (March 2019)
- Beautiful, Simple, Testable Functional Effects for Scala (introducing ZIO Environment) by John De Goes (February 2019)
- Thread Pool Best Practices with ZIO by John De Goes (January 2019)
- Building the Hangman Game using ScalaZ ZIO by Abhishek Srivastava (November 2018)
- Elevator Control System using ZIO by Wiem Zine Elabadine (September 2018)
- Scalaz 8 IO vs Akka (typed) Actors vs Monix (part 1) + part 2 + part 3 by Adam Warski (June 2018)
- Bifunctor IO: A Step Away from Dynamically-Typed Error Handling by John De Goes (May 2018)
Talks
- Magic Tricks with Functional Effects by John A. De Goes (November 2019)
- 12 Steps To Better Scala (Part I) by John De Goes (October 2019)
- Upgrade Your Future by John De Goes (September 2019)
- One Monad to Rule Them All by John De Goes (August 2019)
- Functional Concurrency in Scala with ZIO by Itamar Ravid (June 2019)
- Error Management: Future vs ZIO by John De Goes and Kai (May 2019)
- Atomically { Delete Your Actors } by John De Goes and Wiem Zine Elabadine (April 2019)
- Thinking Functionally by John De Goes (March 2019)
- Tour of ZIO by Oleksandra Holubitska (March 2019)
- The Death of Tagless Final by John De Goes (February 2019)
- ZIO Queue by Wiem Zine Elabadine (January 2019)
- ZIO Stream: Rebirth by John De Goes and Itamar Ravid (November 2018)
- ZIO Schedule: Conquering Flakiness and Recurrence with Pure Functional Programming by John De Goes (October 2018)
- ZIO: Next-Generation Effects in Scala by John De Goes (October 2018)
- ZIO Queue: A new Queue for a new Era by John De Goes (September 2018)
News
- ZIO News 1: ZIO News 1
- ZIO News 2: ZIO News 2
CheatSheet
Support
Contributing
- Make sure you are about to post a valuable resource that belongs to this list
- Do NOT group ++Add and --Remove changes in same PR. Make them separate pull requests
- Use spellchecker
- All spelling and grammar corrections are welcome (except for the rule above)
- Fork this repo, do your edits, send the pull request
- Feel free to create any new sections
- Do not even try to add this repo to any awesome-awesome-* lists