Open-Awesome
CategoriesAlternativesStacksSelf-HostedExplore
Open-Awesome

© 2026 Open-Awesome. Curated for the developer elite.

TermsPrivacyAboutGitHubRSS
  1. Home
  2. Clojure
  3. core.async

core.async

EPL-1.0Clojure

A Clojure library providing facilities for asynchronous programming and communication via channels.

GitHubGitHub
2.0k stars213 forks0 contributors

What is core.async?

core.async is a Clojure library that provides facilities for asynchronous programming and communication through channels. It enables developers to write concurrent code using a channel-based model, similar to Go's goroutines and channels, allowing for better coordination of asynchronous workflows. The library helps solve the problem of managing complex asynchronous operations by offering primitives that make concurrent code more readable and maintainable.

Target Audience

Clojure and ClojureScript developers building concurrent applications, such as web servers, data processing pipelines, or real-time systems. It's particularly useful for those who need to manage multiple asynchronous tasks without resorting to callback-based patterns.

Value Proposition

Developers choose core.async because it integrates seamlessly with Clojure's functional programming model, offering a powerful and expressive way to handle concurrency. Its channel-based approach simplifies asynchronous code, making it easier to compose and reason about compared to traditional callback or future-based solutions.

Overview

Facilities for async programming and communication in Clojure

Use Cases

Best For

  • Building concurrent data processing pipelines in Clojure
  • Managing asynchronous workflows in ClojureScript applications
  • Implementing producer-consumer patterns with channels
  • Writing non-blocking I/O operations in a synchronous style
  • Coordinating multiple asynchronous tasks in web servers
  • Creating real-time event-driven systems

Not Ideal For

  • Projects using other JVM languages like Java or Scala with their own mature concurrency libraries
  • Applications where simple, single-threaded async tasks suffice without complex coordination
  • Teams unfamiliar with CSP (Communicating Sequential Processes) who prefer callback-based patterns
  • Real-time systems requiring ultra-low latency where channel overhead might be non-negligible

Pros & Cons

Pros

Expressive Concurrency Model

Core.async's channels and go blocks allow writing asynchronous code in a synchronous style, avoiding callback hell and making complex workflows manageable, as highlighted in the README's key features.

Seamless Clojure Integration

It integrates with Clojure's functional paradigm, supporting transducers for channel transformations and offering pipeline utilities for data processing, per the feature list.

Cross-Platform Compatibility

Full support for both Clojure and ClojureScript enables async programming across server and browser environments, explicitly mentioned in the project description.

Active Maintenance and Updates

The extensive changelog shows frequent releases with bug fixes and enhancements, such as virtual thread integration in JVM, indicating robust community support.

Cons

Debugging Complexity

The README's changelog is filled with bug fixes for go blocks and exception handling (e.g., ASYNC-169, ASYNC-198), revealing subtle issues that can make debugging challenging.

Steeper Learning Curve

Adopting the channel-based CSP model requires understanding concepts like alts! and pipeline functions, which may not be intuitive for developers used to traditional threading.

Limited Portability

It's tightly coupled to Clojure/ClojureScript ecosystems, so projects in other languages or frameworks cannot leverage it, as evidenced by its dependency on Clojure tools.

Frequently Asked Questions

Quick Stats

Stars2,044
Forks213
Contributors0
Open Issues0
Last commit14 days ago
CreatedSince 2013

Tags

#functional-programming#transducers#clojurescript#async-programming#channels#clojure#message-passing#concurrency

Built With

C
Clojure
C
ClojureScript

Included in

Clojure2.8k
Auto-fetched 1 day ago
Community-curated · Updated weekly · 100% open source

Found a gem we're missing?

Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.

Submit a projectStar on GitHub