Asynchronous streaming communication library for Clojure providing HTTP, TCP, UDP, and WebSocket servers and clients.
Aleph is an asynchronous streaming communication library for Clojure that provides web servers, web clients, and raw TCP/UDP functionality. It exposes network data as Manifold streams, enabling non-blocking I/O and efficient handling of concurrent connections. The library serves as a drop-in replacement for Ring-compliant servers while offering advanced features like HTTP/2 support and WebSocket communication.
Clojure developers building high-performance network applications, such as web servers, real-time communication systems, or custom protocol implementations that require asynchronous I/O.
Developers choose Aleph for its seamless integration with Clojure's async ecosystem via Manifold, its full compatibility with Ring middleware, and its ability to leverage Netty's performance without sacrificing Clojure's expressiveness. It provides a unified API for multiple protocols while allowing low-level customization when needed.
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.
Fully compliant with the Ring spec, allowing drop-in replacement for existing Ring servers while supporting async handlers via Manifold deferreds, as shown in the server examples.
Leverages Manifold streams and Netty for non-blocking I/O, enabling high concurrency and efficient resource use, with support for HTTP/2 and WebSockets for scalable applications.
Provides unified APIs for HTTP, TCP, UDP, and WebSockets, with streams that can be transformed into various byte representations via byte-streams, as detailed in the TCP and UDP sections.
HTTP client mimics the clj-http API closely, including connection pooling and async DNS, easing migration for developers familiar with clj-http but wanting async benefits.
Lacks support for multipart uploads, CONNECT method, and trailers under HTTP/2, as admitted in the README, forcing compromises for modern protocol features.
Synchronous Ring middleware may not work seamlessly without adaptation using Manifold's let-flow, adding overhead for teams with existing middleware stacks.
Missing some clj-http capabilities like cache support, response-interceptor, and per-request proxy setup, as noted in the client differences, limiting drop-in compatibility.