<div dir="ltr"><div>Did you ever wish you could tell someone "just because I'm exporting this it doesn't mean you should be using it" through your code?</div><div><br></div><div>iota is a tool (and a library) that uses Erlang attributes to allow you to specify application-level APIs implicitly by declaring what exported functions in each module compose the overall API external applications should use to interact with yours, with more checks coming soon(TM).</div>

<div><br></div><div>iota was mostly inspired by the Kappa tool used internally at Klarna and mentioned by Cons T Åhs in his latest talk at the EUC in Stockholm. Kappa is used to make some sense of the free-for-all Erlang allows by having only a broad concept of exported and non-exported functions and performs a number of tasks and techniques that are in part an artifact of the development environment of Klarna and are probably not appropriate for most other people.</div>

<div><br></div><div>With iota, you have a more generic tool that allows you to keep some sanity regarding the interactions between OTP applications while allowing you to export the functions you need inside your own application more freely. By using Erlang attributes we make these checks entirely up to you, so if you feel you must ignore them or don't want to use iota, no one is going to stop you!</div>

<div><br></div><div>iota is hopefully also ready to be turned into rebar or EDTS plugins for a more streamlined integration into your workflows, like as a post-compilation hook.</div><div><br></div><div>But enough with the chit-chat! You can get it (and more details on how to use it) here: <a href="https://github.com/jpgneves/iota">https://github.com/jpgneves/iota</a></div>

<div><br></div><div>If you find it useful (or not), let me know! Any comments, questions and pull requests are welcome!</div><div><br></div><div>Many thanks to Samuel Rivas, Håkan Nilsson and Thomas Järvstrand for providing feedback and useful libraries to build this with, and to Klarna Engineering in general for providing the necessary inspiration and ideas for this initial release.</div>

<div><br clear="all"><div>--<br>João Neves</div>
</div></div>