Skip to main content


Arrow aims to bring idiomatic functional programming to Kotlin. This means Arrow is inspired by the great work made in other functional programming communities, yet exposes these ideas and concepts in ways that do not feel alien to Kotlin programmers.

Arrow comprises different libraries, each improving or extending one commonly-used library in the Kotlin ecosystem or a particular Kotlin language feature.

In a rush?

Our summary is designed to help you find your way in the Arrow ecosystem.

Each section in the documentation roughly corresponds to one of the libraries that compose Arrow.

  • In our Quickstart, you can read how to introduce Arrow in your project.
  • No library lives in a vacuum, and Arrow enjoys integrations with many other popular Kotlin libraries.
  • We also provide guidance on broader design and architecture using functional programming concepts.
Companion to Kotlin's standard library
Typed errors, including Raise, Either, and Option
Non-empty collections
Utilities for functions and memoization
Companion to KotlinX Coroutines
High-level concurrency, including parMap and parZip
Resource management
arrow-resilienceResilience patterns
arrow-fx-stmSoftware Transactional Memory (STM)
arrow-optics + arrow-optics-ksp-plugin
Companion to data and sealed classes
Utilities for immutable data
Multiplatform-ready references
Atomic references
We'd love to hear from you!

We're always looking for ways to improve the libraries and the documentation. Feel free to open an issue in our repository with any suggestions or feedback. Thanks in advance! 🤩