Add detect_version
Add caching
Add submodule