Changes in version 0.1.0.9000 - html_read() raises a path, URL or connection that cannot be opened through the new fail hook of the shared zu_source.R (copied again from zuxml). It was already a zuhtml_input_error naming the cause, without R's warning; the change is mostly internal. The connection that failed to open is now destroyed at once rather than left to the garbage collector. - The message of an invalid path (not a string, a directory, a text-mode connection) is no longer wrapped as "Cannot open ...: ..." with a doubled full stop. Changes in version 0.1.0 (2026-10-06) First release. - Bundles the 'Gumbo' HTML5 parser 0.14.0 from the maintained fork at https://codeberg.org/gumbo-parser/gumbo-parser, with local patches that add a parse-time nesting-depth limit, remove the library's only printf(), and fix two memory-safety bugs in its support that fuzzing found (a use-after-free and a NULL dereference, both reachable from untrusted HTML) and an uninitialized read in fragment parsing. No system library is needed. - New html_parse() and html_read() parse HTML from a string, raw vector or local file under explicit resource limits from the new html_limits(). Nesting depth is bounded while parsing, and all parser memory goes through an allocation ledger with a budget, so a failed parse always releases everything. Raw input is decoded from a byte-order mark, an explicit encoding, the page's declaration or UTF-8; invalid input is an error, never silently replaced. - Parsed documents are converted into a compact immutable tree that holds no reference to the parser or the input. All 1,686 applicable html5lib tree-construction tests that the bundled parser ships produce the expected tree. - New html_fragment() parses markup in the context of a given element, as innerHTML does. - Nodes are zuhtml_nodesets: vectors of nodes tied to their document, with missing nodes where an aligned operation has no answer. Navigate with html_children(), html_parent(), html_ancestors(), html_next_sibling(), html_previous_sibling(), html_root(), html_document() and html_template_content(); read values with html_name(), html_namespace(), html_type(), html_attr(), html_attrs(), html_classes() and html_text(). html_info() describes a document. lapply() and friends over a nodeset pass one node at a time; rep(), rev(), unique() and c() keep nodesets nodesets. - New extraction functions. html_text_clean() gives text as a reader wants it: scripts and styles skipped, whitespace collapsed outside
, line breaks at 
and block elements. html_list() reads a