Notice that we are using the Plug module.

Plugs provide a common interface for handling connections. We’re going to use plugs extensively throughout our elixir apps.

So what is a Plug?

A plug can take two shapes. A function plug receives a connection and a set of options as arguments and returns the connection:


def hello_world_plug(conn, _opts) do
  |> put_resp_content_type("text/html")
  |> send_resp(200, "<h1>Hello world</h1>)

A module plug implements an init/1 function to initialize options, and a call/2 function which received the intialized options and the connection and returns a connection.

defmodule HelloWorldPlug do
  import Plug.Conn
  def init([]), do: false
  def call(conn, _opts), do: conn

A connection represents a Plug.Conn struct which looks like this:

%Plug.Conn{host: "",
           path_info: ["hello", "world"],