[erlang-questions] [ANN] iota - a tool for enforcing clean separation of responsibilities

João Neves <>
Thu Sep 19 19:56:23 CEST 2013

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?

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).

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.

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!

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.

But enough with the chit-chat! You can get it (and more details on how to
use it) here: https://github.com/jpgneves/iota

If you find it useful (or not), let me know! Any comments, questions and
pull requests are welcome!

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.

João Neves
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20130919/5004ba01/attachment.html>

More information about the erlang-questions mailing list