# Hell v0.1.0 - Table of Contents

> A simple & modern pure Elixir socket server

## Pages

- [Migrating from Thousand Island to Hell](migration.md)

- Changelog
  - [Changelog](changelog.md)

## Modules

- [Hell](Hell.md): Hell is a modern, pure Elixir socket server, inspired heavily by
[ranch](https://github.com/ninenines/ranch). It aims to be easy to understand
& reason about, while also being at least as stable and performant as alternatives.
- [Hell.Handler](Hell.Handler.md): `Hell.Handler` defines the behaviour required of the application layer of a Hell server. When starting a
Hell server, you must pass the name of a module implementing this behaviour as the `handler_module` parameter.
Hell will then use the specified module to handle each connection that is made to the server.
- [Hell.HandlerConfig](Hell.HandlerConfig.md): A minimal config struct containing only the fields needed by connection handlers.
- [Hell.Logger](Hell.Logger.md): Logging conveniences for Hell servers
- [Hell.ServerConfig](Hell.ServerConfig.md): Encapsulates the configuration of a Hell server instance
- [Hell.Socket](Hell.Socket.md): Encapsulates a client connection's underlying socket, providing a facility to
read, write, and otherwise manipulate a connection from a client.

- [Hell.Telemetry](Hell.Telemetry.md): The following telemetry spans are emitted by hell

- Transport
  - [Hell.Transport](Hell.Transport.md): This module describes the behaviour required for Hell to interact
with low-level sockets. It is largely internal to Hell, however users
are free to implement their own versions of this behaviour backed by whatever
underlying transport they choose. Such a module can be used in Hell
by passing its name as the `transport_module` option when starting up a server,
as described in `Hell`.

  - [Hell.Transports.SSL](Hell.Transports.SSL.md): Defines a `Hell.Transport` implementation based on TCP SSL sockets
as provided by Erlang's `:ssl` module. For the most part, users of Hell
will only ever need to deal with this module via `transport_options`
passed to `Hell` at startup time. A complete list of such options
is defined via the `t::ssl.tls_server_option/0` type. This list can be somewhat
difficult to decipher; by far the most common values to pass to this transport
are the following
  - [Hell.Transports.TCP](Hell.Transports.TCP.md): Defines a `Hell.Transport` implementation based on clear TCP sockets
as provided by Erlang's `:gen_tcp` module. For the most part, users of Hell
will only ever need to deal with this module via `transport_options`
passed to `Hell` at startup time. A complete list of such options
is defined via the `t::gen_tcp.listen_option/0` type. This list can be somewhat
difficult to decipher; by far the most common value to pass to this transport
is the following

