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.
Our summary is designed to help you find your way in the Arrow ecosystem.
Quickstart
Gradle or Maven, JVM or Multiplatform, Arrow fits in all your projects
Typed errors
Learn how to work with typed errors
Coroutines
Concurrency and parallelism
Resilience
Act in an organized way when failures occur
Immutable data
Concise ways to handle immutable data
Collections and functions
Utilities for more productive basics
Design
Recipes for designing nice Kotlin code
Integrations
Playing nice with the rest of the 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.
Library | Features |
---|---|
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-autoclose | Resource management (no suspend ) |
arrow-resilience | Resilience patterns |
arrow-optics + arrow-optics-ksp-plugin Companion to data and sealed classes | Utilities for immutable data |
arrow-fx-stm | Software 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-arity | arrow-core for more than 10 parameters |
Library | Integrates with |
---|---|
arrow-core-serialization | KotlinX Serialization for core types |
arrow-cache4k | cache4k for memoization |
arrow-optics-compose | Compose state management with optics |
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! 🤩