It's easy to make your own SPA using div display: none/block, so is routing. Global store is also pretty easy to do including update events. Async/await makes backend calls super simple, one could still use promises for a few more advanced cases as well, or even go full Saga pattern. Why is a framework needed these days?