Skip to content
vic

meh/cauldron

I wonder what kind of Elixir is boiling in there.

meh/cauldron.json
{
"createdAt": "2013-05-30T20:27:18Z",
"defaultBranch": "master",
"description": "I wonder what kind of Elixir is boiling in there.",
"fullName": "meh/cauldron",
"homepage": null,
"language": "Elixir",
"name": "cauldron",
"pushedAt": "2017-05-13T15:43:50Z",
"stargazersCount": 72,
"topics": [],
"updatedAt": "2025-01-08T14:16:48Z",
"url": "https://github.com/meh/cauldron"
}

Cauldron - an HTTP/SPDY server as a library

Section titled “Cauldron - an HTTP/SPDY server as a library”

Cauldron is a web server implemented as a library, it’s easy to embed into other applications and fairly easy to implement DSLs on it, an example of a DSL using cauldron is urna.

defmodule Foo do
use Cauldron
# respond to a GET / request with "Hello, World!"
def handle("GET", %URI{path: "/"}, req) do
req |> Request.reply(200, "Hello, World!")
end
end
# open the cauldron on port 8080
Cauldron.start Foo, port: 8080

Because I don’t like how cowboy handles things and there are no other pure Elixir webservers around that I know of.

Right now cauldron is faster than node.js and slower than cowboy, there’ still space for speed improvements but it’s not a high priority right now.

The slowness comes from protocol dispatching in Elixir, protocol consolidation will fix that.

Also we don’t use an hand-crafted decoder like cowboy does but use :erlang.decode_packet.