This reminds me of AspectJ in that its a language extension with many similar features (extension methods etc). As useful as those features were, the syntactic sugar you get is confusing to new contributors to a project.<p>Here's a scenario thats played out. In the extension methods example on the Manifold README, it's highlighted that you can add your own methods to Java types. If any dev saw this in the project and they were unaware of manifold, it wouldn't be immediately clear what enables the addition of methods to the Java String type. They would figure it out eventually by either investigating or by debugging. These features blur the lines between programming language and framework.<p>Where I get weary about adding a dependency is when I see documentation with ~100 line boilerplate examples peppered with terms I've never heard before. Just because you use the word simple when describing something complex does not make it so.
This seems to be one of the ideas that just comes up again and again in the Java community. While it has its uses, it comes with a free downsides. The biggest is that debugging becomes very difficult, especially as the code becomes complex. Imagine building it a framework with a subtle is bug and your newest junior engineer struggling with it.