This is a rough draft of the documentation that will introduce TT3 for developers.
TT3 uses Badger. Badger does all the generic stuff so that TT3 can concentrate on doing template stuff. Separating it out also means that Template::TT2 and Template::TT3 can share a lot of common code. You can also use Badger bits for your own code.
Things of interest include:
Does object construction, error handling, message generation.
Adds the debug() and related debugging methods to objects. Makes the DEBUG flag available.
Aggregates all the useful utilities in Scalar::Util, List::Util, etc., and adds a few of its own.
Allows us to replace all that messy boilerplate code with some nice clean declarative code.
Handles all interaction with the filesystem through a clean OO interface. Also has some nifty features like virtual filesystems, filesystem visitors, automatic encoding and decoding of file (e.g. to handle Unicode) and so on.
Factories are responsible for loading other modules. We do lots of this so that it's easy to load modules on demand, provide different implementations of certain modules, and so on. See Template::TT3::Developer::Factory .