HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
erlang
otp
Erlang2009–2026
erlang / otp

otp

Erlang/OTP

73Distinct people
93Mentions
1Explicit recommenders
12.4KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Erlang/OTP

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

It has built-in maps now! (like dicts or hashes in other languages). http://www.swi-prolog.org/pldoc/man?section=maps That is exciting. I'd want to play with it again. I like…

rdtsc used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 9:02:44 AM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year93 dated mentions

Observed mentions: 2009-11-25 17:20:26 UTC to 2026-05-11 21:10:48 UTC.

0510152009-01-01 00:00:00 UTC to 2010-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments20092010-01-01 00:00:00 UTC to 2011-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2011-01-01 00:00:00 UTC to 2012-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2012-01-01 00:00:00 UTC to 2013-01-01 00:00:00 UTC (exclusive): 2 mentions; 2 submissions, 0 comments2013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 9 mentions; 0 submissions, 9 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 13 mentions; 2 submissions, 11 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 11 mentions; 3 submissions, 8 comments20172018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 5 mentions; 2 submissions, 3 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 9 mentions; 0 submissions, 9 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 16 mentions; 5 submissions, 11 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 8 mentions; 1 submissions, 7 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20092009-01-01 00:00:00 UTC2010-01-01 00:00:00 UTC110
20102010-01-01 00:00:00 UTC2011-01-01 00:00:00 UTC000
20112011-01-01 00:00:00 UTC2012-01-01 00:00:00 UTC000
20122012-01-01 00:00:00 UTC2013-01-01 00:00:00 UTC220
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC202
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC202
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC909
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC13211
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC1138
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC523
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC909
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC16511
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC312
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC211
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC505
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC817
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC413
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC101

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
Erlang/OTP Erlang is a programming language and runtime system for building massively scalable soft real-time systems with requirements on high availability. OTP is a set of Erlang libraries, which consists of the Erlang runtime system, a number of ready-to-use components mainly written in Erlang, and a set of design principles for Erlang programs. Learn more about Erlang and OTP. Learn how to program in Erlang. Examples There are several examples on the website to help you get started. The below example defines a function world/0 that prints "Hello, world" in the Erlang shell: -module(hello). -export([world/0]). world() -> io:format("Hello, world\n"). Save the file as hello.erl and run erl to enter the Erlang shell to compile the module. Erlang/OTP 24 [erts-12.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit] Eshell V12.2 (abort with ^G) 1> c(hello). {ok,hello} 2> hello:world(). Hello, world ok Learn more about the Erlang syntax of modules, functions and expressions on Erlang.org. Installation Binary Distributions Erlang/OTP is available as pre-built binary packages by most OS package managers. apt-get install erlang Compiling from source To compile Erlang from source, run the following commands. The complete building and installation instructions can be found here. git clone https://github.com/erlang/otp.git cd otp Checkout the branch or tag of your choice git checkout maint-27 # current latest stable version Configure, build and install ./configure make make install Alternatively, you can use Kerl, a script that lets you easily build Erlang with a few commands. Bug Reports Please visit our GitHub Issues page for reporting bugs. The instructions for submitting bugs reports can be found here. Security Disclosure Please do not report security vulnerabilities through public channels, like GitHub issues, discussions, or pull requests. Please disclose the security issues following our SECURITY guidelines. Contributing We are grateful to the community for contributing bug fixes and improvements. Read below to learn how you can take part in improving Erlang/OTP. We appreciate your help! Contribution Guide Read our contribution guide to learn about our development process, how to propose fixes and improvements, and how to test your changes to Erlang/OTP before submitting a pull request. Help Wanted We have a list of Help Wanted bugs that we would appreciate external help from the community. This is a great place to get involved. Awesome-Erlang You can find more projects, tools and articles related to Erlang/OTP on the awesome-erlang list. Add your project there. License Erlang/OTP is released under the Apache License 2.0. For any license inquiry, please send an email to opensource@ericsson.com %CopyrightBegin% SPDX-License-Identifier: Apache-2.0 Copyright Ericsson AB 2010-2025. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. %CopyrightEnd%
Read the full README on GitHub

What Hacker News says

13 sources
Why? is also how you resolve the XY problem[1], and asking it five times[2] is the basis of a root cause analysis, and as any parent will tell you[3] is part of raising children, and is also what you should seek to put into a commit message[4]. Why? is almost always a good question to ask. 1. http://meta.stackexchange.com/questions/66377/what-is-the-xy... 2. https://en.m.wikipedia.org/wiki/5_Whys 3. https://m.youtube.com/watch?v=sahSAMj8OIY 4. https://github.com/erlang/otp/wiki/writing-good-commit-messa...
In How to Accept Over-Engineering for What It Really Is
Yap. Erlang 19 (latest version) switched to using a smaller spawner executable and spawns all OS processes from there by forking. So it forks something restricted and small not the whole VM. Here are the details of how it works: https://github.com/erlang/otp/blob/a5256e5221aff30f6d2cc7fab... They also claim a 3-5x speedup for launching external commands because of it. So there is a nice performance boost as well. So basically can add 4th strategy -- fork once a small program at the start, then fork from there from then on.
In Fork() without exec() is dangerous in large programs
I think it's probably more of a consequence of the long long discussions that were had at https://github.com/erlang/otp/pull/960 -- with 15 participants from the OTP team, regular Erlangers, and I'm sure a few Elixir people too. My idea here is not to remove merit from Elixir in helping the ecosystem, but in pointing out that the Erlang community itself is expanding on these ideas of involvement and a more open design.
In Erlang/OTP 19.0 has been released
Erlang is written in a ton of quite readable C and assembly. If you like delving into the internals of advanced software, it's well worth a read. Take the HiPe compiler for example: https://github.com/erlang/otp/tree/OTP-19.0/erts/emulator/hi... It deals with running native and interpreted program code together, just reading the comments gives you a feel for the kind of low level concepts that go into making such an interpreter. I like this one: /* * Native code calls an emulated-mode closure via a stub defined below. * * The closure is appended as the last actual parameter, and parameters * beyond the first few passed in registers are pushed onto the stack in * left-to-right order. * Hence, the location of the closure parameter only depends on the number *
Read the rest
of parameters in registers, not the total number of parameters. */
In Erlang/OTP 19.0 has been released
This unfortunately breaks down with (bad acting) NIFs. Thankfully you can mark 'em as the dirty evil little things that they are (with negligible overhead): ERL_NIF_DIRTY_JOB_CPU_BOUND. [1] I implore anyone interested in Erlang or its surrounding languages, to read its source code. [2] More specifically, the BEAM. I'll warn you that it's very 80's hackeresque, but in a good way. Incredibly pragmatic. The way they achieve their world-class scheduling? Tip: not via a perfect theoretical design cooked up in some comp-sci lab. [3] If you've been following game engine design within the last 9 years or so, you'll probably have a good idea of how they do it. [4][5] [1]: https://medium.com/@jlouis666/erlang-dirty-scheduler-overhea... [2]: https://github.com/erlang/otp/tree/maint/erts/emulator/beam [3]: https://hamidreza-s.github.io/erlang/schedul
Read the rest
ing/real-time/pr... [4]: http://blog.molecular-matters.com/2012/04/05/building-a-load... [5]: There's a hell of a lot of depth to this problem domain. Charles Bloom's guiding principles for Oodle are spot, and well worth a look.
In Why Erlang Matters

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.