A framework is like a building. It’s a complete package. It’s monolithic, brittle and opinionated. It works out of the box due to tightly-coupled components at the expense of API differences among competing frameworks. It works out of the box depending on your level of skill and stomach for learning curve.
A metaframework is a building block to build something (or a framework to build a framework). It is modular, extensible and unopinionated. The API is standardized so you can choose components of your own choosing. Recent example is the standardization of the container runtime (Open Container Project).
Examples of frameworks
- Ruby on Rails
- Ansible, Salt, Chef, Puppet
- Deis, Heroku, Engine Yard
Examples of metaframeworks
- Project Iris – build your own message queue
- jQuery – build your own components
- T3 – build your own sandboxed JS app
- Bootstrap – build your own static JS app
- siesta – build your own Go REST app
- anchor – build your own configuration management workflow
- BoltDB – build your own key/value database