Another option for html is my dom.d https://github.com/adamdruppe/arsd
get dom.d and characterencodings.d in your project directory. compile with dmd yourfile.d dom.d characterencodings.d here's an example: import arsd.dom; void main() { auto document = new Document(); // The example document will be defined inline here // We could also load the string from a file with // std.file.readText or the web with std.net.curl.get document.parseGarbage(`<html><head> <meta name="author" content="Adam D. Ruppe"> <title>Test Document</title> </head> <body> <p>This is the first paragraph of our <a href="test.html">test document</a>. <p>This second paragraph also has a <a href="test2.html">link</a>. <p id="custom-paragraph">Old text</p> </body> </html>`); import std.stdio; // retrieve and print some meta information writeln(document.title); writeln(document.getMeta("author")); // show a paragraphâs text writeln(document.requireSelector("p").innerText); // modify all links document["a[href]"].setValue("source", "your-site"); // change some html document.requireElementById("custom-paragraph").innerHTML = "New <b>HTML</b>!"; // show the new document writeln(document.toString()); } You can replace the html string with something like std.file.readText("yourfile.html"); too My library is meant to give an api similar to javascript. I don't use dub so idk about how to use that, I just recommend adding my files to your project if you wanna try it.