Plug v1.3.0 Plug.Debugger

A module (not a plug) for debugging in development.

This module is commonly used within a Plug.Builder or a Plug.Router and it wraps the call/2 function.

Notice Plug.Debugger does not catch errors, as errors should still propagate so that the Elixir process finishes with the proper reason. This module does not perform any logging either, as all logging is done by the web server handler.

Note: If this module is used with Plug.ErrorHandler, only one of them will effectively handle errors. For this reason, it is recommended that Plug.Debugger is used before Plug.ErrorHandler and only in particular environments, like :dev.


defmodule MyApp do
  use Plug.Builder

  if Mix.env == :dev do
    use Plug.Debugger, otp_app: :my_app

  plug :boom

  def boom(conn, _) do
    # Error raised here will be caught and displayed in a debug page
    # complete with a stacktrace and other helpful info.
    raise "oops"


  • :otp_app - the OTP application that is using Plug. This option is used to filter stacktraces that belong only to the given application.
  • :style - custom styles (see below)

Custom styles

You may pass a :style option to customize the look of the HTML page.

use Plug.Debugger, style:
  [primary: "#c0392b", logo: "data:image/png;base64,..."]

The following keys are available:

  • :primary - primary color
  • :accent - accent color
  • :logo - logo URI, or nil to disable

The :logo is preferred to be a base64-encoded data URI so not to make any external requests, though external URLs (eg, https://...) are supported.

If a PLUG_EDITOR environment variable is set, Plug.Debugger will use it to generate links to your text editor. The variable should be set with __FILE__ and __LINE__ placeholders which will be correctly replaced. For example (with the TextMate editor):