I do all of these, however I'll just point out that <template> isn't fully functional in IE11 and below, and even worse is template strings won't work at all. So if you need a cross-browser solution that works in older browsers, document.createElement() is your option. Also, just a tip for older browsers that don't have <template> - if you want to add a block of multiline HTML or something into the page for templating purposes, you can put whatever you otherwise would have put into <template> in a <script> tag with a custom type="" attribute on it, and then find and work with the content of that tag in JS later: <script type=text/html> <h1>Multiline</h1> <h2>HTML</h2> <h3>Content</h3> </script>