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.
LibraryFeatures
arrow-core
Companion to Kotlin's standard library
Typed errors, including Raise, Either, and Option
Non-empty collections
Memoized recursive functions
arrow-fx-coroutines
Companion to KotlinX Coroutines
High-level concurrency, including parMap and parZip
Resource management (with suspend)
arrow-autocloseResource management (no suspend)
arrow-resilienceResilience patterns
arrow-optics + arrow-optics-ksp-plugin
Companion to data and sealed classes
Utilities for immutable data
arrow-fx-stmSoftware Transactional Memory (STM)
arrow-atomic
Multiplatform-ready references
Atomic references
arrow-collectors
Companion to fold and reduce
Aggregation with single traversal
arrow-eval
More powerful laziness
Control over evaluation
arrow-functions
Part of arrow-core in 1.x
Utilities for functions
arrow-core-high-arityarrow-core for more than 10 parameters
LibraryIntegrates with
arrow-core-serializationKotlinX Serialization for core types
arrow-cache4kcache4k for memoization
arrow-optics-composeCompose state management with optics
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! 🤩