· About
· Downloads
· Links
· FAQs + mailing lists
· Enhancements
· Getting started
· Documentation
· Examples
· Mirrors

Erlang Books

For comments or questions about this site, contact

Unsupported User Contributions

We no longer accept new contributions. The contributions here might be moved to user contributions in the future.

Also note that some of the contributions have newer versions at Jungerl.

One Line Summaries

    ApplicationDate modifiedSummary
    anal-1.0Nov 30, 1998A clever and fast number analyser
    assoc-1.2Nov 30, 1998Associative arrays
    bucket_grid-1.0Jan 27, 2000N-dimensional bucket grid
    byteorder-1.0Feb 17, 1999Test for MSB/LSB byte order.
    ccviewer-1.1Sep 21, 2000Web-based source code browser
    depcheck-1.0Oct 29, 1999A program that checks validity of external references
    deque-1.0Oct 26, 1999Implementation of double ended queues
    diff-1.0Nov 30, 1998Finds the difference between two files
    dispatcher-1.0May 19, 1999A generic method for dispatching dynamic worker threads
    dynarray-1.0Feb 11, 1999Expanding array for heap-based storage
    ehtml-2.0Dec 1, 1998Extended HTML
    email-1.0Nov 30, 1998Send email - parse email - automate email jobs
    epop-2.9Apr 30, 1999A POP3 client/server package
    erlsnoop-1.0Oct 31, 2001A network sniffer for Erlang traffic
    ermake-2.0Dec 1, 1998Make in Erlang
    erpc-0.9Feb 7, 2001Remote Procedure Calls without using Erlang distribution
    esoko-2001.0709Jul 9, 2001Classic puzzle game of Sokoban
    eweb-1.1Aug 30, 2000A system for literate erlang programming
    ex11-0.11Mar 11, 1999An Erlang-X11 binding.
    filesystem-1.0Jan 13, 1999Platform-independent File system operations
    fuz-1.0Dec 13, 1999Simple Fuzzy Logic Evaluator
    gdc-1.0Apr 30, 1999Great Digital Clock, using IG and the curses library.
    gif-1.0Nov 30, 1998Produce GIF pictures from an Erlang program.
    graph_draw-0.0Nov 15, 2001Interactive graphical graph drawing for programs to display there data
    gridfile-1.0Jan 26, 1999Adaptable, Symmetric Multikey File Structure
    gs_dialog-2001.1101Nov 2, 2001Dialog box behaviour for GS
    ibrowse-1.0May 18, 2005 NEW!Powerful HTTP client
    lines-1.1Apr 14, 2000Efficient array of lines (e.g. for text editor)
    locker-1.1Jul 19, 2000Efficient and scalable read-write locker.
    mdisp-1.0Dec 20, 2002A generic method for dispatching dynamic worker threads
    mlex-1.0Oct 21, 2002Lexical scanner.
    nedit_mode-0.9Mar 20, 2000Erlang Nedit mode
    nfs-1.0Sep 13, 2001NFS server
    othello-1.0Nov 30, 1998The Othello game
    parser_tutorial-1.0Nov 30, 1998An example of the use of yecc and leex
    pppgraph-1.0Jun 3, 2000Graphic display of PPP statistics
    prettypr-1.0Sep 8, 2000A generic, flexible pretty printing library.
    property_file-0.1Oct 21, 2002Configuration file parser.
    py_interface-0.92Jul 28, 2004The py_interface is a Python-implementation of an Erlang node.
    ral-1.0Jan 8, 2001Skew-binary random-access lists, ala Chris Okasaki
    rdbms-1.3Jan 3, 2000Relational Database Management System based on mnesia
    reshd-1.2Jul 21, 2002Remote Erlang shell daemon
    rpc-1.1Sep 3, 2001ONC/RPC stub generator and library
    sablotron-1.0Feb 5, 2001Erlang bind for Sablotron, a C++ XSL processor
    safedets-1.0Sep 29, 1999A version of dets that never enters the repair mode
    serial-1.0Nov 18, 1999Serial driver for UNIX.
    service_broker-1.0Oct 21, 1999Brokering and supervision of services
    shbuf-1.1May 15, 2001Erlang server for sharing Emacs buffers & Emacs-Lisp client
    slang-1.0Apr 26, 2001terminal library for Erlang
    smtp_client-1.1Jan 8, 2004Simple SMTP client using gen_fsm behaviour
    stl-1.0Sep 21, 2001Web template processing system.
    syslog-1.0Jan 26, 1999Interface to the Unix syslog facility.
    tdb-0.9Feb 10, 1999TTY interface to the Erlang dubugger.
    timer_mn-1.1Apr 7, 2000Timer for large numbers of concurrent timers.
    top-1.0Apr 30, 1999TOP display information about processes
    trex-2.6Sep 28, 2000A GUI to mnesia and ets.
    ucs-0.3Oct 17, 2002Simple Universal Character Set support (UCS, ISO 10646, Unicode)
    unixdom-0.1Sep 19, 2001A UNIX-domain socket driver
    uue-1.0Nov 30, 1998UUencode and uudecode in plain erlang
    view_backup-1.0Sep 8, 1999Simple program for loading mnesia backup files
    www_tools-1.0Nov 30, 1998Tools for fetching and manipulating WWW pages
    xmerl-0.17Mar 7, 2002XML processing tools
    xml_lt-2.0Nov 6, 2000Verifying XML parser
    xmlrpc-1.13Apr 23, 2003An XML-RPC client/server library
    xx-1.0Nov 30, 1998X number of eXpanding macros

The Programs

anal-1.0.tgz - Claes Wikstrom, 
This is a fast number analyser which avoids searching the multiway tree for each access, rather the previous search work is accumulated by means of integer arithmetics

assoc-1.2.tgz - Dan Sahlin, 
Associative arrays with operations for inserting, finding, deleting(including largest and smallest item), combining arrays, stepping through (forwards and backwards), converting to and from lists, map, fold (left and right). Most operations are O(lg n).

bucket_grid-1.0.tgz - Ulf Wiger, 
Implements an N-dimensional bucket storage system. Neighbouring buckets can be split and merged in any dimension, and using any Erlang term as split value; grid traversal and range matching allow for efficient multikey queries. The physical representation is implemented via a callback interface (see example).

byteorder-1.0.tgz - Torbjörn Törnkvist, 
This little program test whether we are running on a big-endian/little-endian machine. It makes use of a tiny dynamically linked in driver.

ccviewer-1.1.tgz - Ulf Wiger, 
Implements an web-based source code browser. CCviewer is designed to provide a web-based interface to a ClearCase repository of Erlang source code. It provides hypertext linking of source code, and statics cross-references analysis. With modest changes, it should work against other version control systems.

depcheck-1.0.tgz - Peter Andersson, 
Depcheck is a program for finding incorrect module dependencies. Given a source module, it will attempt to locate the dependency modules and validate the function calls. The dependency modules are scanned syntactically, not parsed. (The source module needs to be compilable and is analysed using exref).

deque-1.0.tgz - Claes Wikström, 
This is an implementation of double ended queues, as described in 'Purely Functional Data structures' by Chris Okasaki

diff-1.0.tgz - Joe Armstrong, 
A diff utilitiy which finds the difference between two files. Unlike unix diff, this version of diff compares the parse trees and not the src text.

dispatcher-1.0.tgz - Ulf Wiger, 
Allows for processes to be dynamically created and 'suspended'. The threads themselves believe that they stay up permanently.Included is a demo program and a gen_server-compatible behaviour.

dynarray-1.0.tgz - Ulf Wiger, 
Implements an efficient dynamically expanding array for heap-based storage. Performance matches that of ets even on relatively small objects. Since it mimics an array, objects are identified via their position (integer) in the array.

ehtml-2.0.tgz - Joe Armstrong, 
This is a macro process which expands extended HTML. Extended HTML is normal HTML with embedded Erlang expressions. The embedded expressions are evaluated and pasted into the resulting document

email-1.0.tgz - Joe Armstrong, 
A number of utilites for manipulating email. The most useful is something which might be described as "send" and "receive" in email,with this you can send and receive Erlang terms as e-mail messages. These programs are *very* useful for building e-mail servers. Read the full docmentation for more details.

epop-2.9.tgz - Torbjörn Törnkvist, 
Epop is a complete POP3 client/server package implemented according to RFC-1939. Epop also support RFC-2449. With epop it is possible to both store mail as well as read mail. Since epop is compliant with RFC-1939 it is also possible for epop to act either as a client or a server, talking with other POP3 software.

erlsnoop-1.0.tgz - Gordon Beaton, 
Erlsnoop is a simple network sniffer that can identify and display the contents of Erlang messages passing on the network, in a manner similar to tcpdump

ermake-2.0.tgz - Joe Armstrong, 
This is a simple implementation of make in Erlang. This version supports 1) Macros, 2) Include files, 3) suffix rules, and 4) file dependencies

erpc-0.9.tgz - Sean Hinde, 
This provides a socket based multithreaded inter Erlang node Remote Procedure Call mechanism which is independent of the standard Erlang distribution. It provides some security mechanisms, and can optionally be setup to queue calls in the event of a link failure and send them sometime later at a predefined rate while preserving the order of all commands.

esoko-2001.0709.tgz - Chris Pressey, 
This is an Erlang implementation of the challenging puzzle game of Sokoban, where you must push objects towards a goal inside an enclosed space. This version uses GS for display; the puzzle screens are borrowed from the xsokoban distribution.

eweb-1.1.tgz - Joe Armstrong, 
This is a program for literate Erlang programming

ex11-0.11.tgz - Torbjörn Törnkvist, 
This is an Erlang-X11 binding. Yes, that's right, a binding ! Not another interface to a toolkit. This is the X11 protocol implemented solely in Erlang. The release version indicates how much of the protocol that has been implemented so far (i.e Ver: 0.1 == 10%). However, this package also consists of a complete framework for the protocol implementation, so the rest of the protocol would be very easy to implement. (I estimate that the remaining 90% of the protocol could be implemented in 2-3 weeks). However, before anymore of the protocol is implemented it is suggested that we await the new Erlang bitsyntax. A 'cool' example program comes along with the package. <b>NB: ex11 is the new name and replaces the old name x11</b>.

filesystem-1.0.tgz - Ulf Wiger, 
Implements common filesystem operations in a platform-independent way. (so far only tested on Solaris...)functions: ls(Pattern), find(Dir, Pattern), cwd(), verify_dir(Dir), remove_dir(Dir), set_permission(Mode,Filename)

fuz-1.0.tgz - Ulf Wiger, 
Implements a simple Fuzzy Logic Evaluator. A basic example (Crane Controller) is provided to show how it works. The evaluator seems to perform roughly like a low-cost 8-bit controller when run on a standard workstation. Example Useage: fuz:eval(fuz_crane, control, [Distance, Angle]).

gdc-1.0.tgz - Torbjorn Tornkvist, 
GDC uses the curses library to display a Great Digital Clock. GDC is an example which shows how Erlang can be started by a C program, communicating over an IG generated interface.

gif-1.0.tgz - Joe Armstrong, 
gif.erl provides an interface to gd.1.1.1 a library of C programs which can manipulate GIF images

graph_draw-0.0.tgz - Hans Nilsson, 
This is a set of modules to help programs to graphically present graphs to a person. The person could rearange the graph and the system will keep those positions if the graph is changed by the program.

gridfile-1.0.tgz - Ulf Wiger, 
Implements efficient storage for multikey access. API is similar to ets and dets. Performance is especially good on range queries, where the cost is proportional to the number of objects found - not on the size of the table.

gs_dialog-2001.1101.tgz - Chris Pressey, 
A library application providing an extensible behaviour for dialog boxes under GS, as well as some common dialogs built upon it, including notify, confirm, question, entry, list-select, and color-edit dialogs.

ibrowse-1.0.tgz - Chandrashekhar Mullaparthi, 
A powerful HTTP client written in erlang. Supports HTTP/0.9, HTTP/1.0 and HTTP/1.1

lines-1.1.tgz - Ulf Wiger, 
Implements an efficient array of lines. The lines module allows for efficient manipulation of a dynamic array, where elements can be inserted, modified and deleted anywhere in the array, while an absolute order (e.g. line number) must be maintained. Operations supported are append, insert, insert_after, delete, replace, and of course nth. Even on a large number of elements, access times are in the order <30 microseconds. lines-1.1 fixes a pattern-matching bug in nth/1.

locker-1.1.tgz - Ulf Wiger, 
A read-write locker based on a redundant-master-slave concept. This locker is generally much faster than global -- more so in large networks. Locker nodes are specified as either peers or slaves; one peer is made the master locker (automatically, or manually). All lock negotiation takes place on the master, and lock info is replicated to all the peers (which are standby for the master.) The locker handles both shared and exclusive locks, as well as lock promotion (from shared to exclusive.) This is a slightly modified version of a locker implementation used in the AXD 301 switch. Co-author: Asko Husso <>

mdisp-1.0.tgz - Ulf Wiger, 
Allows for processes to be dynamically created and 'suspended'. The threads themselves believe that they stay up permanently. Mdisp replaces dispatcher-1.0. The two are not compatible. Mdisp offers a cleaner interface and better performance.

mlex-1.0.tgz - Vladimir Sekissov, 
MLex is a simple lexical scanner.It supports mostly all frequently used lex regexps, predictive operator, long (default) and short regexps.

nedit_mode-0.9.tgz - Daniel Solaz, 
Erlang syntax highlighting mode for Nedit 5.

nfs-1.0.tgz - Luke Gorrie, 
Extensible, minimal NFS v2 server. Includes a "/proc" example filesystem.

othello-1.0.tgz - Magnus Fröberg, Torbjörn Törnkvist, 
This is an implementation of the game Othello. Take a break, relax your brain, and have some fun trying to beat the computer in a game of Othello

parser_tutorial-1.0.tgz - Joe Armstrong, 
This is an example of making a parser using the standard tools yecc (which is a yacc lookalike) and leex (which is a lex lookalike). A parser for a simple language is constructed

pppgraph-1.0.tgz - Lars Bjornfot, 
Display receive and transmit rates in byte/s, updated every second. Need pppstats(8). Runs on at least Red Hat Linux.

prettypr-1.0.tgz - Richard Carlsson, 
The `prettypr' module provides a powerful library of functions for flexible, generic and fast pretty printing.

property_file-0.1.tgz - Vladimir Sekissov, 
This is configuration files parser.It is property_lists module compliant and supports two popular configuration formats, Apache and C-like,property substitution and file inclusion. It works with Unix, DOS and Mac files.

py_interface-0.92.tgz - Tomas Abrahamsson, 
The py_interface provides the possibility to run a python node that may be used for communication with other Erlang nodes. This release contains bugfixes for packing/unpacking of terms on the python side.

ral-1.0.tgz - Lon Willett, 
This is an implementation of skew-binary random-access lists, as described Chris Okasaki (see reference at start of source). It also provides many useful supporting functions (mostly clones of the lists module functions).

rdbms-1.3.tgz - Ulf Wiger, 
Adds relational constraints checking to mnesia. Also included is a modular data import tool. This version of RDBMS has been tested to work on OTP R6B (mnesia-3.8). Also, a bug concerning commit- and rollback triggers has been fixed. Minor bug fixes since 1.2 -- see the README file.

reshd-1.2.tgz - Tomas Abrahamsson, 
Reshd stands for remote Erlang shell daemon. It offers a telnet port into an Erlang shell in the Erlang node.

rpc-1.1.tgz - Tony Rogvall, Scott Fritchie, Jim Larson, Martin Bjorklund, 
This is a stub generator for the ONC/RPC protocol. Given a protocol specification in the RPC syntax (RFC1831), the stub generator will create client-side and server-side code for encoding and decoding procedure calls into XDR-encoded network messages. Version 1.1 is rewritten for R7 - faster XDR routines which generates less garbage.

sablotron-1.0.tgz - Victor M. Gulias, 
This is an adapter for a C++ XSL processor (sablotron) that allows Erlang programmers to perform transformations of XML data (binary or file) using an XSL stylesheet (binary or file)

safedets-1.0.tgz - Claes Wikstrom, 
This module xports exactly the same interface as the original dets module in erlang 47.4.1 with the exceptio that the {ok, Handle} that is returned by the open_file/2 function can only be used by the the process that issued the open_file/2 The idea here is to use two dets files instead of one All write ops go into one dets file as well as into a log. Whenever ?WRITE_THRESHOLD write ops have been done, the log is transfered into the second dets file **while** the original dets file is closed. This way we get dets files that can be opened for writing at runtime and they will never be subject to repair. This means that we can have very very large dets files. The time to repair a dets file with say 1.000.000 objects in it can be very large, maybe upto 12 hours which typically is not acceptable . the downside is that that write ops take more than twice the time (in mean) to execute as well the file space which is doubled.

serial-1.0.tgz - Johan Bevemyr, 
This is a port program with erlang driver for serial communication.

service_broker-1.0.tgz - Hakan Mattsson, 
Brokering and supervision of services for service providers and their users. When either part of the service dies or selects to disconnect from the service, the other part is notified about this. The service broker may be for many purposes, such as dynamic syncronizing of application startup, protocol negotiations, inter application supervision, implementation of safe calls etc. A man page (as comment in the module) and test program are also supplied.

shbuf-1.1.tgz - Luke Gorrie, 
An Erlang server for sharing Emacs buffers across the network. Includes: Erlang server, Erlang data structure for large buffers of text, Emacs client library for Erlang external term format, and an Emacs client for the sharing server.

slang-1.0.tgz - Claes Wikstrom, 
This is a library which makes it possible to write terminal based aplications al'a vi/emacs/mutt/slrn in erlang.

smtp_client-1.1.tgz - Michael Bradford, 
A simple SMTP client using gen_fsm behaviour. Supports basic SMTP & ESMTP commands, including MD5, plain & login authentication. This version fixes a minor bug in v1.0 (see source code for details). Also included is email_msg.erl. This very simple module builds a plain text email suitable for sending via the smtp client.

stl-1.0.tgz - Vladimir Sekissov, 
STL as `Simple Template Language' is a clone of Bruce R. Lewis's BRL ( implemented in Erlang. It deals with template processing and has most capabilities which user expects from web template engines.

syslog-1.0.tgz - Torbjorn Tornkvist, 
This is a simple interface to the Unix syslog facility.

tdb-0.9.tgz - Torbjorn Tornkvist, 
If you don't like cluttering your screen with windows, or if you do/can not use a window system, then this TTY interface for the Erlang debugger may be something for you. With this interface you can do almost anything you can do with the X-based interface.

timer_mn-1.1.tgz - Sean Hinde, 
This application re-implements the standard timer module towork for very large numbers of concurrent timers.This implementation uses an mnesia ordered_set table to holdthe timers, which is much more scaleable than the ordered listused in the standard timer module.

top-1.0.tgz - Torbjorn Tornkvist, 
somewhat similar to Unix top. This programs displays information about the running Erlang processes in you system. The output can be customized in various way to be sorted on for example number of reductions made since last call or change in heap size since lats call, etc...

trex-2.6.tgz - Leif Lorentzen, 
This is a Graphical User Interface which make it easy to explore mnesia and ets tables. With trex you can read, write and search in mnesia/ets tables, dump the tables to a file and look at it off-line, log updates to mnesia tables for debugging purposes, among other things.

ucs-0.3.tgz - Lon Willett, 
This module provides some basic support for decoding, encoding, and handling ISO 10646 character strings (Universal Character Set strings, aka Unicode, sort of). See the file ucs.doc for details. The latest version can be found at

unixdom-0.1.tgz - Scott Lystig Fritchie, 
This is an incomplete implementation of a UNIX-domain socket driver for the Erlang VM. It was originally written while I was at Sendmail, Inc. All of the major functions work, though the timeout-handling code is probably flaky. Under Solaris/SPARC, we saw roughly a 10% improvement in bulk data throughput using this driver versus using TCP across the loopback interface.

uue-1.0.tgz - Joe Armstrong, 
UUencode and uudeocde written i plain Erlang. This is useful if you want to write portable applications.

view_backup-1.0.tgz - Ulf Wiger, 
Simple program for loading a mnesia backup file into memory. API: view_backup:file("Filename") -> ok. The function loads mnesia data into ets tables with the same names as the corresp. mnesia tables. Table definitions are put in the table 'SCHEMA'. The result may be viewed with e.g. table visualiser or trex.

www_tools-1.0.tgz - Joe Armstrong, 
WWW tools is a package of tools for fetching and manipulating web pages. The programs in this package illustrate how to fetch a URL using the Erlang socket interface, we show how to tokenise and analysis HTML and also provide a simple macro processor for HTML.

xmerl-0.17.tgz - Ulf Wiger, Johan Blom, Richard Carlsson, Mickael Remond, 
Implements a set of tools for processing XML documents, as well as working with XML-like structures in Erlang. The main attraction so far is a single-pass, highly customizable XML processor. Other components are an export/translation facility and an XPATH query engine. This version fixes a few bugs in the scanner, and improves HTML export. The latest version can be found at Note that this is still very much a beta product.

xml_lt-2.0.tgz - Joe Armstrong, 
Yet another XML parser. This is an interface to the Edinburgh LT XML toolkit

xmlrpc-1.13.tgz - Joakim Grebenö, 
This is an HTTP 1.1 compliant XML-RPC library for Erlang. It is designed to make it easy to write XML-RPC Erlang clients and/or servers. The library is compliant with the XML-RPC specification published by

xx-1.0.tgz - Torbjörn Törnkvist, 
This module uses parse transformations to define a couple of useful Erlang macros, e.g unique variables within another macro definition.

Last updated   2010-11-29 13:15 UTC