# Awesome Erlang

A curated list of amazingly awesome Erlang libraries, resources and shiny thing inspired by awesome-elixir.

- Awesome Erlang
  - Package Management
  - Release Management
  - Configuration Management
  - Codebase Maintenance
  - Web Frameworks
  - Web Framework Components
  - HTTP
  - Testing
  - Logging
  - Monitoring
  - Deployment
  - Distributed Systems
  - Code Analysis
  - Build Tools
  - Geolocation
  - Debugging
  - Actors
  - Date and Time
  - ORM and Datamapping
  - Queue
  - Authentication
  - Text and Numbers
  - REST and API
  - Caching
  - Third Party APIs
  - Networking
  - Internet of Things
  - Algorithms and Datastructures
  - Translations and Internationalizations
  - Miscellaneous
- Resources
  - Websites
  - Books
  - Web Reading
  - Erlang Reading
  - Screencasts
- Other Awesome Lists
- Contributing

## Package Management

Libraries and tools for package and dependency management.

- hex.pm - A package manager for the Erlang ecosystem.

## Release Management

Libraries and tools for release management.

- relx - A release assembler for Erlang.

## Configuration Management

Libraries and tools related to configuration management.

- stillir - Cache environment variables as Erlang app variables.

## Codebase Maintenance

Libraries and tools to maintain a clean codebase.

- elvis - Erlang Style Reviewer.

## Web Frameworks

Web development frameworks.

- Axiom - A micro-framework, inspired by Ruby’s Sinatra.
- ChicagoBoss - A server framework inspired by Rails and written in Erlang.
- cowboy - A simple HTTP server.
- Giallo - A small and flexible web framework on top of Cowboy.
- MochiWeb - An Erlang library for building lightweight HTTP servers.
- N2O - WebSocket Application Server.
- Nitrogen - Framework to build web applications (including front-end) in pure Erlang.
- Zotonic - High speed, real-time web framework and content management system.

## Web Framework Components

Standalone component from web development frameworks.

- cb_admin - An admin interface for Chicago Boss.
- cb_websocket_controller - A template for implementing a Websocket controller for ChicagoBoss.
- giallo_session - A session management library for the Giallo web framework.
- simple_bridge - An abstraction layer providing a unified interface to popular Erlang web servers (Cowboy, Inets, Mochiweb, Webmachine, and Yaws).

## HTTP

Libraries for working with HTTP and scraping websites.

- bullet - Simple, reliable, efficient streaming for Cowboy.
- gun - Erlang HTTP client with support for HTTP/1.1, SPDY and Websocket.
- hackney - Simple HTTP client in Erlang.
- ibrowse - Erlang HTTP client.
- lhttpc - A lightweight HTTP/1.1 client implemented in Erlang.
- shotgun - For the times you need more than just a gun.

## Testing

Libraries for testing codebases and generating test data.

- PropEr - A QuickCheck-inspired property-based testing tool for Erlang.
- tracerl - Dynamic tracing tests and utilities for Erlang/OTP

## Logging

Libraries for generating and working with log files.

- lager - A logging framework for Erlang/OTP.
- lager_amqp_backend - AMQP RabbitMQ Lager backend.
- lager_hipchat - HipChat backend for lager.
- lager_loggly - Loggly backend for lager.
- lager_smtp - SMTP backend for lager.
- lager_slack - Simple Slack backend for lager.
- logplex - Heroku log router.

## Monitoring

Libraries for gathering metrics and monitoring.

- entop - A top-like Erlang node monitoring tool.
- eper - A loose collection of Erlang Performance related tools.
- Exometer - An Erlang instrumentation package.
- folsom - An Erlang based metrics system inspired by Coda Hale’s metrics.
- statsderl - A statsd Erlang client.
- vmstats - Tiny Erlang app that works in conjunction with statsderl in order to generate information on the Erlang VM for graphite logs.

## Deployment

Libraries and tools related to deployment of Erlang/OTP applications.

- docker-erlang - Basic Docker Container Images for Erlang/OTP.

## Distributed Systems

Tools for stress/load testing, latency issues, etc. across microservices.

- Typhoon - Stress and load testing tool for distributed systems that simulates traffic from a test cluster toward a system-under-test (SUT) and visualizes related latencies. ## Code Analysis Libraries and tools for analysing, parsing and manipulation codebases.

- Concuerror - Concuerror is a systematic testing tool for concurrent Erlang programs.

- eflame - A Flame Graph profiler for Erlang.

- geas - Geas is a tool that will detect the runnable official Erlang release window for your project, including its dependencies and provides many useful informations.

## Build Tools

Project build and automation tools.

- rebar - Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases.
- rebar3 - A build tool for Erlang which can manage Erlang packages from Hex.pm. See more at rebar3.org
- sync - On-the-fly recompiling for Erlang.

## Geolocation

Libraries for geocoding addresses and working with latitudes and longitudes.

- erl-rstar - An Erlang implementation of the R*-tree spacial data structure.
- GeoCouch - A spatial extension for Couchbase and Apache CouchDB.
- Teles - An Erlang network service for manipulating geographic data.

## Debugging

Libraries and tools for debugging code and applications.

- tx - An HTML Erlang term viewer, starts own webserver and displays any term you give it from your Erlang node.

## Actors

Libraries and tools for working with actors and such.

- poolboy - A hunky Erlang worker pool factory.

## Date and Time

Libraries for working with dates and times.

- erlang_localtime - Erlang library for conversion from one local time to another.
- qdate - Erlang date, time, and timezone management: formatting, conversion, and date arithmetic.

## ORM and Datamapping

Libraries that implement object-relational mapping or datamapping techniques.

- boss_db - A sharded, caching, pooling, evented ORM for Erlang.
- epgsql - PostgreSQL Driver for Erlang.
- mysql-otp - MySQL/OTP – MySQL driver for Erlang/OTP.
- pgsql_migration – PostgreSQL migrations for Erlang.

## Queue

Libraries for working with event and task queues.

- dq - Distributed Fault Tolerant Queue library.
- ebqueue - Tiny simple blocking queue in erlang.
- pqueue - Erlang Priority Queues.
- tinymq - A diminutive, in-memory message queue for Erlang.

## Authentication

Libraries for implementing authentications schemes.

- oauth2 - Erlang Oauth2 implementation.

## Text and Numbers

Libraries for parsing and manipulating text and numbers.

- ejsv - Erlang JSON schema validator.
- eql - Erlang with SQL or not.
- jiffy - JSON NIFs for Erlang.
- jsx - An erlang application for consuming, producing and manipulating json.
- miffy - Jiffy wrapper which returns pretty maps.
- qsp - Enhanced query string parser for Erlang.
- rec2json - Generate JSON encoder/decoder from record specs.

## REST and API

Libraries and web tools for developing REST-ful APIs.

- leptus - Leptus is an Erlang REST framework that runs on top of cowboy.
- rooster - rooster is a lightweight REST framework that runs on top of mochiweb.

## Caching

Libraries for caching data.

- cache - In-memory Segmented Cache

## Third Party APIs

Libraries for accessing third party APIs.

- google-token-erlang - Google ID token verifier for Erlang.
- restc - An Erlang REST client
- oauth2c - An Erlang oAuth 2 client (uses restc)

## Networking

Libraries and tools for using network related stuff.

- barrel_tcp - barrel_tcp is a generic TCP acceptor pool with low latency in Erlang.
- gen_rpc - A scalable RPC library for Erlang-VM based languages.
- gen_tcp_server - A library that takes the concept of gen_server and introduces the same mechanics for operating a TCP server.
- gossiperl - Language agnostic gossip middleware and message bus written in Erlang.
- nat_upnp - Erlang library to map your internal port to an external using UNP IGD.
- ranch - Socket acceptor pool for TCP protocols.

## Internet of Things

Libraries and tools for interacting with the physical world.

- GRiSP - Run the Erlang VM on an IoT board with many hardware interfaces and low-level drivers using a small realtime unikernel called RTEMS
- lemma_erlang - A lemma for IDEO’s Noam internet-of-things prototyping platform.

## Algorithms and Datastructures

Libraries and implementations of algorithms and datastructures.

- datum - A pure functional and generic programming for Erlang
- erlando - A set of syntax extensions like currying and monads for Erlang.
- statebox - Erlang state “monad” with merge/conflict-resolution capabilities.
- riak_dt - Erlang library of state based CRDTs.

## Translations and Internationalizations

Libraries providing translations or internationalizations.

## Miscellaneous

Useful libraries or tools that don’t fit in the categories above.

- erlang-history - Hacks to add shell history to Erlang’s shell.
- erld - erld is a small program designed to solve the problem of running Erlang programs as a UNIX daemon.

# Resources

Various resources, such as books, websites and articles, for improving your Erlang development skills and knowledge.

## Websites

Useful web and Erlang-related websites and newsletters.

- Erlang Bookmarks - All about erlang programming language [powerd by community].
- Erlang Central - An awesome collections of erlang resource along with live community chat for discussing and seeking help.
- Planet Erlang - Planet site/RSS feed of blog posts covering topics across the Erlang ecosystem.
- Spawned Shelter - Erlang Spawned Shelter. A collection of the best articles, videos and presentations related to Erlang.

## Books

Fantastic books and e-books.

- Erlang and Elixir for Imperative Programmers - Introduction to Erlang and Elixir in the context of functional concepts by Wolfgang Loder (2016)
- Learn You Some Erlang - Learn you some Erlang - for great good! A very thorough resource covering everything from beginning Erlang programming to large-scale development and deployment.
- Stuff Goes Bad - ERLANG IN ANGER - This book intends to be a little guide about how to be the Erlang medic in a time of war.

## Web Reading

General web-development-related reading materials.

## Erlang Reading

Erlang-releated reading materials.

- The Joy of Erlang; Or, How To Ride A Toruk - The Joy of Erlang; Or, How To Ride A Toruk A fast track introduction to Erlang that teaches the language by walking through a few example projects.

## Screencasts

Cool video tutorials.

# Contributing

Please see CONTRIBUTING for details.

erlang.md Github