Erlang/OTP 20.1 is a service release containing mostly bug fixes, as well as a number of new features.

OTP 20.1 Readme File

OTP 20.1 Source File (95546954)

OTP 20.1 Windows 32-bit Binary File (95546954)

OTP 20.1 Windows 64-bit Binary File (96467859)

OTP 20.1 HTML Documentation File (33059931)

OTP 20.1 Man Pages File (1334036)

Some highlights for 20.1

  • crypto, public_key: Extend crypto and public_key functions sign and verify with:

    • support for RSASSA-PS padding for signatures and for
      saltlength setting
    • X9.31 RSA padding.
    • sha, sha224, sha256, sha384, and sha512 for dss
      signatures as mentioned in NIST SP 800-57 Part 1.
    • ripemd160 to be used for rsa signatures.
  • A new tuple in crypto:supports/0 reports supported MAC

  • diameter:

    • Add service option decode_format to allow incoming messages to be decoded into maps
      instead of records.
    • Decode performance has been improved.
    • Add service/transport option avp_dictionaries to give better support for dictionaries only defining AVPs.
  • erts: Upgraded the ERTS internal PCRE library from version 8.40 to version 8.41.

  • erts, kernel, tools: Profiling with lock counting can now be fully toggled at runtime in
    the lock counting emulator (-emu_type lcnt). Everything
    is enabled by default to match the old behavior, but
    specific categories can be toggled at will with minimal
    runtime overhead when disabled. Refer to the
    documentation on lcnt:rt_mask/1 for details.

    lcnt:collect and lcnt:clear will no longer block all
    other threads in the runtime system. This makes it possible to run the lock counting
    under heavier load.

  • erts: The zlib module has been refactored and all its operations will now yield appropriately,
    allowing them to be used freely in concurrent applications.

  • erts, tools: Add erlang:iolist_to_iovec/1, which converts an
    iolist() to an erlang:iovec(), which is suitable for use
    with enif_inspect_iovec().

  • erts: Add new nif API functions for managing an I/O Queue.
    The added functions are: enif_ioq_create()enif_ioq_destroy()enif_ioq_enq_binary(),

  • observer/crashdump_viewer:

    • Reading of crash dumps with many binaries is optimized.
    • A progress bar is shown when the detail view for a process is opened.
    • The cdv script now sets ERL_CRASH_DUMP_SECONDS=0 to
      avoid generating a new crash dump from the node running the Crashdump Viewer.
  • observer:
    Add system statistics and limits to frontpage in

  • public_key, ssl**:
    Improved error propagation and reports

  • ssh: A new option modify_algorithms is implemented. It
    enables specifying changes on the default algorithms
    list. See the reference manual and the SSH User's Guide
    chapter "Configuring algorithms in SSH".

  • tools/xref: The predefined Xref analysis locals_not_used now understands
    the -on_load() attribute and does not report unused functions.

  • tools/fprof: When sampling multiple processes and analyzing
    with totals set to true, the output now sums together
    all caller and callee entries which concerns the same
    function. Previous behaviour was to report each
    contributing entry separately.

You can find the README and the full listing of changes for this service release at

The source distribution and binary distributions for Windows can be
downloaded from

Note: To unpack the TAR archive you need a GNU TAR compatible program.

For installation instructions please consult the README file that is part
of the distribution.

The Erlang/OTP source can also be found at GitHub on the official Erlang
repository, with tag OTP-20.1

The on-line documentation can be found at:
You can also download the complete HTML documentation or the Unix manual files

Please report any new issues via Erlang/OTPs public issue tracker

We want to thank all of those who sent us patches, suggestions and bug reports!

Thank you!

The Erlang/OTP Team at Ericsson

Compiling Erlang from source

You can build Erlang from source on your own, following the building and installation instructions. Or use the Kerl script. Kerl is a script that lets you easily build Erlang with a few commands. Follow the instructions to build.

Finding a source version

Follow this link that presents all released source versions, a link to the GitHub source tag, and to the README.

Pre-built Binary Packages

Most OS package managers provide pre-built binary packages. You can also download the latest stable releases from Erlang Solutions. Erlang Solutions provides pre-built binary packages for OS X, Windows, Ubuntu, Debian, Fedora, CentOS, Raspbian and other operating systems. 

  • For Homebrew on OS X: brew install erlang
  • For MacPorts on OS X: port install erlang
  • For Ubuntu and Debianapt-get install erlang
  • For Fedorayum install erlang
  • For FreeBSDpkg install erlang


Since OTP 18.0, Erlang/OTP is released under Apache License 2.0. The older releases prior to 18.0 were released under Erlang Public License (EPL), a derivative work of the Mozilla Public License (MPL).