Ace: HTTP/2 webserver



Access to underlying connection information added 0.16.1

For both HTTP/1 and HTTP/2 it is now possible to access connection information from a worker
Process.get(Ace.HTTP.Connection). This allows inspection and verification of peer certificate. For example allowing a pure Elixir implementation of GRPC.


Access to raw path added in 0.16.3

Gives full control to the user over their applications routing. as well as making it easy to verify the signature of requests.


Better errors and child_specs added in 0.16.4 to help get started.

1. Callback errors

Raxx.ReturnError added to help debug callbacks. Now if a callback returns an invalid value the following error will be raise.

** (ReturnError) Invalid reaction from server module. Response must be complete or include update server state

      # Complete
      |> Raxx.set_body("Hello, World!")

      # New server state
      response = Raxx.response(:ok)
      |> Raxx.set_body(true)
      {[response], new_state}

    Actual value returned was

2. Server child_specs

If a module using Ace.HTTP.Service defines all the required server options it can be added to a supervision tree using a simpler child spec.

# lib/my_app/www.ex
defmodule MyApp.WWW do
  use Ace.HTTP.Service, [port: 8080, cleartext: true]

# lib/my_app/application.ex
children = [
  {MyApp.WWW, [%{config: foo}]}
  # or


Count active connections to a service added in 0.16.6

Thanks to @arturcygan for this contribution.


Bug when receiving multiple headers fixed in 0.16.7


0.16.8 released


  • Formatter check to travis.
  • Dialyzer check to travis.
  • HTTP/1 request backpressure.


  • Internal updates to use serialization and parsing from Raxx project


  • Exit with status :normal in case where set_active call is made on closed socket.


0.17.0 released

Updated to include the changes to the Raxx interface released in Raxx 0.16.0.
See this thread for release notes.


0.18.0 release to separate streaming from simple interface.

Ace HTTP service must now explicitly implement Raxx.SimpleServer or Raxx.Server.


defmodule MyApp.WWW do
  use Ace.HTTP.Service, port: 8080, cleartext: true
  use Raxx.SimpleServer

  @impl Raxx.SimpleServer
  def handle_request(_,_) do

This changes are to facilitate adding middleware to Raxx.


Erroneous warnings from use Raxx.SimpleServer fixed in 0.18.2

Small but helpful fix this one. Thanks ishikawa for providing the solution.


0.18.3 Fix HTTP/2 handling for application data sent as iolist