Cottonwood is built to as flexible as possible, top to bottom. It's designed to minimize the iteration time when running experiments and testing ideas. It's meant to be tweaked. Fork it. Add to it. Customize it to solve the problem at hand. Why another framework?
This code is always evolving. I recommend referencing a specific tag whenever you use it in a project. Tags are labeled v1, v2, etc. and the code attached to each one won't change.
If you want to follow along with the construction process for Cottonwood, you can get a step-by-step walkthrough in End-to-End Machine Learning Course 312 and Course 313
git clone --branch v6 https://github.com/brohrer/cottonwood.git
python3 cottonwood/demo.py