A modern, Ring-compliant HTTP server and client library for Clojure, built on Vert.x for high performance and ease of use.
Donkey is a Clojure library that provides both an HTTP server and client, designed for building high-performance web applications. It is Ring-compliant, allowing developers to use existing Ring handlers and middleware, while leveraging the non-blocking capabilities of Vert.x and Netty under the hood. The library simplifies creating scalable services with features like flexible routing, static file serving, and built-in metrics.
Clojure developers building web services or APIs who need a performant, non-blocking HTTP stack that integrates smoothly with the Ring ecosystem. It's suitable for teams transitioning from other Ring-based servers or starting new projects requiring high concurrency.
Developers choose Donkey for its combination of Ring compatibility and modern async performance. Unlike pure Ring adapters, it provides a unified client-server architecture with non-blocking defaults, comprehensive metrics, and easy integration with routing libraries—all while maintaining a clean, idiomatic Clojure API.
Modern Clojure HTTP server and client built for ease of use and performance
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Seamlessly works with existing Ring handlers, middleware, and popular routing libraries like Reitit and Compojure, as demonstrated in the README's integration examples.
Built on Vert.x and Netty to handle high concurrency with non-blocking event loops, while offering optional blocking handlers for legacy code, ensuring scalability.
Shares resources between HTTP client and server instances within a single Donkey core, improving efficiency and reducing overhead in applications.
Exposes detailed metrics via Dropwizard for monitoring thread pools, server, and client performance, with configurable prefixes and reporting options.
The project is explicitly marked as no longer maintained, meaning no bug fixes, security patches, or updates, making it unsuitable for long-term use.
Can lead to version conflicts, such as ClassNotFoundException with metrics-core, requiring manual exclusions in dependency files like project.clj or deps.edn.
Debug mode forces a dependency on Logback for dynamic logging, and without it, warnings are issued and debug features are disabled, adding setup complexity.