Plug is an attempt to implement a common structure/interface for how to tie together your project and all the libraries and dependencies.
It requires libraries to be aware of it to provide integration but the simplicity of how it's done and the benefits it brings to the table, make it worthy. It sounds greedy but the goal is to become a standard that most libraries will eventually support.
Currently, it provides the following:
- A common configuration structure for your app and all compatible dependencies, w/ pluggable configuration backends.
- A unified way of exposing command/tasks through the same application executable, which plays really well with the idea of "single binary". For example, a database migration tool could expose a migrate command that you call through your application instead of relying on a separate executable.
- A unified common loggging structure, so that all libraries and your application logs using the same format and configuration.