The Akka HTTP modules implement a full server- and client-side HTTP stack on top of akka-actor and akka-stream. It's not a web-framework but rather a more general toolkit for providing and consuming HTTP-based services. While interaction with a browser is of course also in scope it is not the primary focus of Akka HTTP.

Akka HTTP follows a rather open design and many times offers several different API levels for "doing the same thing". You get to pick the API level of abstraction that is most suitable for your application. This means that, if you have trouble achieving something using a high-level API, there's a good chance that you can get it done with a low-level API, which offers more flexibility but might require you to write more application code.

Akka HTTP is structured into several modules:

A complete, mostly low-level, server- and client-side implementation of HTTP (incl. WebSockets)
Higher-level functionality, like (un)marshalling, (de)compression as well as a powerful DSL for defining HTTP-based APIs on the server-side
A test harness and set of utilities for verifying server-side service implementations
Predefined glue-code for (de)serializing custom types from/to JSON with spray-json
Predefined glue-code for (de)serializing custom types from/to XML with scala-xml