AstonJ

AstonJ

We had a thread here recently that mentioned webservers in PHP, and it got me curious about the options in the BEAM world and what everyone is using. Which webservers do you use or plan to use in your apps? :003:

You can select as many options as you like:

Which webserver/s do you use or plan to use? (Select as many as you like)
  • Ace
  • Bandit
  • Chatterbox
  • Cowboy
  • Elli
  • Erlang’s built in inets/httpd
  • Mist
  • Mochiweb
  • Yaws
  • Other - please say in thread!
0 voters

Ace (Elixir)

HTTP web server and client, supports http1 and http2.

https://github.com/CrowdHailer/Ace

Bandit (Elixir)

Bandit is an HTTP server for Plug and Sock apps.

https://github.com/mtrudel/bandit

Chatterbox (Erlang)

HTTP/2 Server for Erlang.

https://github.com/joedevivo/chatterbox

Cowboy (Erlang)

Small, fast, modern HTTP server for Erlang/OTP.

https://github.com/ninenines/cowboy

Elli (Erlang)

Simple, robust and performant Erlang web server.

https://github.com/elli-lib/elli

Erlang’s built in inets/httpd

The HTTP server, also referred to as httpd, handles HTTP requests as described in RFC 2616 with a few exceptions, such as gateway and proxy functionality. The server supports IPv6 as long as the underlying mechanisms also do so.

Mist (Gleam)

A (hopefully) nice, pure Gleam web server.

https://github.com/rawhat/mist

MochiWeb (Erlang)

MochiWeb is an Erlang library for building lightweight HTTP servers.

https://github.com/mochi/mochiweb

Yaws (Erlang)

Yaws webserver

https://github.com/erlyaws/yaws

Showing Posts 16 to 7

soyjeansoy

soyjeansoy

+1 on caddy + docker compose if i wanted to test a staging app via vps

AstonJ

AstonJ OP

In the interest of fairness I have added a vote to each project (I will probably be checking them all out anyway! :003:)

fmn

fmn

Level of polish is incredible - docs, syntax, config format, APIs of the config directives…!

IMO CertMagic is the crown jewel in Caddy’s crown. after months of frustration around ACME/Let’s Encrypt Python client, integrating it with HTTP server/proxy software using some patchwork scripts, in way too many steps, i find how it works for Caddy amazing :slight_smile:

mtrudel

mtrudel

Creator of Bandit

Huge fan of Caddy. It’s a great tool!

Someone was asking about dynamic cert support in Bandit the other day, with an eye towards doing an ACME style server on top of Bandit, see Multiple/dynamic SSL certificates? · Issue #35 · mtrudel/bandit · GitHub for more!

fmn

fmn

So far I stick to Caddy.

tristan

tristan

Rebar3 Core Team

Yea, it is possible either improvements to OTP or the changes made in Cowboy 2 make this moot. And if it does still exist it is also only a concern for a very very small number of users.

It just intrinsically feels it should be better that the decode code is in Erlang to keep consistent and low latency with increased concurrency – but I know, that doesn’t make it true :slight_smile:

As an Elli and Chatterbox user and maintainer (maintaining chatterbox being the painful one) I just wish Bandit was Erlang so I could consider moving on :slight_smile:

mtrudel

mtrudel

Creator of Bandit

The only references I can find specifically to decode_packet being replaced by cowlib dates back to 2013: https://groups.google.com/g/erlang-programming/c/C9OYrllYkpI/m/DeKOVx3rqEAJ

Some perf assertions also from that era: https://groups.google.com/g/erlang-programming/c/tJnDTcgb9L8/m/zd2fpAnCIyYJ

Considering the vintage of those assertions (R16-era), I don’t think they’re terribly relevant any longer, at least not without being corroborated by more contemporary comparisons. This proverbial ‘best before’ date is even more apparent given that benchmarks done both by me and Rawhat (GitHub - rawhat/http-benchmarks: benchmarks for mist, and other webservers · GitHub) indicate that Cowboy’s performance hasn’t kept up.

The 0.6 release train of Bandit is going to be focused entirely on observability, performance and reproducible benchmarking. I expect to get an additional 20% or so perf gains out of Bandit based on this work, which should make it the fastest game in OTP town by a pretty significant measure. Expect work to start late 2022.

m.

tristan

tristan

Rebar3 Core Team
  1. It recall it was described by Loic on the Erlang mailing list. A user was hitting this issue that resulted in the creation of cowlib.Its probably like a decade ago at this point, but should be online in the archives.

  2. This was before cowboy was supporting HTTP 2 and maybe there are some issues in that. Could try a benchmark against cowboy 1 to see what happens.

mtrudel

mtrudel

Creator of Bandit

Bandit author here. Late to the party, but a couple of things:

  1. I’ve looked for historical evidence of decode_packet’s supposed scalability issues but I can’t seem to find anything. Can you point me at some references?

  2. Performance numbers in (synthetic) benchmarks suggest quite the opposite regarding the scalability of cowlib vs. decode_packet. When I was building out GitHub - mtrudel/network_benchmark · GitHub I had to give up on higher concurrency tests as I was unable to get Cowboy to complete them without massive error counts, whereas Bandit hummed along just fine (and indeed grew the performance gap even more on higher concurrency tests).

m.

lpil

lpil

Creator of Gleam

Ah yes! Thanks!

Where Next? Top

Trending in Polls Top

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews