Bandit
Bandit is a pure Elixir HTTP server for Plug apps. It is currently very much a WiP but is maturing quickly (see below for more information on current and future development plans).
Bandit is written entirely in Elixir and is built atop Thousand Island and as a result can provide scalable and performant HTTP services out of the box. By being the simplest thing that can get from HTTP requests to a Plug interface it is also simple and easy to understand.
Project Goals
- Implement comprehensive support for HTTP/1.0 through HTTP/2 (and eventually beyond) backed by obsessive RFC literacy and automated conformance testing
- Aim for minimal internal policy and HTTP-level configuration. Delegate to Plug as much as possible, and only interpret requests to the extent necessary to safely manage a connection & fulfill the requirements of supporting Plug
- Define & provide a public API for WebSockets in the same vein as Plug to allow for Phoenix to support servers other than Cowboy
- Prioritize (in order): correctness, clarity, performance. Seek to remove the mystery of infrastructure code by being approachable and easy to understand
Development Plan
The roadmap to 1.0 looks more or less like the following:
-
[x]
0.1.xseries: Proof of concept (along with Thousand Island) sufficient to support HAP -
[x]
0.2.xseries: Revise process model to accommodate forthcoming HTTP/2 and WebSocket adapters -
[x]
0.3.xseries: Implement HTTP/2 adapter -
[ ]
0.4.xseries: Re-implement HTTP/1.x adapter -
[ ]
0.5.xseries: Implement WebSocket extension -
[ ]
0.6.xseries: Enhance startup options, complete & revise documentation & tests -
[ ]
0.7.xseries: Integrate with Phoenix
Installation
Bandit is available in Hex. The package can be installed
by adding bandit to your list of dependencies in mix.exs:
def deps do
[
{:bandit, "~> 0.3.0"}
]
endDocumentation can be found at https://hexdocs.pm/bandit.
License
MIT