Packages I recommend to get things done.
Here are the guidelines:
- It fulfills a clear function, too complex to warrant building within one's own system
- It prefers returning
{:error, :description_of_error}
over raising an exception - It does not provide
use MyPackage
unless there is a warranted use for it. - It limits the amount of macros that leak into the system outside of the package's API
- [ Maybe NOT -- because only for opaques! We lose pastability otherwise! ] It provides support for the relevant Elixir
Protocol
, such asInspect
- It respects semantic versioning
- It provides an introduction to the package in the hex-level top documentation
- It has hex-level documentation for the public interface
- The public interface is limited
- The internal interface is not documented in hex
- It has an up-to-date CHANGELOG
- It has tests
- It has a small set of dependencies
- I found it usable.