A Clojure library for asynchronous streaming communication over HTTP, WebSockets, TCP, and UDP, built on Netty and Manifold.
Aleph is a Clojure library for asynchronous streaming communication over multiple network protocols, including HTTP, WebSockets, TCP, and UDP. It exposes network data as Manifold streams, allowing developers to handle I/O operations non-blockingly and integrate with various Clojure concurrency primitives. The library provides high-performance wrappers built on Netty while maintaining compatibility with Ring and clj-http APIs.
Clojure developers building networked applications such as web servers, real-time communication systems, or low-level protocol handlers who need asynchronous, high-performance I/O.
Developers choose Aleph for its seamless integration with Clojure's concurrency model via Manifold streams, its full protocol support (HTTP/1, HTTP/2, WebSockets, TCP, UDP), and its balance of simplicity with the raw power of Netty.
Asynchronous streaming communication for Clojure - web server, web client, and raw TCP/UDP
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Exposes network data as Manifold streams, seamlessly convertible to core.async channels or Clojure sequences, enabling non-blocking I/O for protocols like TCP and WebSockets, as shown in the echo handler examples.
Provides high-performance wrappers for HTTP, WebSockets, TCP, and UDP, with HTTP/2 compatibility in both client and server modes, leveraging Netty's flexibility for diverse network needs.
Fully adheres to the Ring spec, allowing drop-in replacement for other servers and supporting async responses via Manifold deferreds for improved scalability, with helpers for middleware adaptation.
Models the clj-http API with async deferred responses, making it familiar for existing users while offering concurrent request handling and configurable connection pools for HTTP/2.
Admits to not supporting multipart uploads, CONNECT method, HTTP/2 trailers, or server push in HTTP/2 mode, limiting its use for advanced HTTP/2 applications as detailed in the README.
Lacks features like :proxy-ignore-hosts, :cache, and :response-interceptor from clj-http, which can hinder migration and require workarounds for specific client needs.
Requires understanding of Manifold streams and deferreds, adding cognitive load for developers not versed in Clojure's async paradigms, especially when integrating with synchronous Ring middleware.