Erik Stenman wrote The BEAM Book and has built Erlang systems since the 90s. He worked on native code compilers, helped scale Klarna’s backend across Europe, and still prefers tools that show you what’s really going on.
Erlang has strong module boundaries and explicit exports. In larger systems, that gives us a useful foundation, but it leaves one important question mostly to convention: which exported functions are part of the public API, and which ones are only meant to be used inside a local subsystem or application?
This talk presents the motivation behind a proposal for application-level export visibility in Erlang.
The problem is familiar in many mature Erlang systems. As codebases grow, internal helper APIs become exported because several modules need them. Over time, those exports become accidental APIs. Other parts of the system start depending on them, refactoring becomes harder, and the boundary between supported interface and implementation detail becomes vague.
The proposal explores how Erlang could express a middle ground between private functions and fully public exports. The goal is to make intended visibility explicit, help tools detect boundary violations, and give maintainers a clearer way to evolve large systems.
The talk will cover the problem, the proposed semantics, examples from real code, and the design trade-offs raised by the community discussion.
Key Takeaways:
Target Audience: