Spray is a suite of Scala libraries built on top of Akka that offers a modular, asynchronous, and non-blocking toolkit for building and consuming RESTful and HTTP services. The core philosophy behind Spray is that it should act as a “library” for integration and HTTP layers, not as a full application framework—it gives you the building blocks to handle HTTP and REST but doesn’t impose heavy structure. It includes modules for low-level HTTP I/O, routing, client and server APIs, HTTP model (requests/responses), (un)marshalling, servlet adapters, and testing utilities. Its routing DSL offers expressive combinators for defining HTTP endpoints, and its testkit allows route logic to be tested in isolation (even without spinning up actors). It was popular in earlier Scala/Akka stacks but has since been superseded by Akka HTTP as the maintained successor.
Features
- Routing DSL that lets you define HTTP endpoints in a concise, expressive way using path matching, method matching, etc.
- High-performance, non-blocking I/O based on Akka actors for handling many concurrent connections efficiently.
- HTTP server and client functionality (both sides), including streaming, headers, request/response abstractions.
- Integration with caching modules, to reduce repeated expensive responses.
- Testkit support so that services built with Spray can be unit- or integration-tested (including routing, error handling).
- Ability to run inside servlet containers (via “spray-servlet”) so integration with existing Java/Scala web infrastructure is possible.