on disk organization for standard MXSD: root/ config.yml --- backend: class: ... ... indexes: - class: ... roles: ... type: entry or object ... storage/ ... indexes/ foo/ bar/ gorch/ the load routine goes through the config, loads/composes/creates classes from the class and roles params, and then provides these objects as constructor parameters. Basically all you need to give is the 'root' parameter, and everything else is configured from the config file. It is still possible to instantiate everything manually, for different types of backends, etc.