- HTML5 parser based on Lexbor
- Super-fast parsing & dom editing
- Lazy ranges to browse dom faster.
- Every method is unit-tested on Linux, MacOS, Windows
All docs are available here
If you are using an LLM (like Gemini, Claude, or ChatGPT) to help you write code with Parserino, you can point it to these files for a concise API overview:
- docs/llms.txt - Core API overview and quick start.
- docs/llms-full.txt - Detailed API reference with examples.
Check also the examples folder
import parserino;
void main()
{
// Parserino will fix your html5
Document doc = "<html>my html";
assert(doc.toString() == "<html><head></head><body>my html</body></html>");
// Set a title for your page
doc.title = "Hello world";
assert(doc.toString() == "<html><head><title>Hello world</title></head><body>my html</body></html>");
// Append a html fragment
doc.body.appendChild(`
<a href="/first.html">first</a>
<div>
<a id="tochange" href="/second.html">second</a>
</div>
`.asFragment // without .asFragment pure text is appended
);
// Create and fill an html element
auto newElement = doc.createElement("a");
newElement.setAttribute("href", "third.html");
newElement.innerText("third");
doc.body.appendChild(newElement);
// You can use selector to select an element
doc
.bySelector("div a") // Select all <a> inside a <div>
.frontOrThrow // Take the first element of the range or throw an exception
.innerText="changed!"; // Change the inner text
assert(doc.body.byId("tochange").innerText == "changed!");
}