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, 8:03:49 PM 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

9 sources
1. See: https://blog.stenmans.org/theBeamBook/#_the_tagging_scheme (search for "64 bytes") and code: https://github.com/erlang/otp/blob/OTP-22.0.7/erts/emulator/... 2. See: https://www.erlang-solutions.com/blog/erlang-garbage-collect... There's no thread-local GC, it's really per process. For instance a scheduler thread that's running a process and hits the need to do an expensive GC may delegate the task to a dirty scheduler (another type of thread, dedicated to long blocking tasks), and go back to running other processes in the meanwhile. It's frequent for processes to move around between schedulers, they steal work from each other.
In The Soul of Erlang and Elixir [video]
Interesting. I'm glad to be wrong because then I learn something! I'm not sure if you have answers, but I have questions: 1. How do they determine what size to start sharing/refcounting at? Now that I'm actually considering it, it's obvious that they'd copy small stuff--an obvious lower limit would be sizeof(<reference_counter_type>) + sizeof(<pointer_type>) because smaller than that, it actually is faster/less memory to copy. But the numbers you're mentioning are higher than that--is there some metadata being stored beyond the reference count and pointer? 2. Is copied data stored in thread storage and garbage collected by that thread's garbage collector? That would be my guess. Obviously the source of truth for all these questions is the code[1], but it's been a while since I dug in there. Maybe it's time to go again. [1] https://github.
Read the rest
In The Soul of Erlang and Elixir [video]
I don't dare to call it spaghetti code because (among the other things) it's split in a lot of functions, but to give an example that's probably equally difficult to everybody, check this Erlang module that parses ASN1 [1] A few hints about the language for the non-functional crowd, then my point 1) Functions can have multiple definitions and are picked top to bottom. The one that runs is the first one matching the arguments in the call. 2) Variables are Capitalized (and can't be assigned again, big surprise.) 3) Atoms (:symbols in other languages) are lower_cased. 4) The arrow (->), the comma (,) and the dot (.) do (more or less) what Java/C do with their { ; } characters (sorry, I have to keep it short) You can start from the bottom and go through the get_token, get_line, parse_ComponentTypeLists etc, find where they are called and see
Read the rest
how they neatly (IMHO) replace the switch statements in other languages. Is it easier to understand? Hard to tell: if the problem is difficult the code won't be easy. Is it less tangled? I think it is. My point: some languages are messiers than others. [1] https://github.com/erlang/otp/blob/master/lib/asn1/src/asn1c...
In In the Defense of Spaghetti Code (2013)
> Ordsets have O(log n) time insert, remove, and lookup operations. They are definitely not lists, they must be trees. To be specific, we were talking about Erlang's ordsets module. You can see it constructed as a list: https://github.com/erlang/otp/blob/d6285b0a347b9489ce939511e... new() -> []. Then notice the function to add an element https://github.com/erlang/otp/blob/d6285b0a347b9489ce939511e.... It's a recursive traversal of the list to find the right place to add it.
In Using Rust to Scale Elixir for 11M Concurrent Users
Erlang distribution is just not meant to be used over the Internet, both for security and network reliability reasons. It’s something you would use on a restricted LAN. It’s also entirely optional. There’s an FAQ entry explaining the reasoning behind this - in short, making a distribution protocol that can work securely with untrusted nodes is very difficult and risky, so the more pragmatic choice is to just not support that use case. https://github.com/erlang/otp/wiki/FAQ:-What-kind-of-patches...
In How And Why We Switched from Erlang to Python (2011)
I have my own notes here: https://www.aizatto.com/engineering-code/commit-messages I think what I really like Angular's Commit Message Guidelines that suggest you include a "type" (build, docs, feature, fix, refactor) prefix into the commit message to help organize at a quick glance what the commit does. https://github.com/angular/angular/blob/master/CONTRIBUTING.... Here are some other resources Erlang https://github.com/erlang/otp/wiki/Writing-good-commit-messa... Gerrit https://www.mediawiki.org/wiki/Gerrit/Commit_message_guideli...
In Commit messages guide
At least some features, yes, and also some optimizations. José Valim was the one who added "Add {continue, Term} and handle_continue/2 to gen_server" - https://github.com/erlang/otp/commit/69e009e3e1ad899a4609ff3... José's contributions are at https://github.com/erlang/otp/commits?author=josevalim and Michał Muskała's at https://github.com/erlang/otp/commits?author=michalmuskala - there may be other Elixir devs in https://github.com/erlang/otp/graphs/contributors. (I even got in a tiny optimization myself once: https://github.com/erlang/otp/commit/07b0f4315b079cce7aeef7b...)
In Elixir v1.8 released

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.