don't need to pin version
add generate_app as a function