Ring is a great foundation for building HTTP servers in Clojure. However, Ring fails to solve many problems that high-performance and transactional HTTP servers must solve:

  • What does the server do when it can't handle the request rate?
  • How can the server dedicate more or fewer resources to different requests?
  • How can long-running HTTP requests be easily developed, without blocking threads?

Spiral attempts to solve these problems by introducing a core.async based API that is backwards compatible with Ring and popular Ring servers, so that you don't need to rewrite your app to take advantage of these techniques.