I had the exact same question after getting frustrated in learning Angular and the irritating inter-component communication that appeared to add needless complexity. Then someone pointed out to me that if I wanted to create a button using pure Javascript only, I would have to do things like: var btn = document .createElement( "BUTTON" ); // Create a <button> element btn.innerHTML = "CLICK ME" ; // Insert text document .body.appendChild(btn); // Append <button> to <body> Why wouldn't you simply get the HTML from the server? Then you'd have the loading and clunky interface that would feel more like a traditional website rather than a web application. Front-end frameworks are designed to make your website look and feel like an app, that doesn't require loads per page because a lot of the work is done on the client side. It frequently means creating a "single page application" (SPA), and if you really had to build an SPA using vanilla JS only, that would be a tremendous feat indeed due to all of the ancillary stuff you'd need to build in order to make it work.